গন্তব্যগুলির মধ্যে নেভিগেট করার জন্য প্রস্তাবিত উপায় হলো সেফ আর্গস গ্রেডল প্লাগইন ব্যবহার করা। এই প্লাগইনটি অবজেক্ট এবং বিল্ডার ক্লাস তৈরি করে, যা গন্তব্যগুলির মধ্যে টাইপ-সেফ নেভিগেশন সক্ষম করে। গন্তব্যগুলির মধ্যে নেভিগেট করতে এবং ডেটা আদান-প্রদান করতে সেফ আর্গস ব্যবহার করুন।
নিরাপদ আর্গুমেন্ট সক্রিয় করুন
আপনার প্রোজেক্টে সেফ আর্গস (Safe Args) যোগ করতে, আপনার টপ লেভেল build.gradle ফাইলে নিম্নলিখিত classpath অন্তর্ভুক্ত করুন:
গ্রুভি
buildscript { repositories { google() } dependencies { def nav_version = "2.9.8" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
কোটলিন
buildscript { repositories { google() } dependencies { val nav_version = "2.9.8" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
আপনাকে উপলব্ধ দুটি প্লাগইনের মধ্যে একটি অবশ্যই প্রয়োগ করতে হবে।
জাভা অথবা জাভা ও কোটলিনের মিশ্র মডিউলের জন্য উপযুক্ত জাভা ল্যাঙ্গুয়েজ কোড তৈরি করতে, আপনার অ্যাপ বা মডিউলের build.gradle ফাইলে এই লাইনটি যোগ করুন:
গ্রুভি
plugins { id 'androidx.navigation.safeargs' }
কোটলিন
plugins { id("androidx.navigation.safeargs") }
বিকল্পভাবে, শুধুমাত্র কোটলিন মডিউলের জন্য উপযুক্ত কোটলিন কোড তৈরি করতে যোগ করুন:
গ্রুভি
plugins { id 'androidx.navigation.safeargs.kotlin' }
কোটলিন
plugins { id("androidx.navigation.safeargs.kotlin") }
AndroidX-এ মাইগ্রেট করার নির্দেশনা অনুযায়ী, আপনার gradle.properties ফাইলে android.useAndroidX=true অবশ্যই থাকতে হবে।
তৈরি করা কোড
সেফ আর্গস সক্রিয় করার পর, আপনার তৈরি হওয়া কোডে আপনার সংজ্ঞায়িত প্রতিটি অ্যাকশনের জন্য ক্লাস ও মেথড এবং সেইসাথে প্রতিটি প্রেরণ ও গ্রহণ গন্তব্যের সাথে সঙ্গতিপূর্ণ ক্লাসও থাকে।
সেফ আর্গস প্রতিটি গন্তব্যের জন্য একটি ক্লাস তৈরি করে, যেখান থেকে কোনো অ্যাকশন শুরু হয়। তৈরি হওয়া ক্লাসের নামে উৎস গন্তব্যের ক্লাসের নামের সাথে 'Directions' যুক্ত করা হয়। উদাহরণস্বরূপ, যদি উৎস গন্তব্যের নাম SpecifyAmountFragment হয়, তাহলে তৈরি হওয়া ক্লাসের নাম হবে SpecifyAmountFragmentDirections ।
জেনারেট করা ক্লাসটিতে মূল গন্তব্যে সংজ্ঞায়িত প্রতিটি অ্যাকশনের জন্য একটি স্ট্যাটিক মেথড থাকে। এই মেথডটি আর্গুমেন্ট হিসেবে যেকোনো সংজ্ঞায়িত অ্যাকশন প্যারামিটার গ্রহণ করে এবং একটি NavDirections অবজেক্ট রিটার্ন করে, যা আপনি সরাসরি navigate() পাস করতে পারেন।
নিরাপদ আর্গুমেন্টের উদাহরণ
উদাহরণস্বরূপ, এমন একটি নেভিগেশন গ্রাফ বিবেচনা করুন যেখানে একটিমাত্র অ্যাকশন দুটি গন্তব্য, SpecifyAmountFragment এবং ConfirmationFragment সংযুক্ত করে। ConfirmationFragment টি একটিমাত্র float প্যারামিটার গ্রহণ করে, যা আপনি অ্যাকশনটির অংশ হিসেবে প্রদান করেন।
Safe Args একটি SpecifyAmountFragmentDirections ক্লাস তৈরি করে, যাতে actionSpecifyAmountFragmentToConfirmationFragment() নামে একটিমাত্র মেথড এবং ActionSpecifyAmountFragmentToConfirmationFragment নামে একটি ইনার ক্লাস থাকে। ইনার ক্লাসটি NavDirections থেকে ডিরাইভ করা হয় এবং এটি সংশ্লিষ্ট অ্যাকশন আইডি ও float প্যারামিটার সংরক্ষণ করে। এরপর রিটার্ন করা NavDirections অবজেক্টটি সরাসরি navigate() ফাংশনে পাস করা যায়, যেমনটি নিচের উদাহরণে দেখানো হয়েছে:
কোটলিন
override fun onClick(v: View) {
val amount: Float = ...
val action =
SpecifyAmountFragmentDirections
.actionSpecifyAmountFragmentToConfirmationFragment(amount)
v.findNavController().navigate(action)
}
জাভা
@Override
public void onClick(View view) {
float amount = ...;
action =
SpecifyAmountFragmentDirections
.actionSpecifyAmountFragmentToConfirmationFragment(amount);
Navigation.findNavController(view).navigate(action);
}
সেফ আর্গস ব্যবহার করে ডেস্টিনেশনগুলোর মধ্যে ডেটা আদান-প্রদান সম্পর্কে আরও তথ্যের জন্য, “Use Safe Args to pass data with type safety” দেখুন।
সেফ আর্গস ব্যবহার করে টাইপ সেফটি নিশ্চিত করুন।
Safe Args Gradle প্লাগইন ব্যবহার করে গন্তব্যস্থলগুলোর মধ্যে চলাচল করুন। এই প্লাগইনটি সহজ অবজেক্ট এবং বিল্ডার ক্লাস তৈরি করে, যা গন্তব্যস্থলগুলোর মধ্যে টাইপ-সেফ নেভিগেশন এবং আর্গুমেন্ট পাসিং সক্ষম করে।
আপনার প্রোজেক্টে সেফ আর্গস (Safe Args) যোগ করতে, আপনার টপ লেভেল build.gradle ফাইলে নিম্নলিখিত classpath অন্তর্ভুক্ত করুন:
গ্রুভি
buildscript { repositories { google() } dependencies { def nav_version = "2.9.8" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
কোটলিন
buildscript { repositories { google() } dependencies { val nav_version = "2.9.8" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
আপনাকে উপলব্ধ দুটি প্লাগইনের মধ্যে একটি অবশ্যই প্রয়োগ করতে হবে।
জাভা অথবা জাভা ও কোটলিনের মিশ্র মডিউলের জন্য উপযুক্ত জাভা ল্যাঙ্গুয়েজ কোড তৈরি করতে, আপনার অ্যাপ বা মডিউলের build.gradle ফাইলে এই লাইনটি যোগ করুন:
গ্রুভি
plugins { id 'androidx.navigation.safeargs' }
কোটলিন
plugins { id("androidx.navigation.safeargs") }
বিকল্পভাবে, শুধুমাত্র কোটলিন মডিউলের জন্য উপযুক্ত কোটলিন কোড তৈরি করতে যোগ করুন:
গ্রুভি
plugins { id 'androidx.navigation.safeargs.kotlin' }
কোটলিন
plugins { id("androidx.navigation.safeargs.kotlin") }
AndroidX-এ মাইগ্রেট করার নির্দেশনা অনুযায়ী, আপনার gradle.properties ফাইলে android.useAndroidX=true অবশ্যই থাকতে হবে।
আপনি সেফ আর্গস (Safe Args) সক্রিয় করার পরে, প্লাগইনটি এমন কোড তৈরি করে যাতে আপনার সংজ্ঞায়িত প্রতিটি অ্যাকশনের জন্য ক্লাস এবং মেথড থাকে। প্রতিটি অ্যাকশনের জন্য, সেফ আর্গস প্রতিটি অরিজিনেটিং ডেস্টিনেশন (originating destination) -এর জন্যও একটি ক্লাস তৈরি করে, যা হলো সেই গন্তব্য যেখান থেকে অ্যাকশনটি শুরু হয়। তৈরি হওয়া ক্লাসের নামটি অরিজিনেটিং ডেস্টিনেশন ক্লাসের নাম এবং "Directions" শব্দটির সমন্বয়ে গঠিত হয়। উদাহরণস্বরূপ, যদি ডেস্টিনেশনটির নাম SpecifyAmountFragment হয়, তাহলে তৈরি হওয়া ক্লাসটির নাম হবে SpecifyAmountFragmentDirections । তৈরি হওয়া ক্লাসটিতে অরিজিনেটিং ডেস্টিনেশনে সংজ্ঞায়িত প্রতিটি অ্যাকশনের জন্য একটি স্ট্যাটিক মেথড থাকে। এই মেথডটি আর্গুমেন্ট হিসেবে যেকোনো সংজ্ঞায়িত অ্যাকশন প্যারামিটার গ্রহণ করে এবং একটি NavDirections অবজেক্ট রিটার্ন করে, যা আপনি navigate() পাস করতে পারেন।
উদাহরণস্বরূপ, ধরে নিন আমাদের একটি নেভিগেশন গ্রাফ আছে যেখানে একটিমাত্র অ্যাকশন রয়েছে যা উৎস গন্তব্য, SpecifyAmountFragment কে গ্রহণকারী গন্তব্য, ConfirmationFragment সাথে সংযুক্ত করে।
Safe Args একটি SpecifyAmountFragmentDirections ক্লাস তৈরি করে, যাতে actionSpecifyAmountFragmentToConfirmationFragment() নামে একটিমাত্র মেথড থাকে, যা একটি NavDirections অবজেক্ট রিটার্ন করে। এই রিটার্ন করা NavDirections অবজেক্টটি সরাসরি navigate() পাস করা যায়, যেমনটি নিচের উদাহরণে দেখানো হয়েছে:
কোটলিন
override fun onClick(view: View) { val action = SpecifyAmountFragmentDirections .actionSpecifyAmountFragmentToConfirmationFragment() view.findNavController().navigate(action) }
জাভা
@Override public void onClick(View view) { NavDirections action = SpecifyAmountFragmentDirections .actionSpecifyAmountFragmentToConfirmationFragment(); Navigation.findNavController(view).navigate(action); }
সেফ আর্গস ব্যবহার করে ডেস্টিনেশনগুলোর মধ্যে ডেটা আদান-প্রদান সম্পর্কে আরও তথ্যের জন্য, "ডেস্টিনেশনগুলোর মধ্যে ডেটা আদান-প্রদান" অংশের "টাইপ সেফটি সহ ডেটা পাস করতে সেফ আর্গস ব্যবহার করুন" দেখুন।