miniriverpod मागील डिझाइन तत्त्वे.

पॅकेज वर्तन स्पष्ट राहावे म्हणून वैशिष्ट्ये मुद्दाम मर्यादित करते: args वर आधारित provider ओळख, Scope द्वारे scoped injection, आणि अंदाज करता येणारी disposal semantics.

Riverpod पासून काय बदलते

निर्मित family classes आणि implicit notifier channels ऐवजी, miniriverpod subclass + args + explicit invoke ला प्राधान्य देतो.

Provider identity

runtimeType + args hash

family alternative

Provider / AsyncProvider चे subclass तयार करा आणि super.args((...)) पास करा.

DI fallback

Scope<T>.required + overrideWithValue

हे का महत्त्वाचे आहे

सामान्य Dart constructors मधून equality आणि overrides बद्दल विचार करता येतो, ज्यामुळे debugging आणि tests सोपे राहतात.

args सह Provider ओळख

args provider key ठरवते, त्यामुळे समान args म्हणजे ProviderContainer मधील तोच cache entry.

Identity rule

व्यावहारिक परिणाम

- वेगळ्या family type ची गरज नाही.
- प्रत्येक argument साठी override provider instances तयार करून केले जाते.
- अंदाज करता येणाऱ्या caching साठी args स्थिर आणि immutable ठेवा.

उदाहरण: family-सारखा provider + Scope fallback

constructor argument ला ओळख म्हणून वापरा आणि Scope मधून fallback instance inject करा.

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 अवलंबित्वांची जोडणी स्पष्ट आणि चाचणीसाठी सोयीस्कर ठेवतो.
overrideWithValue प्रत्येक provider instance साठी काम करते, args-आधारित instance सहित.
subclass + args वापरल्याने autoDispose चे वर्तन बदलत नाही.

पुढील पावले

प्रोव्हायडर आणि वाचन

watch/read/listen आणि AsyncProvider.future साठी ठोस patterns पहा.

प्रोव्हायडर उघडा

म्युटेशन्स

mutation token, mutate, आणि ref.invoke वापरून state updates अंमलात आणा.

Mutations उघडा