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

FutureProvider

FutureProvider হল Provider এর সমতুল্য কিন্তু অ্যাসিঙ্ক্রোনাস কোডের জন্য।

FutureProvider সাধারণত এর জন্য ব্যবহৃত হয়:

  • অ্যাসিঙ্ক্রোনাস ক্রিয়াকলাপ সম্পাদন করা এবং ক্যাশে করা (যেমন নেটওয়ার্ক রিকুয়েস্ট)
  • অ্যাসিঙ্ক্রোনাস অপারেশনের ত্রুটি/লোডিং অবস্থা সুন্দরভাবে পরিচালনা করা
  • একাধিক অ্যাসিঙ্ক্রোনাস ভ্যালুকে অন্য ভ্যালুর সাথে একত্রিত করা

ref.watch এর সাথে মিলিত হলে FutureProvider অনেক লাভ করে। এই সংমিশ্রণটি কিছু ভেরিয়েবল পরিবর্তন হলে কিছু ডেটা স্বয়ংক্রিয়ভাবে পুনঃ-আনয়নের/ফেচের অনুমতি দেয়, এটি নিশ্চিত করে যে আমাদের সর্বদা সর্বাধিক আপ-টু-ডেট ভ্যালু রয়েছে।

info

FutureProvider ব্যবহারকারীর ইন্টারঅ্যাকশনের পরে গণনাকে সরাসরি পরিবর্তন করার উপায় অফার করে না। এটি সাধারণ ব্যবহারের ক্ষেত্রে সমাধান করার জন্য ডিজাইন করা হয়েছে। আরও উন্নত পরিস্থিতির জন্য, StateNotifierProvider ব্যবহার করার কথা বিবেচনা করুন।

ব্যবহারের উদাহরণ: একটি কনফিগারেশন ফাইল পড়া

FutureProvider একটি JSON ফাইল পড়ার মাধ্যমে তৈরি করা Configuration অবজেক্টকে প্রকাশ করার একটি সুবিধাজনক উপায় হতে পারে।

কনফিগারেশন তৈরি করা আপনার সাধারণ async/await সিনট্যাক্স দিয়ে করা হবে, কিন্তু প্রভাইডারের ভিতরে। Flutter এর Asset সিস্টেম ব্যবহার করে, এটি হবে:



Future<Configuration> fetchConfiguration(FetchConfigurationRef ref) async {
final content = json.decode(
await rootBundle.loadString('assets/configurations.json'),
) as Map<String, Object?>;

return Configuration.fromJson(content);
}

তারপরে, UI এর মতো কনফিগারেশন রিড করতে পারেঃ


Widget build(BuildContext context, WidgetRef ref) {
final config = ref.watch(fetchConfigurationProvider);

return switch (config) {
AsyncError(:final error) => Text('Error: $error'),
AsyncData(:final value) => Text(value.host),
_ => const CircularProgressIndicator(),
};
}

Future সম্পূর্ণ হলে এটি স্বয়ংক্রিয়ভাবে UI পুনর্নির্মাণ করবে। একই সময়ে, যদি একাধিক উইজেট কনফিগারেশন চায়, Asset শুধুমাত্র একবার ডিকোড করা হবে.

আপনি দেখতে পাচ্ছেন, একটি উইজেটের ভিতরে একটি FutureProvider শোনার ফলে রিটার্ন আসে একটি AsyncValue - যা ত্রুটি/লোডিং অবস্থাগুলি পরিচালনা করার অনুমতি দেয়।