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

^0.14.0 to ^1.0.0

দীর্ঘ প্রতীক্ষার পর অবশেষে রিভারপডের প্রথম স্থিতিশীল সংস্করণ প্রকাশিত হয়েছে 👏

পরিবর্তনের সম্পূর্ণ তালিকা দেখতে, এখানে দেখুন।

এই পৃষ্ঠায়, আমরা কীভাবে একটি বিদ্যমান রিভারপড অ্যাপ্লিকেশনকে 0.14.x সংস্করণ থেকে 1.0.0 সংস্করণে স্থানান্তর করতে হয় তার উপর ফোকাস করব।

স্বয়ংক্রিয়ভাবে নতুন সিনট্যাক্সে আপনার প্রকল্প আপগ্রেড করতে মাইগ্রেশন টুল ব্যবহার করে

বিভিন্ন পরিবর্তনগুলি ব্যাখ্যা করার আগে, এটি লক্ষ করা উচিত যে রিভারপড একটি কমান্ড-লাইন টুল নিয়ে আসে যা আপনার জন্য আপনার প্রজেক্টকে স্বয়ংক্রিয়ভাবে স্থানান্তর করতে পারে।

কমান্ড লাইন টুল ইনস্টল করা

মাইগ্রেশন টুল ইনস্টল করতে, নিচের কমান্ডটা রান করেনঃ

dart pub global activate riverpod_cli

আপনি এখন নিচের কমান্ড চালাতে পারবেনঃ

riverpod --help

ব্যবহার

এখন কমান্ড লাইন ইনস্টল করা হয়েছে, আমরা এটি ব্যবহার শুরু করতে পারি।

  • প্রথমে, আপনি আপনার টার্মিনালে যে প্রজেক্টটি স্থানান্তর করতে চান সেটি খুলুন।

  • রিভারপড আপগ্রেড করবেন না।
    মাইগ্রেশন টুলটি আপনার জন্য রিভারপডের সংস্করণ আপগ্রেড করবে।

    danger

    রিভারপড আপগ্রেড না করা গুরুত্বপূর্ণ। আপনি যদি ইতিমধ্যে সংস্করণ 1.0.0 ইনস্টল করে থাকেন তবে টুলটি সঠিকভাবে কার্যকর হবে না। তাই, টুল শুরু করার আগে আপনি সঠিকভাবে একটি পুরানো সংস্করণ ব্যবহার করছেন তা নিশ্চিত করুন।

  • নিশ্চিত করুন যে আপনার প্রজেক্টটে ত্রুটি নেই।

  • এক্সিকিঊটঃ

    riverpod migrate

টুলটি তারপর আপনার প্রজেক্টটি বিশ্লেষণ করবে এবং পরিবর্তনের পরামর্শ দেবে। উদাহরণস্বরূপ আপনি দেখতে পারেনঃ

-Widget build(BuildContext context, ScopedReader watch) {
+Widget build(BuildContext context, Widget ref) {
- MyModel state = watch(provider);
+ MyModel state = ref.watch(provider);
}

Accept change (y = yes, n = no [default], A = yes to all, q = quit)?

পরিবর্তনটি গ্রহণ করতে, শুধু y টিপুন। অন্যথায় এটি প্রত্যাখ্যান করতে, n টিপুন।

পরিবর্তনগুলি

এখন যেহেতু আমরা দেখেছি কিভাবে আপনার প্রোজেক্ট স্বয়ংক্রিয়ভাবে আপগ্রেড করতে CLI ব্যবহার করতে হয়, আসুন প্রয়োজনীয় পরিবর্তনগুলি বিস্তারিতভাবে দেখি।

Syntax unification

রিভারপডের সংস্করণ 1.0.0 প্রভাইডারদের সাথে ইন্টারঅ্যাক্ট করার জন্য সিনট্যাক্সের একীকরণের উপর দৃষ্টি নিবদ্ধ করে। এর আগে, রিভারপডের অনেকগুলি একই রকম কিন্তু ভিন্ন সিনট্যাক্স ছিল একটি প্রভাইডার পড়ার জন্য, যেমন ref.watch(provider) বনাম useProvider(provider) বনাম watch(provider)। সংস্করণ 1.0.0 এর সাথে, শুধুমাত্র একটি সিনট্যাক্স অবশিষ্ট থাকে: ref.watch(provider)। অন্যদের সরিয়ে দেওয়া হয়েছে।

তাইঃ

  • HookConsumerWidget এর পক্ষে useProvider সরানো হয়েছে।. আগেঃ

    class Example extends HookWidget {

    Widget build(BuildContext context) {
    useState(...);
    int count = useProvider(counterProvider);
    ...
    }
    }

    পরেঃ

    class Example extends HookConsumerWidget {

    Widget build(BuildContext context, WidgetRef ref) {
    useState(...);
    int count = ref.watch(counterProvider);
    ...
    }
    }
  • ConsumerWidget এর build এবং Consumer এর builder এর প্রোটোটাইপ পরিবর্তিত হয়েছে।

    আগেঃ

    class Example extends ConsumerWidget {

    Widget build(BuildContext context, ScopedReader watch) {
    int count = watch(counterProvider);
    ...
    }
    }

    Consumer(
    builder: (context, watch, child) {
    int count = watch(counterProvider);
    ...
    }
    )

    পরেঃ

    class Example extends ConsumerWidget {

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

    Consumer(
    builder: (context, ref, child) {
    int count = ref.watch(counterProvider);
    ...
    }
    )
  • context.read কে ref.read এর পক্ষে সরানো হয়েছে`. আগেঃ

    class Example extends StatelessWidget {

    Widget build(BuildContext context) {
    SomeButton(
    onPressed: () => context.read(provider.notifier).doSomething(),
    );
    }
    }

    পরেঃ

    class Example extends ConsumerWidget {

    Widget build(BuildContext context, WidgetRef ref) {
    SomeButton(
    onPressed: () => ref.read(provider.notifier).doSomething(),
    );
    }
    }

StateProvider আপডেট

StateProviderকে StateNotifierProvider এর সাথে মেলে আপডেট করা হয়েছে।

আগে, ref.watch(StateProvider) করা একটি StateController ইন্সট্যান্স রিটার্ন করত। এখন এটি শুধুমাত্র StateController এর স্ট্যাট রিটার্ন করে।

মাইগ্রেট করার জন্য আপনার কাছে কয়েকটি সমাধান আছে। যদি আপনার কোডটি সংশোধন না করেই কেবলমাত্র স্টেটটি পেয়ে থাকে, তাহলে আপনি এখান থেকে পরিবর্তন করতে পারেনঃ

final provider = StateProvider<int>(...);

Consumer(
builder: (context, ref, child) {
StateController<int> count = ref.watch(provider);

return Text('${count.state}');
}
)

এখানেঃ

final provider = StateProvider<int>(...);

Consumer(
builder: (context, ref, child) {
int count = ref.watch(provider);

return Text('${count}');
}
)

বিকল্পভাবে আপনি পুরানো আচরণ রাখতে নতুন StateProvider.state ব্যবহার করতে পারেন।

final provider = StateProvider<int>(...);

Consumer(
builder: (context, ref, child) {
StateController<int> count = ref.watch(provider.state);

return Text('${count.state}');
}
)