Переключение поля done у элемента в Flutter
Список задач часто хранит не только текст,
но и отметку «выполнено». Удобно описать
элемент простым классом с полями
title и done. Список таких
объектов лежит в State.
По нажатию на строку меняют
items[index].done на противоположное
и вызывают setState. Внешний вид
можно менять: зачёркнутый
Text
через TextStyle с
decoration: TextDecoration.lineThrough,
если done равен true:
import 'package:flutter/material.dart';
void main() {
runApp(const MaterialApp(home: HomePage()));
}
class TaskItem {
TaskItem(this.title, {this.done = false});
String title;
bool done;
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
final items = [
TaskItem('Buy bread'),
TaskItem('Call mom', done: true),
];
void toggleDone(int index) {
setState(() {
items[index].done = !items[index].done;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: ListView.builder(
itemCount: items.length,
itemBuilder: (context, index) {
final task = items[index];
return ListTile(
onTap: () => toggleDone(index),
title: Text(
task.title,
style: TextStyle(
decoration: task.done
? TextDecoration.lineThrough
: null,
),
),
leading: Icon(
task.done
? Icons.check_circle
: Icons.radio_button_unchecked,
),
);
},
),
);
}
}
Три задачи в списке. Нажатие на
ListTile переключает done.
Выполненные отображайте с иконкой
Icons.check и зачёркнутым
заголовком.