mirror of
https://github.com/anyproto/anytype-kotlin.git
synced 2025-06-07 21:37:02 +09:00
DROID-2274 Sample | Compose modals (#994)
This commit is contained in:
parent
8c6dce6f8f
commit
88b5cd197f
4 changed files with 178 additions and 2 deletions
|
@ -66,9 +66,11 @@ dependencies {
|
|||
implementation libs.design
|
||||
implementation libs.pickT
|
||||
|
||||
implementation libs.navigationCompose
|
||||
|
||||
implementation libs.compose
|
||||
implementation libs.composeFoundation
|
||||
implementation libs.composeMaterial
|
||||
implementation libs.composeMaterial3
|
||||
implementation libs.composeToolingPreview
|
||||
implementation libs.composeAccompanistPager
|
||||
implementation libs.composeAccompanistThemeAdapter
|
||||
|
@ -86,5 +88,7 @@ dependencies {
|
|||
testImplementation libs.androidXTestCore
|
||||
testImplementation libs.mockitoKotlin
|
||||
|
||||
implementation "com.google.accompanist:accompanist-navigation-material:0.34.0"
|
||||
|
||||
implementation platform('com.google.firebase:firebase-bom:32.1.1')
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
android:usesCleartextTraffic="true"
|
||||
tools:ignore="GoogleAppIndexingWarning">
|
||||
<activity
|
||||
android:name=".design_system.DesignSystemActivity"
|
||||
android:name=".ComposeModalsActivity"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
|
|
@ -0,0 +1,170 @@
|
|||
package com.anytypeio.anytype.sample
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.ModalBottomSheet
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.rememberModalBottomSheetState
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.navigation.compose.NavHost
|
||||
import androidx.navigation.compose.composable
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi
|
||||
import com.google.accompanist.navigation.material.ModalBottomSheetLayout
|
||||
import com.google.accompanist.navigation.material.bottomSheet
|
||||
import com.google.accompanist.navigation.material.rememberBottomSheetNavigator
|
||||
|
||||
class ComposeModalsActivity: ComponentActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
enableEdgeToEdge()
|
||||
setContent {
|
||||
androidx.compose.material3.MaterialTheme {
|
||||
FirstScreen()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterialNavigationApi::class)
|
||||
@Composable
|
||||
fun FirstScreen() {
|
||||
val bottomSheetNavigator = rememberBottomSheetNavigator()
|
||||
val navController = rememberNavController(bottomSheetNavigator)
|
||||
ModalBottomSheetLayout(bottomSheetNavigator = bottomSheetNavigator) {
|
||||
NavHost(navController = navController, startDestination = "first") {
|
||||
composable(route = "first") {
|
||||
MainModal {
|
||||
navController.navigate("second")
|
||||
}
|
||||
}
|
||||
bottomSheet(route = "second") {
|
||||
SecondModal(
|
||||
secondClicked = { navController.navigate("third") },
|
||||
onDismiss = { navController.popBackStack() }
|
||||
)
|
||||
}
|
||||
bottomSheet(route = "third") {
|
||||
ThirdModal(
|
||||
secondClicked = { navController.navigate("four") },
|
||||
onDismiss = { navController.popBackStack("first", false) }
|
||||
)
|
||||
}
|
||||
bottomSheet(route = "four") {
|
||||
FourModal(
|
||||
oneClicked = { navController.popBackStack() },
|
||||
onDismiss = { navController.popBackStack() }
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun MainModal(buttonClicked: () -> Unit) {
|
||||
val sheetState = rememberModalBottomSheetState()
|
||||
ModalBottomSheet(
|
||||
sheetState = rememberModalBottomSheetState(true),
|
||||
onDismissRequest = { /*TODO*/ }) {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.height(900.dp)
|
||||
.background(color = Color.Red)
|
||||
) {
|
||||
|
||||
Button(
|
||||
onClick = { buttonClicked() },
|
||||
modifier = Modifier.align(Alignment.Center),
|
||||
) {
|
||||
Text("Click me")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun SecondModal(secondClicked: () -> Unit, onDismiss: () -> Unit) {
|
||||
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
|
||||
ModalBottomSheet(
|
||||
sheetState = sheetState,
|
||||
onDismissRequest = { onDismiss() }) {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.height(500.dp)
|
||||
.background(color = Color.Green)
|
||||
) {
|
||||
|
||||
Button(
|
||||
onClick = { secondClicked() },
|
||||
modifier = Modifier.align(Alignment.Center),
|
||||
) {
|
||||
Text("I'm from 2")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun ThirdModal(secondClicked: () -> Unit, onDismiss: () -> Unit) {
|
||||
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
|
||||
ModalBottomSheet(
|
||||
sheetState = sheetState,
|
||||
onDismissRequest = { onDismiss() }) {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.height(500.dp)
|
||||
.background(color = Color.Blue)
|
||||
) {
|
||||
|
||||
Button(
|
||||
onClick = { secondClicked() },
|
||||
modifier = Modifier.align(Alignment.Center),
|
||||
) {
|
||||
Text("I'm from 3")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun FourModal(oneClicked: () -> Unit, onDismiss: () -> Unit) {
|
||||
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
|
||||
ModalBottomSheet(
|
||||
sheetState = sheetState,
|
||||
onDismissRequest = { onDismiss() }) {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.height(500.dp)
|
||||
.background(color = Color.Yellow)
|
||||
) {
|
||||
|
||||
Button(
|
||||
onClick = { oneClicked() },
|
||||
modifier = Modifier.align(Alignment.Center),
|
||||
) {
|
||||
Text("I'm from 4")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -14,6 +14,7 @@ import androidx.compose.foundation.rememberScrollState
|
|||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.ExperimentalMaterialApi
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Alignment
|
||||
|
@ -34,6 +35,7 @@ import kotlinx.coroutines.FlowPreview
|
|||
|
||||
class ComposeDialogFragment : BaseComposeFragment() {
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@FlowPreview
|
||||
@ExperimentalPagerApi
|
||||
@ExperimentalMaterialApi
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue