स्पष्ट container स्वामित्वसहितको Flutter एकीकरण।

ProviderScope ले container आफैंसँग राख्न सक्छ वा बाहिरबाट प्राप्त गर्न सक्छ। Consumer API हरूले WidgetRef पहुँचलाई Riverpod शैलीको कोडसँग मिल्दोजुल्दो राख्छन्।

ProviderScope स्वामित्व

Container स्वामित्वले dispose जिम्मेवारी बदल्छ।

आन्तरिक container

ProviderScope(child: ...) स्वतः dispose हुन्छ

बाह्य container

ProviderScope(container: c, ...) का लागि c.dispose() बोलाउनेले गर्नुपर्छ

नियन्त्रणरहित scope

UncontrolledProviderScope ले container कहिल्यै dispose गर्दैन

सामान्य समस्या

widget परीक्षणहरूमा बाहिरबाट inject गरिएको ProviderContainer लाई dispose गर्न नबिर्सनुहोस्, नत्र pending timer leak हुन सक्छ।

Consumer प्रकारहरू

सबै विकल्पहरूले WidgetRef देखाउँछन्; widget शैली र स्थानीय state आवश्यकताका आधारमा छान्नुहोस्।

App root

कहिले कुन प्रयोग गर्ने

Consumer: साना reactive क्षेत्रहरूका लागि स्थानीय builder block.
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 को आन्तरिक प्रणालीले rebuild हरूलाई frame पछि तालिकाबद्ध गर्छ, जसले build समयमा setState सम्बन्धी समस्याहरू घटाउँछ।
WidgetRef.watch लाई rebuild सुरु गराउनु पर्ने मानहरूका लागि मात्र प्रयोग गर्नुहोस्।
side effect हरूलाई build बाहिर राख्नुहोस्; callback र invoke/refresh विधिहरू प्रयोग गर्नुहोस्।

अर्को कदम

परीक्षण

container को जीवनचक्र, override हरू, र async अद्यावधिकहरू unit तथा widget परीक्षणहरूमा प्रमाणित गर्नुहोस्।

परीक्षण खोल्नुहोस्

API सन्दर्भ

ProviderScope, WidgetRef, र container विधिहरूका signatures हेर्नुहोस्।

API सन्दर्भ खोल्नुहोस्