feat: 使崩溃页面的 FAB 具有动画效果

This commit is contained in:
Super12138 2025-01-15 08:26:17 +08:00
parent c86e6b835b
commit eeeb26008b

View file

@ -13,7 +13,6 @@ import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.outlined.ExitToApp
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExtendedFloatingActionButton
import androidx.compose.material3.Icon
import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme
@ -21,6 +20,9 @@ import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.res.stringResource
@ -28,6 +30,7 @@ import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import cn.super12138.todo.R
import cn.super12138.todo.ui.components.AnimatedExtendedFloatingActionButton
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@ -37,6 +40,13 @@ fun CrashPage(
modifier: Modifier = Modifier
) {
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
val scrollState = rememberScrollState()
val isExpanded by remember {
derivedStateOf {
scrollState.value == 0
}
}
Scaffold(
modifier = modifier
.fillMaxSize()
@ -54,7 +64,7 @@ fun CrashPage(
)
},
floatingActionButton = {
ExtendedFloatingActionButton(
AnimatedExtendedFloatingActionButton(
onClick = exitApp,
icon = {
Icon(
@ -67,6 +77,7 @@ fun CrashPage(
text = stringResource(R.string.action_exit_app)
)
},
expanded = isExpanded
)
},
contentWindowInsets = WindowInsets.safeContent
@ -76,7 +87,7 @@ fun CrashPage(
.padding(innerPadding)
.padding(horizontal = 16.dp)
.fillMaxSize()
.verticalScroll(rememberScrollState())
.verticalScroll(scrollState)
) {
Spacer(Modifier.height(5.dp))
SelectionContainer {