feat: 支持动态显示已完成待办
只是完成功能,后续会根据用户自定设置来动态显示
This commit is contained in:
parent
0f27eab03b
commit
96fe734ccd
3 changed files with 12 additions and 19 deletions
|
|
@ -1,9 +1,7 @@
|
||||||
package cn.super12138.todo.ui.pages.main
|
package cn.super12138.todo.ui.pages.main
|
||||||
|
|
||||||
import androidx.activity.compose.BackHandler
|
import androidx.activity.compose.BackHandler
|
||||||
import androidx.compose.animation.AnimatedContent
|
|
||||||
import androidx.compose.animation.AnimatedVisibility
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
import androidx.compose.animation.animateColorAsState
|
|
||||||
import androidx.compose.animation.expandIn
|
import androidx.compose.animation.expandIn
|
||||||
import androidx.compose.animation.fadeIn
|
import androidx.compose.animation.fadeIn
|
||||||
import androidx.compose.animation.fadeOut
|
import androidx.compose.animation.fadeOut
|
||||||
|
|
@ -13,19 +11,8 @@ import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||||
import androidx.compose.material.icons.Icons
|
|
||||||
import androidx.compose.material.icons.outlined.Close
|
|
||||||
import androidx.compose.material.icons.outlined.Delete
|
|
||||||
import androidx.compose.material.icons.outlined.SelectAll
|
|
||||||
import androidx.compose.material.icons.outlined.Settings
|
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
import androidx.compose.material3.Icon
|
|
||||||
import androidx.compose.material3.IconButton
|
|
||||||
import androidx.compose.material3.MaterialTheme
|
|
||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
import androidx.compose.material3.Text
|
|
||||||
import androidx.compose.material3.TopAppBar
|
|
||||||
import androidx.compose.material3.TopAppBarDefaults
|
|
||||||
import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
|
import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
|
||||||
import androidx.compose.material3.rememberModalBottomSheetState
|
import androidx.compose.material3.rememberModalBottomSheetState
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
|
@ -38,9 +25,7 @@ import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.runtime.saveable.rememberSaveable
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.res.stringResource
|
|
||||||
import androidx.window.core.layout.WindowWidthSizeClass
|
import androidx.window.core.layout.WindowWidthSizeClass
|
||||||
import cn.super12138.todo.R
|
|
||||||
import cn.super12138.todo.logic.database.TodoEntity
|
import cn.super12138.todo.logic.database.TodoEntity
|
||||||
import cn.super12138.todo.ui.pages.main.components.TodoFAB
|
import cn.super12138.todo.ui.pages.main.components.TodoFAB
|
||||||
import cn.super12138.todo.ui.pages.main.components.TodoTopAppBar
|
import cn.super12138.todo.ui.pages.main.components.TodoTopAppBar
|
||||||
|
|
@ -72,6 +57,10 @@ fun MainPage(viewModel: MainViewModel, modifier: Modifier = Modifier) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val showCompleted = true // 后续替换成用户设置
|
||||||
|
val filteredTodoList =
|
||||||
|
if (showCompleted) toDoList.value else toDoList.value.filter { item -> !item.isCompleted }
|
||||||
|
|
||||||
BackHandler(enabled = !isSelectedIdsEmpty) {
|
BackHandler(enabled = !isSelectedIdsEmpty) {
|
||||||
// 当按下返回键(或进行返回操作)时清空选择
|
// 当按下返回键(或进行返回操作)时清空选择
|
||||||
viewModel.clearAllTodoSelection()
|
viewModel.clearAllTodoSelection()
|
||||||
|
|
@ -114,7 +103,7 @@ fun MainPage(viewModel: MainViewModel, modifier: Modifier = Modifier) {
|
||||||
|
|
||||||
ManagerFragment(
|
ManagerFragment(
|
||||||
state = listState,
|
state = listState,
|
||||||
list = toDoList.value.filter { item -> !item.isCompleted },
|
list = filteredTodoList,
|
||||||
onItemClick = { item ->
|
onItemClick = { item ->
|
||||||
if (isSelectedIdsEmpty) {
|
if (isSelectedIdsEmpty) {
|
||||||
openBottomSheet = true
|
openBottomSheet = true
|
||||||
|
|
@ -154,10 +143,9 @@ fun MainPage(viewModel: MainViewModel, modifier: Modifier = Modifier) {
|
||||||
.weight(2f)
|
.weight(2f)
|
||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
)
|
)
|
||||||
|
|
||||||
ManagerFragment(
|
ManagerFragment(
|
||||||
state = listState,
|
state = listState,
|
||||||
list = toDoList.value.filter { item -> !item.isCompleted },
|
list = filteredTodoList,
|
||||||
onItemClick = { item ->
|
onItemClick = { item ->
|
||||||
if (isSelectedIdsEmpty) {
|
if (isSelectedIdsEmpty) {
|
||||||
openBottomSheet = true
|
openBottomSheet = true
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,7 @@ fun ManagerFragment(
|
||||||
TodoCard(
|
TodoCard(
|
||||||
content = item.content,
|
content = item.content,
|
||||||
subject = Subjects.fromId(item.subject).getDisplayName(context),
|
subject = Subjects.fromId(item.subject).getDisplayName(context),
|
||||||
|
completed = item.isCompleted,
|
||||||
onCardClick = { onItemClick(item) },
|
onCardClick = { onItemClick(item) },
|
||||||
onCardLongClick = { onItemLongClick(item) },
|
onCardLongClick = { onItemLongClick(item) },
|
||||||
onChecked = { onItemChecked(item) },
|
onChecked = { onItemChecked(item) },
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.draw.clip
|
import androidx.compose.ui.draw.clip
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
|
import androidx.compose.ui.text.style.TextDecoration
|
||||||
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
|
||||||
|
|
@ -35,6 +36,7 @@ import cn.super12138.todo.R
|
||||||
fun TodoCard(
|
fun TodoCard(
|
||||||
content: String,
|
content: String,
|
||||||
subject: String,
|
subject: String,
|
||||||
|
completed: Boolean,
|
||||||
onCardClick: () -> Unit = {},
|
onCardClick: () -> Unit = {},
|
||||||
onCardLongClick: () -> Unit = {},
|
onCardLongClick: () -> Unit = {},
|
||||||
onChecked: () -> Unit = {},
|
onChecked: () -> Unit = {},
|
||||||
|
|
@ -82,16 +84,18 @@ fun TodoCard(
|
||||||
style = MaterialTheme.typography.titleLarge,
|
style = MaterialTheme.typography.titleLarge,
|
||||||
maxLines = 1,
|
maxLines = 1,
|
||||||
overflow = TextOverflow.Ellipsis,
|
overflow = TextOverflow.Ellipsis,
|
||||||
|
textDecoration = if (completed) TextDecoration.LineThrough else TextDecoration.None,
|
||||||
modifier = Modifier.basicMarquee() // TODO: 后续评估性能影响
|
modifier = Modifier.basicMarquee() // TODO: 后续评估性能影响
|
||||||
)
|
)
|
||||||
Text(
|
Text(
|
||||||
text = subject,
|
text = subject,
|
||||||
style = MaterialTheme.typography.labelMedium,
|
style = MaterialTheme.typography.labelMedium,
|
||||||
|
textDecoration = if (completed) TextDecoration.LineThrough else TextDecoration.None,
|
||||||
maxLines = 1
|
maxLines = 1
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
AnimatedVisibility(!selected) {
|
AnimatedVisibility(!selected && !completed) {
|
||||||
IconButton(onClick = onChecked) {
|
IconButton(onClick = onChecked) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Outlined.Check,
|
imageVector = Icons.Outlined.Check,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue