ডায়ালগ গন্তব্য

অ্যান্ড্রয়েড নেভিগেশনে, ডায়ালগ গন্তব্য শব্দটি অ্যাপের নেভিগেশন গ্রাফের মধ্যে থাকা গন্তব্যগুলিকে বোঝায় যা ডায়ালগ উইন্ডোর রূপ নেয়, অ্যাপের UI উপাদান এবং বিষয়বস্তুকে ওভারলে করে।

যেহেতু ডায়ালগ গন্তব্যগুলি হোস্ট করা গন্তব্যগুলির উপর উপস্থিত হয় যা নেভিগেশন হোস্টকে পূরণ করে, তাই ডায়ালগ গন্তব্যগুলি কীভাবে আপনার NavController এর ব্যাক স্ট্যাকের সাথে ইন্টারঅ্যাক্ট করে সে সম্পর্কে কিছু গুরুত্বপূর্ণ বিবেচনা রয়েছে৷

সংলাপ রচনাযোগ্য

রচনায় একটি ডায়ালগ গন্তব্য তৈরি করতে, dialog() ফাংশন ব্যবহার করে আপনার NavHost এ একটি গন্তব্য যোগ করুন। ফাংশনটি মূলত composable মতোই আচরণ করে, শুধুমাত্র এটি হোস্ট করা গন্তব্যের পরিবর্তে একটি ডায়ালগ গন্তব্য তৈরি করে।

নিম্নলিখিত উদাহরণ বিবেচনা করুন:

@Serializable
object Home
@Serializable
object Settings
@Composable
fun HomeScreen(onNavigateToSettings: () -> Unit){
    Column {
        Text("Home")
        Button(onClick = onNavigateToSettings){
            Text("Open settings")
        }
    }
}

// This screen will be displayed as a dialog
@Composable
fun SettingsScreen(){
    Text("Settings")
    // ...
}

@Composable
fun MyApp() {
    val navController = rememberNavController()
    NavHost(navController, startDestination = Home) {
        composable<Home> { HomeScreen(onNavigateToSettings = { navController.navigate(route = Settings) }) }
        dialog<Settings> { SettingsScreen() }
    }
}
  1. শুরুর গন্তব্য Home রুট ব্যবহার করে। কারণ composable() এটি গ্রাফে যোগ করে, এটি একটি হোস্ট করা গন্তব্য।
  2. অন্য গন্তব্য Settings রুট ব্যবহার করে।
    • একইভাবে, যেহেতু dialog() এটিকে গ্রাফে যুক্ত করে, এটি একটি ডায়ালগ গন্তব্য।
    • ব্যবহারকারী যখন HomeScreen থেকে SettingsScreen নেভিগেট করে তখন পরবর্তীটি HomeScreen প্রদর্শিত হয়।
  3. যদিও SettingsScreen নিজেই একটি Dialog কম্পোজযোগ্য অন্তর্ভুক্ত করে না, কারণ এটি একটি ডায়ালগ গন্তব্য, NavHost এটি একটি Dialog মধ্যে প্রদর্শন করে।

NavHost এ পূর্ববর্তী গন্তব্যের উপর ডায়ালগ গন্তব্যগুলি উপস্থিত হয়। সেগুলি ব্যবহার করুন যখন ডায়ালগটি আপনার অ্যাপে একটি পৃথক স্ক্রীন উপস্থাপন করে যার নিজস্ব জীবনচক্র এবং সংরক্ষিত অবস্থার প্রয়োজন, আপনার নেভিগেশন গ্রাফের অন্য কোনো গন্তব্য থেকে স্বতন্ত্র। আপনি যদি কম জটিল প্রম্পটের জন্য একটি ডায়ালগ চান, যেমন একটি নিশ্চিতকরণ চান তাহলে আপনি একটি AlertDialog বা সম্পর্কিত কম্পোজেবল ব্যবহার করতে পছন্দ করতে পারেন।

কোটলিন ডিএসএল

আপনি যদি টুকরো টুকরো নিয়ে কাজ করেন এবং আপনি আপনার গ্রাফ তৈরি করতে Kotlin DSL ব্যবহার করছেন, তাহলে একটি ডায়ালগ গন্তব্য যোগ করা কম্পোজ ব্যবহার করার মতোই।

নিম্নলিখিত স্নিপেটে কীভাবে একটি খণ্ড ব্যবহার করে এমন একটি ডায়ালগ গন্তব্য যোগ করতে dialog() ফাংশন ব্যবহার করে তা বিবেচনা করুন:

// Define destinations with serializable classes or objects
@Serializable
object Home
@Serializable
object Settings

// Add the graph to the NavController with `createGraph()`.
navController.graph = navController.createGraph(
    startDestination = Home
) {
    // Associate the home route with the HomeFragment.
    fragment<HomeFragment, Home> {
        label = "Home"
    }

    // Define the settings destination as a dialog using DialogFragment.
    dialog<SettingsFragment, Settings> {
        label = "Settings"
    }
}

এক্সএমএল

আপনার যদি একটি বিদ্যমান DialogFragment থাকে, তাহলে আপনার নেভিগেশন গ্রাফে ডায়ালগ যোগ করতে <dialog> উপাদানটি ব্যবহার করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/nav_graph">

...

<dialog
    android:id="@+id/my_dialog_fragment"
    android:name="androidx.navigation.myapp.MyDialogFragment">
    <argument android:name="myarg" android:defaultValue="@null" />
        <action
            android:id="@+id/myaction"
            app:destination="@+id/another_destination"/>
</dialog>

