स्पष्ट container स्वामित्व के साथ Flutter इंटीग्रेशन.

ProviderScope किसी container का मालिक बन सकता है या बाहर से एक container प्राप्त कर सकता है। Consumer APIs WidgetRef access को Riverpod-शैली के code के साथ संगत रखते हैं।

ProviderScope स्वामित्व

Container स्वामित्व disposal की ज़िम्मेदारी बदल देता है।

आंतरिक container

ProviderScope(child: ...) अपने आप dispose हो जाता है

बाहरी container

ProviderScope(container: c, ...) के लिए caller को c.dispose() करना होता है

अनियंत्रित scope

UncontrolledProviderScope container को कभी dispose नहीं करता

आम गलती

Widget tests में, बाहर से inject किए गए ProviderContainer को dispose करना याद रखें ताकि pending timer leaks से बचा जा सके।

Consumer विविधताएँ

सभी विकल्प WidgetRef उपलब्ध कराते हैं; widget style और local state ज़रूरतों के आधार पर चुनें।

ऐप रूट

कब किसका उपयोग करें

Consumer: छोटे reactive क्षेत्रों के लिए स्थानीय builder block.
ConsumerWidget: build(context, ref) वाला stateless widget.
ConsumerStatefulWidget: ConsumerState के अंदर ref वाला stateful widget.

उदाहरण: ConsumerStatefulWidget

जब आपको WidgetRef और स्थानीय mutable UI state दोनों चाहिए हों, तब ConsumerState का उपयोग करें।

class HomePage extends ConsumerStatefulWidget {
  const HomePage({super.key});

  @override
  ConsumerState<HomePage> createState() => _HomePageState();
}

class _HomePageState extends ConsumerState<HomePage> {
  bool expanded = false;

  @override
  Widget build(BuildContext context) {
    final user = ref.watch(currentUser);
    return Column(
      children: [
        Text('$user'),
        Switch(
          value: expanded,
          onChanged: (v) => setState(() => expanded = v),
        ),
      ],
    );
  }
}
Consumer के अंदरूनी हिस्से rebuild को post-frame के लिए शेड्यूल करते हैं, जिससे setState-during-build समस्याएँ कम होती हैं।
WidgetRef.watch का उपयोग केवल उन्हीं मानों के लिए करें जिन्हें rebuild ट्रिगर करना चाहिए।
Side effects को build के बाहर रखें; callbacks और invoke/refresh methods का उपयोग करें।

अगले कदम

टेस्टिंग

unit और widget tests में container lifecycle, overrides, और async updates सत्यापित करें।

टेस्टिंग खोलें

API संदर्भ

ProviderScope, WidgetRef, और container methods के signatures देखें।

API संदर्भ खोलें