स्पष्ट container मालकीसह Flutter एकत्रीकरण.

ProviderScope कंटेनरचे मालक होऊ शकते किंवा बाहेरून एखादा कंटेनर स्वीकारू शकते. Consumer APIs WidgetRef प्रवेश Riverpod-शैलीच्या कोडशी सुसंगत ठेवतात.

ProviderScope मालकी

Container मालकीमुळे disposal जबाबदारी बदलते.

आंतरिक container

ProviderScope(child: ...) आपोआप dispose होते

बाह्य container

ProviderScope(container: c, ...) साठी कॉल करणाऱ्याने c.dispose() करणे आवश्यक आहे

अनियंत्रित scope

UncontrolledProviderScope कधीच container dispose करत नाही

सामान्य अडचण

widget tests मध्ये बाहेरून inject केलेला ProviderContainer dispose करायला विसरू नका, अन्यथा pending timer leaks होऊ शकतात.

Consumer प्रकार

सर्व पर्याय WidgetRef उघड करतात; widget शैली आणि स्थानिक state गरजेनुसार निवडा.

अॅप root

प्रत्येक कधी वापरायचा

Consumer: लहान reactive क्षेत्रांसाठी स्थानिक builder ब्लॉक.
ConsumerWidget: build(context, ref) असलेले stateless widget.
ConsumerStatefulWidget: ConsumerState मधील ref असलेले stateful widget.

उदाहरण: ConsumerStatefulWidget

जेव्हा तुम्हाला WidgetRef आणि स्थानिक बदलणारा 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 ची अंतर्गत रचना rebuilds ला frame नंतर वेळापत्रकित करते, ज्यामुळे build दरम्यान setState समस्यांमध्ये घट होते.
WidgetRef.watch फक्त अशा मूल्यांसाठी वापरा ज्यांनी rebuild सुरू करणे आवश्यक आहे.
Side effects build च्या बाहेर ठेवा; callbacks आणि invoke/refresh पद्धती वापरा.

पुढील पावले

चाचणी

container जीवनचक्र, overrides आणि async updates unit आणि widget tests मध्ये पडताळा.

चाचणी उघडा

API संदर्भ

ProviderScope, WidgetRef आणि container methods यांच्या signatures पहा.

API संदर्भ उघडा