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

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

Provider ແລະການອ່ານ

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

ເປີດ Provider

ການປ່ຽນແປງ

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

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