83 lines
2.6 KiB
Kotlin
83 lines
2.6 KiB
Kotlin
package com.example.tasks_interop
|
|
|
|
import androidx.compose.foundation.background
|
|
import androidx.compose.foundation.layout.*
|
|
import androidx.compose.foundation.lazy.LazyColumn
|
|
import androidx.compose.foundation.lazy.items
|
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
import androidx.compose.material.icons.Icons
|
|
import androidx.compose.material.icons.filled.Add
|
|
import androidx.compose.material.icons.filled.Delete
|
|
import androidx.compose.material3.*
|
|
import androidx.compose.runtime.*
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.draw.clip
|
|
import androidx.compose.ui.graphics.Color
|
|
import androidx.compose.ui.unit.dp
|
|
|
|
@OptIn(ExperimentalMaterial3Api::class)
|
|
@Composable
|
|
fun TasksApp(
|
|
tasks: List<TaskData>,
|
|
onAddTask: (String) -> Unit,
|
|
onToggleTask: (String) -> Unit,
|
|
onDeleteTask: (String) -> Unit
|
|
) {
|
|
var newTaskTitle by remember { mutableStateOf("") }
|
|
|
|
Column(
|
|
modifier = Modifier
|
|
.fillMaxSize()
|
|
.padding(16.dp)
|
|
) {
|
|
Row(
|
|
modifier = Modifier
|
|
.fillMaxWidth()
|
|
.padding(bottom = 16.dp),
|
|
verticalAlignment = Alignment.CenterVertically
|
|
) {
|
|
TextField(
|
|
value = newTaskTitle,
|
|
onValueChange = { newTaskTitle = it },
|
|
modifier = Modifier.weight(1f),
|
|
singleLine = true
|
|
)
|
|
Spacer(modifier = Modifier.width(8.dp))
|
|
IconButton(
|
|
onClick = {
|
|
if (newTaskTitle.isNotBlank()) {
|
|
onAddTask(newTaskTitle.trim())
|
|
newTaskTitle = ""
|
|
}
|
|
}
|
|
) {
|
|
Icon(Icons.Default.Add, contentDescription = "Add")
|
|
}
|
|
}
|
|
|
|
LazyColumn {
|
|
items(tasks, key = { it.id }) { task ->
|
|
Row(
|
|
modifier = Modifier
|
|
.fillMaxWidth()
|
|
.padding(vertical = 8.dp),
|
|
verticalAlignment = Alignment.CenterVertically
|
|
) {
|
|
Checkbox(
|
|
checked = task.isCompleted,
|
|
onCheckedChange = { onToggleTask(task.id) }
|
|
)
|
|
Text(
|
|
text = task.title,
|
|
modifier = Modifier.weight(1f)
|
|
)
|
|
IconButton(onClick = { onDeleteTask(task.id) }) {
|
|
Icon(Icons.Default.Delete, contentDescription = "Delete")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|