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