Kanuni za usanifu zilizo nyuma ya miniriverpod.
Kifurushi hiki hupunguza kwa makusudi vipengele ili tabia ibaki wazi: utambulisho wa provider kupitia args, uwekaji ndani ya scope, na semantiki ya utupaji inayotabirika.
Nini hubadilika ikilinganishwa na Riverpod
Badala ya madarasa ya family yaliyotengenezwa na chaneli fiche za notifier, miniriverpod hupendelea subclass + args + invoke ya wazi.
Utambulisho wa provider
runtimeType + hash ya args
mbadala wa family
Rithi Provider / AsyncProvider na pitisha super.args((...))
mbadala wa DI
Scope<T>.required + overrideWithValue
Kwa nini hili ni muhimu
Unaweza kuhoji usawa na overrides kutoka kwa konstrakta za Dart za kawaida, jambo linalorahisisha debugging na majaribio.
Utambulisho wa provider kwa args
args hufafanua ufunguo wa provider, hivyo args zinazofanana humaanisha ingizo lile lile la cache ndani ya ProviderContainer.
Kanuni ya utambulisho
Madhara ya vitendo
- Aina maalum ya family haihitajiki.
- Ubadilishaji kwa kila hoja hufanywa kwa kuunda mifano ya provider.
- Weka args ziwe thabiti na zisizobadilika ili cache itabirika.
Mfano: provider kama family + mbadala wa Scope
Tumia hoja ya konstrukta kama utambulisho na ingiza mfano mbadala kupitia 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);
}
}
// Ingiza
ProviderScope(
overrides: [
ProductProvider.fallback.overrideWithValue(ProductProvider(search: 'jeans')),
],
child: const App(),
);
Hatua zinazofuata
Provida na usomaji
Tazama mifumo halisi ya watch/read/listen na AsyncProvider.future.
Fungua provida