নেভিগেশন-কম্পোজ নির্ভরতার সাথে ভাগ করা উপাদানগুলি ব্যবহার করতে, আপনি পূর্বে দেখানো একই ধারণাগুলি ব্যবহার করতে পারেন: Modifier.sharedElement()
ব্যবহার করুন যা একটি AnimatedVisibilityScope
প্যারামিটার হিসাবে নেয়৷ কি দৃশ্যমান হবে এবং কখন হবে তা নির্ধারণ করতে আপনি এটি ব্যবহার করতে পারেন।
ভাগ করা উপাদানগুলির সাথে navigation-compose
ব্যবহারের একটি উদাহরণ নিম্নলিখিত:
@Preview @Composable fun SharedElement_PredictiveBack() { SharedTransitionLayout { val navController = rememberNavController() NavHost( navController = navController, startDestination = "home" ) { composable("home") { HomeScreen( navController, this@SharedTransitionLayout, this@composable ) } composable( "details/{item}", arguments = listOf(navArgument("item") { type = NavType.IntType }) ) { backStackEntry -> val id = backStackEntry.arguments?.getInt("item") val snack = listSnacks[id!!] DetailsScreen( navController, id, snack, this@SharedTransitionLayout, this@composable ) } } } } @Composable private fun DetailsScreen( navController: NavHostController, id: Int, snack: Snack, sharedTransitionScope: SharedTransitionScope, animatedContentScope: AnimatedContentScope ) { with(sharedTransitionScope) { Column( Modifier .fillMaxSize() .clickable { navController.navigate("home") } ) { Image( painterResource(id = snack.image), contentDescription = snack.description, contentScale = ContentScale.Crop, modifier = Modifier .sharedElement( sharedTransitionScope.rememberSharedContentState(key = "image-$id"), animatedVisibilityScope = animatedContentScope ) .aspectRatio(1f) .fillMaxWidth() ) Text( snack.name, fontSize = 18.sp, modifier = Modifier .sharedElement( sharedTransitionScope.rememberSharedContentState(key = "text-$id"), animatedVisibilityScope = animatedContentScope ) .fillMaxWidth() ) } } } @Composable private fun HomeScreen( navController: NavHostController, sharedTransitionScope: SharedTransitionScope, animatedContentScope: AnimatedContentScope ) { LazyColumn( modifier = Modifier .fillMaxSize() .padding(8.dp), verticalArrangement = Arrangement.spacedBy(8.dp) ) { itemsIndexed(listSnacks) { index, item -> Row( Modifier.clickable { navController.navigate("details/$index") } ) { Spacer(modifier = Modifier.width(8.dp)) with(sharedTransitionScope) { Image( painterResource(id = item.image), contentDescription = item.description, contentScale = ContentScale.Crop, modifier = Modifier .sharedElement( sharedTransitionScope.rememberSharedContentState(key = "image-$index"), animatedVisibilityScope = animatedContentScope ) .size(100.dp) ) Spacer(modifier = Modifier.width(8.dp)) Text( item.name, fontSize = 18.sp, modifier = Modifier .align(Alignment.CenterVertically) .sharedElement( sharedTransitionScope.rememberSharedContentState(key = "text-$index"), animatedVisibilityScope = animatedContentScope, ) ) } } } } } data class Snack( val name: String, val description: String, @DrawableRes val image: Int )
ভাগ করা উপাদান সহ ভবিষ্যদ্বাণীপূর্ণ ফিরে
আপনি যদি ভাগ করা উপাদানগুলির সাথে ভবিষ্যদ্বাণীমূলক ব্যাক ব্যবহার করতে চান তবে নিশ্চিত করুন যে আপনি সর্বশেষ navigation-compose
নির্ভরতা ব্যবহার করছেন, পূর্ববর্তী বিভাগ থেকে স্নিপেট ব্যবহার করে৷
dependencies {
def nav_version = "2.8.0-beta02"
implementation "androidx.navigation:navigation-compose:$nav_version"
}
ভবিষ্যদ্বাণীমূলক ব্যাক সক্ষম করতে আপনার AndroidManifest.xml
ফাইলে android:enableOnBackInvokedCallback="true"
যোগ করুন:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="28" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:enableOnBackInvokedCallback="true"
android:theme="@style/Theme.Snippets">