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

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

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

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

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

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

Usage :

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


// লগারের সাথে রিভারপডের সাথে বাস্তবায়িত একটি কাউন্টার উদাহরণ

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(
// ProviderScope যোগ করা পুরো প্রকল্পের জন্য রিভারপডকে সক্ষম করে
// 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): }