স্কিপ করে মূল কন্টেন্ট এ যাও

প্রভাইডার অবসার্বার

ProviderObserver একটি ProviderContainer এর পরিবর্তন লিসেন করে।

এটি ব্যবহার করতে, ProviderObserver ক্লাস এক্সটেন্ড করুন এবং আপনি যে মেথড ব্যবহার করতে চান সেটি ওভাররাইড করুন।

ProviderObserver এর তিনটি মেথড রয়েছে :

  • didAddProvider প্রতিবার যখন কোনো প্রভাইডারের সূচনা করা হয় তখন কল হয়, এবং উন্মোচিত মান হল value
  • didDisposeProvider প্রতিবার কল করা হয় যখন একটি প্রভাইডার নিষ্পত্তি হয়।
  • didUpdateProvider প্রতিবার প্রভাইডারের যখন একটি বিজ্ঞপ্তি প্রকাশ করে তখন কল করে।

Usage :

ProviderObserver-এর জন্য একটি সাধারণ ব্যবহারের ক্ষেত্রে হল didUpdateProvider মেথড ওভাররাইড করে প্রভাইডারদের পরিবর্তনগুলি লগ করা।


// A Counter example implemented with riverpod with Logger

class Logger extends ProviderObserver {

void didUpdateProvider(
ProviderBase<Object?> provider,
Object? previousValue,
Object? newValue,
ProviderContainer container,
) {
print('''
{
"provider": "${provider.name ?? provider.runtimeType}",
"newValue": "$newValue"
}''');
}
}

void main() {
runApp(
// Adding ProviderScope enables Riverpod for the entire project
// Adding our Logger to the list of observers
ProviderScope(observers: [Logger()], child: const MyApp()),
);
}

class MyApp extends StatelessWidget {
const MyApp({super.key});


Widget build(BuildContext context) {
return MaterialApp(home: Home());
}
}

final counterProvider = StateProvider((ref) => 0, name: 'counter');

class Home extends ConsumerWidget {

Widget build(BuildContext context, WidgetRef ref) {
final count = ref.watch(counterProvider);

return Scaffold(
appBar: AppBar(title: const Text('Counter example')),
body: Center(
child: Text('$count'),
),
floatingActionButton: FloatingActionButton(
onPressed: () => ref.read(counterProvider.notifier).state++,
child: const Icon(Icons.add),
),
);
}
}

এখন প্রতিবার আমাদের প্রভাইডারের মান আপডেট করা হলে, লগার এটি লগ করবে:

I/flutter (16783): {
I/flutter (16783): "provider": "counter",
I/flutter (16783): "newValue": "1"
I/flutter (16783): }