...

</navigation>
,

অ্যান্ড্রয়েড নেভিগেশনে, ডায়ালগ গন্তব্য শব্দটি অ্যাপের নেভিগেশন গ্রাফের মধ্যে থাকা গন্তব্যগুলিকে বোঝায় যা ডায়ালগ উইন্ডোর রূপ নেয়, অ্যাপের UI উপাদান এবং বিষয়বস্তুকে ওভারলে করে।

যেহেতু ডায়ালগ গন্তব্যগুলি হোস্ট করা গন্তব্যগুলির উপর উপস্থিত হয় যা নেভিগেশন হোস্টকে পূরণ করে, তাই ডায়ালগ গন্তব্যগুলি কীভাবে আপনার NavController এর ব্যাক স্ট্যাকের সাথে ইন্টারঅ্যাক্ট করে সে সম্পর্কে কিছু গুরুত্বপূর্ণ বিবেচনা রয়েছে৷

সংলাপ রচনাযোগ্য

রচনায় একটি ডায়ালগ গন্তব্য তৈরি করতে, dialog() ফাংশন ব্যবহার করে আপনার NavHost এ একটি গন্তব্য যোগ করুন। ফাংশনটি মূলত composable মতোই আচরণ করে, শুধুমাত্র এটি হোস্ট করা গন্তব্যের পরিবর্তে একটি ডায়ালগ গন্তব্য তৈরি করে।

নিম্নলিখিত উদাহরণ বিবেচনা করুন:

@Serializable
object Home
@Serializable
object Settings
@Composable
fun HomeScreen(onNavigateToSettings: () -> Unit){
    Column {
        Text("Home")
        Button(onClick = onNavigateToSettings){
            Text("Open settings")
        }
    }
}

// This screen will be displayed as a dialog
@Composable
fun SettingsScreen(){
    Text("Settings")
    // ...
}

@Composable
fun MyApp() {
    val navController = rememberNavController()
    NavHost(navController, startDestination = Home) {
        composable<Home> { HomeScreen(onNavigateToSettings = { navController.navigate(route = Settings) }) }
        dialog<Settings> { SettingsScreen() }
    }
}
  1. শুরুর গন্তব্য Home রুট ব্যবহার করে। কারণ composable() এটি গ্রাফে যোগ করে, এটি একটি হোস্ট করা গন্তব্য।
  2. অন্য গন্তব্য Settings রুট ব্যবহার করে।
    • একইভাবে, যেহেতু dialog() এটিকে গ্রাফে যুক্ত করে, এটি একটি ডায়ালগ গন্তব্য।
    • ব্যবহারকারী যখন HomeScreen থেকে SettingsScreen নেভিগেট করে তখন পরবর্তীটি HomeScreen প্রদর্শিত হয়।
  3. যদিও SettingsScreen নিজেই একটি Dialog কম্পোজযোগ্য অন্তর্ভুক্ত করে না, কারণ এটি একটি ডায়ালগ গন্তব্য, NavHost এটি একটি Dialog মধ্যে প্রদর্শন করে।

NavHost এ পূর্ববর্তী গন্তব্যের উপর ডায়ালগ গন্তব্যগুলি উপস্থিত হয়। সেগুলি ব্যবহার করুন যখন ডায়ালগটি আপনার অ্যাপে একটি পৃথক স্ক্রীন উপস্থাপন করে যার নিজস্ব জীবনচক্র এবং সংরক্ষিত অবস্থার প্রয়োজন, আপনার নেভিগেশন গ্রাফের অন্য কোনো গন্তব্য থেকে স্বতন্ত্র। আপনি যদি কম জটিল প্রম্পটের জন্য একটি ডায়ালগ চান, যেমন একটি নিশ্চিতকরণ চান তাহলে আপনি একটি AlertDialog বা সম্পর্কিত কম্পোজেবল ব্যবহার করতে পছন্দ করতে পারেন।

কোটলিন ডিএসএল

আপনি যদি টুকরো টুকরো নিয়ে কাজ করেন এবং আপনি আপনার গ্রাফ তৈরি করতে Kotlin DSL ব্যবহার করছেন, তাহলে একটি ডায়ালগ গন্তব্য যোগ করা কম্পোজ ব্যবহার করার মতোই।

নিম্নলিখিত স্নিপেটে কীভাবে একটি খণ্ড ব্যবহার করে এমন একটি ডায়ালগ গন্তব্য যোগ করতে dialog() ফাংশন ব্যবহার করে তা বিবেচনা করুন:

// Define destinations with serializable classes or objects
@Serializable
object Home
@Serializable
object Settings

// Add the graph to the NavController with `createGraph()`.
navController.graph = navController.createGraph(
    startDestination = Home
) {
    // Associate the home route with the HomeFragment.
    fragment<HomeFragment, Home> {
        label = "Home"
    }

    // Define the settings destination as a dialog using DialogFragment.
    dialog<SettingsFragment, Settings> {
        label = "Settings"
    }
}

এক্সএমএল

আপনার যদি একটি বিদ্যমান DialogFragment থাকে, তাহলে আপনার নেভিগেশন গ্রাফে ডায়ালগ যোগ করতে <dialog> উপাদানটি ব্যবহার করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/nav_graph">

...

<dialog
    android:id="@+id/my_dialog_fragment"
    android:name="androidx.navigation.myapp.MyDialogFragment">
    <argument android:name="myarg" android:defaultValue="@null" />
        <action
            android:id="@+id/myaction"
            app:destination="@+id/another_destination"/>
</dialog>

...

</navigation>