miniriverpod-ийн цаадах дизайны зарчмууд.
Энэхүү багц нь зан төлөвийг тодорхой байлгахын тулд боломжуудыг зориудаар хязгаарладаг: args-ээр provider-ийн танигч, Scope-оор scope-той injection, болон урьдчилан таамаглах боломжтой disposal semantics.
Riverpod-оос юу өөрчлөгдөх вэ
Үүсгэсэн family классууд болон далд notifier сувгуудын оронд miniriverpod нь subclass + args + explicit invoke-г илүүд үздэг.
Provider-ийн танигч
runtimeType + args hash
family-ийн хувилбар
Provider / AsyncProvider-г subclass болгож, super.args((...)) дамжуулна уу
DI fallback
Scope<T>.required + overrideWithValue
Энэ яагаад чухал вэ
Энгийн Dart constructor-уудаас тэнцүү байдал болон override-уудыг дүгнэж болох бөгөөд энэ нь debugging болон test-үүдийг энгийн байлгадаг.
args-тай Provider танигч
args нь provider-ийн түлхүүрийг тодорхойлдог тул ижил args нь ProviderContainer доторх ижил cache entry гэсэн үг.
Танигчийн дүрэм
Практик үр дагавар
- Тусгай family төрөл шаардлагагүй.
- Аргумент тус бүрийн override-ийг provider instance үүсгэж хийдэг.
- Таамаглах боломжтой caching-ийн тулд args-ийг тогтвортой, өөрчлөгдөхгүй байлга.
Жишээ: family-тэй төстэй provider + Scope fallback
Constructor-ын аргументыг танигч болгон ашиглаж, Scope-оор дамжуулан fallback instance оруулна уу.
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-ууд ба уншилт
watch/read/listen болон AsyncProvider.future-ийн тодорхой pattern-уудыг үзнэ үү.
Provider-уудыг нээхMutation-ууд
mutation token, mutate, ref.invoke ашиглан state update-уудыг хэрэгжүүлнэ үү.
Mutation-уудыг нээх