Navigation 3-এ, আপনি NavEntry , Scene , এবং NavDisplay এর মতো বিভিন্ন লাইব্রেরি কম্পোনেন্টের মধ্যে যেকোনো তথ্য আদান-প্রদান করতে মেটাডেটা ব্যবহার করেন। এর সবচেয়ে মৌলিক রূপে, মেটাডেটা হলো একটি Map<String, Any> । তবে, মেটাডেটা পড়া ও লেখাকে আরও সহজ এবং টাইপ-সেফ করার জন্য লাইব্রেরিটি অতিরিক্ত অ্যাবস্ট্রাকশন প্রদান করে ।
NavEntry মেটাডেটা প্রদান করুন
যদি আপনার অ্যাপ সরাসরি তার NavEntry ইনস্ট্যান্স তৈরি করে, তাহলে আপনি metadata কনস্ট্রাক্টর প্যারামিটার ব্যবহার করে এন্ট্রির জন্য মেটাডেটা সরবরাহ করেন:
when (key) { is Home -> NavEntry(key, metadata = mapOf("key" to "value")) {} }
আপনার অ্যাপ যদি entryProvider DSL ব্যবহার করে , তাহলে আপনি entry ফাংশনের metadata প্যারামিটারের মাধ্যমে মেটাডেটা প্রদান করেন। এই ফাংশনটির দুটি ওভারলোড রয়েছে: একটি যা সরাসরি একটি ম্যাপ গ্রহণ করে এবং অন্যটি যা একটি ল্যাম্বডা গ্রহণ করে, যেখানে এন্ট্রির কী-টি আর্গুমেন্ট হিসেবে পাস করা হয়।
entry<Home>(metadata = mapOf("key" to "value")) { /* ... */ } entry<Conversation>(metadata = { key: Conversation -> mapOf("key" to "value: ${key.id})") }) { /* ... */ }
Scene মেটাডেটা প্রদান করুন
ডিফল্টরূপে, Scene.metadata একটি কাস্টম গেটার ব্যবহার করে যা এর entries প্রপার্টিতে থাকা শেষ এন্ট্রির metadata রিটার্ন করে, অথবা সেটি null হলে একটি খালি ম্যাপ রিটার্ন করে। Scene ইন্টারফেস ইমপ্লিমেন্ট করার সময়, আপনি প্রয়োজন অনুযায়ী এই ডিফল্ট আচরণটি ওভাররাইড করতে পারেন।
মেটাডেটা ডিএসএল ব্যবহার করুন
লাইব্রেরির 1.1.0-beta01 সংস্করণে প্রবর্তিত মেটাডেটা ডোমেইন-স্পেসিফিক ল্যাঙ্গুয়েজ (DSL), মেটাডেটা সংরক্ষণের জন্য ব্যবহৃত Map<String, Any> তৈরির একটি টাইপ-সেফ বিল্ডার প্রদান করে।
মেটাডেটা কী সংজ্ঞায়িত করুন
একটি মেটাডেটা কী-এর সাথে যুক্ত ভ্যালুর টাইপ সামঞ্জস্যপূর্ণ রাখতে DSL, NavMetadataKey ইন্টারফেসের উপর নির্ভর করে।
মেটাডেটা কী সংজ্ঞায়িত করার প্রচলিত নিয়ম হলো, সেগুলোকে সেই ক্লাসের নেস্টেড অবজেক্ট হিসেবে অন্তর্ভুক্ত করা—অথবা, ফাংশন বা কম্পোজেবলের ক্ষেত্রে, একটি রিলেটেড অবজেক্ট হিসেবে—যেটি ঐ কীগুলোর সাথে যুক্ত মানগুলো পড়বে।
// For classes such as scene strategies or nav entry decorators, you can define the keys // as nested object. class MySceneStrategy<T : Any> : SceneStrategy<T> { // ... object MyStringMetadataKey : NavMetadataKey<String> } // An example from NavDisplay. // Because NavDisplay is a function, the metadata keys are defined in an object with the same name. public object NavDisplay { public object TransitionKey : NavMetadataKey<AnimatedContentTransitionScope<Scene<*>>.() -> ContentTransform> }
DSL ব্যবহার করে মেটাডেটা তৈরি করুন
একটি মেটাডেটা ম্যাপ তৈরি করতে, ` metadata ফাংশনটি ব্যবহার করুন, যা একটি `lambda` প্যারামিটার গ্রহণ করে। এই `lambda`-র মধ্যে, একটি ` NavMetadataKey এবং তার সংশ্লিষ্ট মান ব্যবহার করে ` put ফাংশনটির মাধ্যমে ম্যাপে এন্ট্রি যোগ করুন।
entry<Home>( metadata = metadata { put(NavDisplay.TransitionKey) { fadeIn() togetherWith fadeOut() } // An additional benefit of the metadata DSL is the ability to use conditional logic if (condition) { put(MySceneStrategy.MyStringMetadataKey, "Hello, world!") } } ) { // ... }
মেটাডেটা কী ব্যবহার করে মেটাডেটা পড়ুন
মেটাডেটা ডিএসএল একটি NavMetadataKey ব্যবহার করে মেটাডেটা পড়া সহজ করার জন্য ফাংশনও প্রদান করে।
// import androidx.navigation3.runtime.contains // import androidx.navigation3.runtime.get val hasMyString: Boolean = metadata.contains(MySceneStrategy.MyStringMetadataKey) val myString: String? = metadata[MySceneStrategy.MyStringMetadataKey]