Liste de tâches : La marquer comme terminée
Fait partie de la section Projets du Journey Flutter de Coddy. Leçon 3 sur 36.
Une tâche doit mémoriser si elle est terminée. Ajoute à la classe un deuxième champ qui commence à false et qui peut changer, afin qu’il ne soit pas final :
class Task {
Task(this.title);
final String title;
bool done = false;
}Chaque ligne reçoit une Checkbox comme widget leading:. Sa value correspond à done de la tâche, et son onChanged modifie done à l’intérieur de setState.
Une tâche terminée doit avoir l’air terminée. TextDecoration.lineThrough barre le texte, et une couleur grise le rend moins visible. Lorsque la tâche n’est pas terminée, le style est null et le texte conserve l’apparence du thème :
style: task.done
? const TextStyle(decoration: TextDecoration.lineThrough, color: Colors.grey)
: null,Défi
MoyenCoche les tâches terminées :
- ajoute
bool done = false;àTask - ajoute à chaque
ListTileuneCheckboxen positionleading:qui affiche et modifie l'étatdonede la tâche - lorsqu'une tâche est terminée, barre son titre et applique-lui la couleur
Colors.grey
Essayez vous-même
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.teal),
),
home: const TodoScreen(),
);
}
}
class Task {
Task(this.title);
final String title;
}
class TodoScreen extends StatefulWidget {
const TodoScreen({super.key});
@override
State<TodoScreen> createState() => _TodoScreenState();
}
class _TodoScreenState extends State<TodoScreen> {
final List<Task> _tasks = [Task('Buy milk'), Task('Walk the dog'), Task('Read a book')];
final _controller = TextEditingController();
void _addTask() {
setState(() {
_tasks.add(Task(_controller.text));
});
_controller.clear();
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('My Tasks')),
body: Column(
children: [
Padding(
padding: const EdgeInsets.fromLTRB(16, 16, 16, 8),
child: Row(
children: [
Expanded(
child: TextField(
controller: _controller,
decoration: const InputDecoration(
labelText: 'New task',
border: OutlineInputBorder(),
),
),
),
const SizedBox(width: 8),
IconButton.filled(
onPressed: _addTask,
icon: const Icon(Icons.add),
),
],
),
),
Expanded(
child: ListView.builder(
itemCount: _tasks.length,
itemBuilder: (context, index) {
final task = _tasks[index];
return ListTile(
title: Text(task.title),
);
},
),
),
],
),
);
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Projets
1Projet : Liste de tâches
Liste de tâches : La liste des tâchesListe de tâches : Ajouter une tâche4Projet : Suivi des habitudes
Suivi des habitudes : Vos habitudesSuivi des habitudes : La semaineEntraînez-vous par vous-même : Compilateur Flutter en ligne