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(),
);
Scope нь dependency wiring-ийг ил тод бөгөөд тестэд ээлтэй байдлаар хадгалдаг.
overrideWithValue нь args-д суурилсан instance-уудыг ч багтаан provider instance бүр дээр ажилладаг.
subclass + args ашиглахад autoDispose-ийн зан төлөв өөрчлөгдөхгүй.

Дараагийн алхмууд

Provider-ууд ба уншилт

watch/read/listen болон AsyncProvider.future-ийн тодорхой pattern-уудыг үзнэ үү.

Provider-уудыг нээх

Mutation-ууд

mutation token, mutate, ref.invoke ашиглан state update-уудыг хэрэгжүүлнэ үү.

Mutation-уудыг нээх