ຫຼັກການອອກແບບຢູ່ຂ້າງຫຼັງ miniriverpod.
ແພັກເກດນີ້ຈໍາກັດຟັງຊັນໂດຍເຈດຕະນາເພື່ອຮັກສາພດິກຳໃຫ້ຊັດເຈນ: provider identity ຕາມ args, ການສອດແຊກຜ່ານ Scope, ແລະ semantics ການຖອນອອກທີ່ຄາດໄດ້.
ມີຫຍັງປ່ຽນໄປຈາກ Riverpod
ແທນທີ່ຈະໃຊ້ family classes ທີ່ສ້າງຂຶ້ນອັດຕະໂນມັດ ແລະ notifier channels ແບບອິມພລິຊິດ, miniriverpod ນິຍົມ subclass + args + explicit invoke.
Provider identity
runtimeType + args hash
ທາງເລືອກຂອງ family
Subclass Provider / AsyncProvider ແລະສົ່ງ super.args((...))
DI fallback
Scope<T>.required + overrideWithValue
ເຮັດໄມຈຶ່ງສໍາຄັນ
ທ່ານສາມາດອະທິບາຍຄວາມເທົ່າກັນ ແລະ overrides ໄດ້ຈາກ Dart constructors ທຳມະດາ, ຊຶ່ງຊ່ວຍໃຫ້ debugging ແລະ tests ງ່າຍຂຶ້ນ.
Provider identity ດ້ວຍ args
args ກໍານົດຄີຂອງ provider, ດັ່ງນັ້ນ args ທີ່ເຫມືອນກັນຫມາຍເຖິງ cache entry ດຽວກັນພາຍໃນ ProviderContainer.
ກົດກາອັດລັກສະນະ
ຜົນຕາມມາທີ່ປະຕິບັດໄດ້
- ບໍ່ຈໍາເປັນຕ້ອງມີ family type ເຉົ້າຈໍາເພາະ.
- override ຕາມແຕ່ລະ argument ເຮັດໂດຍການສ້າງ provider instances.
- ຮັກສາ args ໃຫ້ຄົງທີ່ ແລະ immutable ເພື່ອ caching ທີ່ຄາດໄດ້.
ຕົວຢ່າງ: provider ຄ້າຍ family + Scope fallback
ໃຊ້ constructor argument ເປັນຕົວລະບຸຕົນຕົນ ແລະສອດແຊກ fallback instance ຜ່ານ Scope.
class ProductProvider extends AsyncProvider<List<Product>> {
ProductProvider({this.search = ''}) : super.args((search,));
final String search;
static final fallback = Scope<ProductProvider>.required('product.fallback');
@override
FutureOr<List<Product>> build(ref) async {
final api = ref.watch(productsApiProvider);
return api.search(q: search);
}
}
// ສອດແຊກ
ProviderScope(
overrides: [
ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
],
child: const App(),
);
ຂັ້ນຕອນຕໍ່ໄປ
Provider ແລະການອ່ານ
ເບິ່ງ pattern ທີ່ຈະແນ່ນອນສໍາລັບ watch/read/listen ແລະ AsyncProvider.future.
ເປີດ Provider