নেভিগেশন অবস্থা সংরক্ষণ এবং পরিচালনা করুন

নিম্নলিখিত বিভাগগুলিতে আপনার ব্যাক স্ট্যাক সংরক্ষণ এবং আপনার ব্যাক স্ট্যাকের এন্ট্রিগুলির সাথে সম্পর্কিত অবস্থা সংরক্ষণের কৌশলগুলি বর্ণনা করা হয়েছে।

তোমার ব্যাক স্ট্যাক সংরক্ষণ করো

আপনার অ্যাপের নেভিগেশন অবস্থা নিশ্চিত করা যাতে কনফিগারেশন পরিবর্তন এবং প্রক্রিয়া মৃত্যু সহ বিভিন্ন জীবনচক্র ইভেন্টে স্থায়ী হয়, তা নিশ্চিত করা একটি ভালো ব্যবহারকারীর অভিজ্ঞতার জন্য অত্যন্ত গুরুত্বপূর্ণ। নেভিগেশন 3-এ, আপনি আপনার ব্যাক স্ট্যাকের মালিক, তাই এটি কীভাবে তৈরি বা সংরক্ষণ করবেন সে সম্পর্কে কোনও কঠোর নির্দেশিকা নেই। তবে, নেভিগেশন 3 একটি সুবিধাজনক পদ্ধতি অফার করে যা আপনাকে একটি সংরক্ষণযোগ্য ব্যাক স্ট্যাক প্রদান করে: rememberNavBackStack

rememberNavBackStack ব্যবহার করুন

rememberNavBackStack কম্পোজেবল ফাংশনটি এমন একটি ব্যাক স্ট্যাক তৈরি করার জন্য ডিজাইন করা হয়েছে যা কনফিগারেশন পরিবর্তন এবং প্রক্রিয়া মৃত্যু পর্যন্ত টিকে থাকে।

rememberNavBackStack সঠিকভাবে কাজ করার জন্য, আপনার ব্যাক স্ট্যাকের প্রতিটি কী নির্দিষ্ট প্রয়োজনীয়তা মেনে চলতে হবে:

  • NavKey ইন্টারফেস বাস্তবায়ন করুন : ব্যাক স্ট্যাকের প্রতিটি কী অবশ্যই NavKey ইন্টারফেস বাস্তবায়ন করবে। এটি একটি মার্কার ইন্টারফেস হিসেবে কাজ করে যা লাইব্রেরিতে সংকেত দেয় যে কীটি সংরক্ষণ করা যেতে পারে।
  • @Serializable টীকাটি রাখুন : NavKey বাস্তবায়নের পাশাপাশি, আপনার কী ক্লাস এবং অবজেক্টগুলিকে @Serializable টীকা দিয়ে চিহ্নিত করতে হবে।

নিম্নলিখিত স্নিপেটটি rememberNavBackStack এর সঠিক বাস্তবায়ন দেখায়:

@Serializable
data object Home : NavKey

@Composable
fun NavBackStack() {
    val backStack = rememberNavBackStack(Home)
}

বিকল্প: একটি ViewModel সংরক্ষণ করা

আপনার ব্যাক স্ট্যাক পরিচালনা করার আরেকটি পদ্ধতি হল এটি একটি ViewModel এ সংরক্ষণ করা। ViewModel বা অন্য কোনও কাস্টম স্টোরেজ ব্যবহার করার সময় প্রক্রিয়া মৃত্যুর মধ্য দিয়ে স্থায়ী হওয়ার জন্য, আপনার প্রয়োজন:

  • নিশ্চিত করুন যে আপনার কীগুলি সিরিয়ালাইজেবল : ঠিক rememberNavBackStack এর মতো, আপনার নেভিগেশন কীগুলি সিরিয়ালাইজেবল হতে হবে।
  • সিরিয়ালাইজেশন এবং ডিসিরিয়ালাইজেশন ম্যানুয়ালি পরিচালনা করুন : আপনার অ্যাপটি যখন ব্যাকগ্রাউন্ডে যাচ্ছে বা পুনরুদ্ধার করা হচ্ছে তখন প্রতিটি কী-এর সিরিয়ালাইজড উপস্থাপনা ম্যানুয়ালি সংরক্ষণ করার এবং স্থায়ী স্টোরেজ (যেমন, SharedPreferences , একটি ডাটাবেস, বা একটি ফাইল) থেকে এটি ডিসিরিয়ালাইজ করার জন্য আপনি দায়ী।

ViewModel s কে NavEntry s এ স্কোপ করা হচ্ছে

স্ক্রিন রোটেশনের মতো কনফিগারেশন পরিবর্তনের সময় UI-সম্পর্কিত অবস্থা ধরে রাখতে ViewModels ব্যবহার করা হয়। ডিফল্টরূপে, ViewModels নিকটতম ViewModelStoreOwner -এ স্কোপ করা হয়, যা সাধারণত আপনার Activity বা Fragment

তবে, আপনি পুরো Activity পরিবর্তে ব্যাক স্ট্যাকের একটি নির্দিষ্ট NavEntry (অর্থাৎ, একটি নির্দিষ্ট স্ক্রিন বা গন্তব্য) ViewModel কে স্কোপ করতে চাইতে পারেন। এটি নিশ্চিত করে যে ViewModel এর অবস্থা কেবলমাত্র সেই নির্দিষ্ট NavEntry ব্যাক স্ট্যাকের অংশ থাকাকালীন ধরে রাখা হয় এবং NavEntry পপ করা হলে সাফ করা হয়।

androidx.lifecycle:lifecycle-viewmodel-navigation3 অ্যাড-অন লাইব্রেরি একটি NavEntryDecorator প্রদান করে যা এটি সহজতর করে। এই ডেকোরেটর প্রতিটি NavEntry এর জন্য একটি ViewModelStoreOwner প্রদান করে। যখন আপনি NavEntry এর কন্টেন্টের ভিতরে একটি ViewModel তৈরি করেন (যেমন, Compose এ viewModel() ব্যবহার করে), তখন এটি স্বয়ংক্রিয়ভাবে ব্যাক স্ট্যাকের সেই নির্দিষ্ট NavEntry এর কীতে স্কোপ হয়ে যায়। এর অর্থ হল ViewModel তৈরি হয় যখন NavEntry ব্যাক স্ট্যাকে যোগ করা হয় এবং এটি সরানো হলে সাফ হয়ে যায়।

ViewModel থেকে NavEntry তে স্কোপ করার জন্য NavEntryDecorator ব্যবহার করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. আপনার app/build.gradle.kts ফাইলে androidx.lifecycle:lifecycle-viewmodel-navigation3 নির্ভরতা যোগ করুন।
  2. NavDisplay তৈরি করার সময় entryDecorators এর তালিকায় rememberSaveableStateHolderNavEntryDecorator() যোগ করুন।
  3. আপনার NavDisplay তে অন্যান্য ডেকোরেটর যোগ করুন।

NavDisplay(
    entryDecorators = listOf(
        // Add the default decorators for managing scenes and saving state
        rememberSceneSetupNavEntryDecorator(),
        rememberSavedStateNavEntryDecorator(),
        // Then add the view model store decorator
        rememberViewModelStoreNavEntryDecorator()
    ),
    backStack = backStack,
    entryProvider = entryProvider { },
)