miniriverpod-এর পেছনের নকশা নীতি।

প্যাকেজটি ইচ্ছাকৃতভাবে বৈশিষ্ট্য সংকুচিত করে, যাতে আচরণ স্পষ্ট থাকে: args দিয়ে provider identity, scoped injection, এবং predictable disposal semantics।

Riverpod থেকে কী বদলায়

জেনারেটেড family classes এবং implicit notifier channel-এর বদলে, miniriverpod subclass + args + explicit invoke পছন্দ করে।

Provider identity

runtimeType + args hash

family alternative

Subclass Provider / AsyncProvider এবং super.args((...)) পাস করুন

DI fallback

Scope<T>.required + overrideWithValue

এটি কেন গুরুত্বপূর্ণ

সাধারণ Dart constructor দিয়ে equality এবং override নিয়ে যুক্তি করা যায়, যা debugging এবং test-কে সহজ রাখে।

args সহ Provider identity

args provider key নির্ধারণ করে, তাই সমান args মানে ProviderContainer-এর ভিতরে একই cache entry।

Identity rule

ব্যবহারিক ফলাফল

- আলাদা family type প্রয়োজন নেই.
- প্রতিটি argument-এর জন্য override provider instance তৈরি করে করা হয়.
- পূর্বানুমেয় caching-এর জন্য args স্থির এবং অপরিবর্তনীয় রাখুন.

উদাহরণ: family-এর মতো provider + Scope fallback

একটি constructor argument-কে identity হিসেবে ব্যবহার করুন এবং 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 dependency wiring-কে স্পষ্ট এবং test-friendly রাখে।
overrideWithValue প্রতিটি provider instance-এ কাজ করে, args-ভিত্তিক instance-সহ।
subclass + args ব্যবহার করলে autoDispose আচরণ অপরিবর্তিত থাকে।

পরবর্তী পদক্ষেপ

Providers এবং Reads

watch/read/listen এবং AsyncProvider.future-এর জন্য নির্দিষ্ট pattern দেখুন।

Provider খুলুন

Mutations

mutation tokens, mutate, এবং ref.invoke দিয়ে state update বাস্তবায়ন করুন।

Mutations খুলুন