ຫຼັກການອອກແບບຢູ່ຂ້າງຫຼັງ miniriverpod.
ແພັກເກດນີ້ຈໍາກັດຟັງຊັນໂດຍເຈດຕະນາເພື່ອຮັກສາພດິກຳໃຫ້ຊັດເຈນ: provider identity ຕາມ args, ການສອດແຊກຜ່ານ Scope, ແລະ semantics ການຖອນອອກທີ່ຄາດໄດ້.
ມີຫຍັງປ່ຽນໄປຈາກ Riverpod
ແທນທີ່ຈະໃຊ້ family classes ທີ່ສ້າງຂຶ້ນອັດຕະໂນມັດ ແລະ notifier channels ແບບອິມພລິຊິດ, miniriverpod ນິຍົມ subclass + args + explicit invoke.
Provider identity
runtimeType + args hash
family alternative
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.
Identity rule
ຜົນຕາມມາທີ່ປະຕິບັດໄດ້
- ບໍ່ຈໍາເປັນຕ້ອງມີ 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);
}
}
// Inject
ProviderScope(
overrides: [
ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
],
child: const App(),
);
ຂັ້ນຕອນຕໍ່ໄປ
Provider ແລະການອ່ານ
ເບິ່ງ pattern ທີ່ຈະແນ່ນອນສໍາລັບ watch/read/listen ແລະ AsyncProvider.future.
ເປີດ Provider