ਸਪੱਸ਼ਟ container ਮਾਲਕੀ ਨਾਲ Flutter ਇਕੀਕਰਨ।

ProviderScope ਇੱਕ container ਦਾ ਮਾਲਕ ਹੋ ਸਕਦਾ ਹੈ ਜਾਂ ਬਾਹਰੋਂ ਇੱਕ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦਾ ਹੈ। Consumer API WidgetRef ਪਹੁੰਚ ਨੂੰ Riverpod-ਸ਼ੈਲੀ ਕੋਡ ਨਾਲ ਸੁਸੰਗਤ ਰੱਖਦੀਆਂ ਹਨ।

ProviderScope ਮਾਲਕੀ

Container ਮਾਲਕੀ disposal ਜ਼ਿੰਮੇਵਾਰੀ ਨੂੰ ਬਦਲਦੀ ਹੈ।

ਅੰਦਰੂਨੀ container

ProviderScope(child: ...) ਆਪਣੇ ਆਪ dispose ਹੁੰਦਾ ਹੈ

ਬਾਹਰੀ container

ProviderScope(container: c, ...) ਲਈ caller ਨੂੰ c.dispose() ਕਰਨਾ ਪੈਂਦਾ ਹੈ

Uncontrolled scope

UncontrolledProviderScope container ਨੂੰ ਕਦੇ ਵੀ dispose ਨਹੀਂ ਕਰਦਾ

ਆਮ ਗਲਤੀ

widget tests ਵਿੱਚ, ਬਾਹਰੋਂ inject ਕੀਤੇ ProviderContainer ਨੂੰ dispose ਕਰਨਾ ਯਾਦ ਰੱਖੋ ਤਾਂ ਜੋ pending timer leaks ਤੋਂ ਬਚਿਆ ਜਾ ਸਕੇ।

Consumer ਕਿਸਮਾਂ

ਸਾਰੇ ਵਿਕਲਪ WidgetRef ਦਿਖਾਉਂਦੇ ਹਨ; widget ਸ਼ੈਲੀ ਅਤੇ ਸਥਾਨਕ state ਦੀ ਲੋੜ ਅਨੁਸਾਰ ਚੁਣੋ।

ਐਪ root

ਹਰ ਇੱਕ ਕਦੋਂ ਵਰਤਣਾ ਹੈ

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 ਦੀ ਅੰਦਰੂਨੀ ਰਚਨਾ rebuilds ਨੂੰ frame ਤੋਂ ਬਾਅਦ ਤਹਿ ਕਰਦੀ ਹੈ, ਜਿਸ ਨਾਲ build ਦੌਰਾਨ setState ਸਮੱਸਿਆਵਾਂ ਘਟਦੀਆਂ ਹਨ।
WidgetRef.watch ਸਿਰਫ਼ ਉਹਨਾਂ ਮੁੱਲਾਂ ਲਈ ਵਰਤੋ ਜਿਨ੍ਹਾਂ ਨੂੰ rebuild ਸ਼ੁਰੂ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ।
side effects ਨੂੰ build ਤੋਂ ਬਾਹਰ ਰੱਖੋ; callbacks ਅਤੇ invoke/refresh ਢੰਗ ਵਰਤੋ।

ਅਗਲੇ ਕਦਮ

ਟੈਸਟਿੰਗ

container lifecycle, overrides, ਅਤੇ async updates ਨੂੰ unit ਅਤੇ widget tests ਵਿੱਚ ਪਰਖੋ।

ਟੈਸਟਿੰਗ ਖੋਲ੍ਹੋ

API ਰੇਫਰੈਂਸ

ProviderScope, WidgetRef, ਅਤੇ container methods ਲਈ signatures ਵੇਖੋ।

API ਰੇਫਰੈਂਸ ਖੋਲ੍ਹੋ