ຫຼັກການອອກແບບຢູ່ຂ້າງຫຼັງ 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(),
);
Scope ຮັກສາການຕໍ່ເຊື່ອມຂອງ dependency ໃຫ້ຊັດເຈນ ແລະສະດວກຕໍ່ການທົດສອບ.
overrideWithValue ໃຊ້ງານຕາມ provider instance ແຕ່ລະອັນ, ລວມເຖິງ instance ທີ່ອີງໃສ່ args.
ພ຤ດິກຳ autoDispose ບໍ່ປ່ຽນແປງເມື່ອໃຊ້ subclass + args.

ຂັ້ນຕອນຕໍ່ໄປ

Provider ແລະການອ່ານ

ເບິ່ງ pattern ທີ່ຈະແນ່ນອນສໍາລັບ watch/read/listen ແລະ AsyncProvider.future.

ເປີດ Provider

ການປ່ຽນແປງ

ສ້າງການອັບເດດ state ດ້ວຍ mutation token, mutate, ແລະ ref.invoke.

ເປີດການປ່ຽນແປງ