■ 할 일 관리 앱을 만드는 방법을 보여준다.
▶ main.dart
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
import 'package:flutter/material.dart'; void main() { runApp(TestApplication()); } class Todo { String title; bool isDone; Todo(this.title, {this.isDone = false}); } class TestApplication extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Test Application', theme: ThemeData( primarySwatch: Colors.blue, ), home: MainPage(), ); } } class MainPage extends StatefulWidget { @override _MainPageState createState() => _MainPageState(); } class _MainPageState extends State<MainPage> { final _itemList = <Todo>[]; var _todoController = TextEditingController(); @override void dispose() { _todoController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('남은 할 일'), ), body: Padding( padding: const EdgeInsets.all(8.0), child: Column( children: <Widget>[ Row( children: <Widget>[ Expanded( child: TextField( controller: _todoController, ), ), RaisedButton( child: Text('추가'), onPressed: () => _addTodo(Todo(_todoController.text)), ), ], ), Expanded( child: ListView( children: _itemList.map((todo) => _buildItem(todo)).toList(), ), ), ], ), ), ); } Widget _buildItem(Todo todo) { return ListTile( title: Text( todo.title, style: todo.isDone ? TextStyle( decoration: TextDecoration.lineThrough, fontStyle: FontStyle.italic, ) : null, ), trailing: IconButton( icon: Icon(Icons.delete_forever), onPressed: () => _deleteTodo(todo), ), onTap: () => _toggleTodo(todo), ); } void _addTodo(Todo todo) { setState(() { _itemList.add(todo); _todoController.text = ""; }); } void _deleteTodo(Todo todo) { setState(() { _itemList.remove(todo); }); } void _toggleTodo(Todo todo) { setState(() { todo.isDone = !todo.isDone; }); } } |