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

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

আপনার পিছনে স্ট্যাক সংরক্ষণ করুন

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

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

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

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

  • 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

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

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

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

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

  1. আপনার app/build.gradle.kts ফাইলে androidx.lifecycle:lifecycle-viewmodel-navigation3 নির্ভরতা যোগ করুন।
  2. একটি NavDisplay নির্মাণ করার সময় entryDecorators তালিকায় rememberSavedStateNavEntryDecorator() যোগ করুন।
  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 { },
)