
2025.12.24 (μ) κ³Όμ λ‘ λ§λ To Do App ꡬν μ 리 π
λͺ©μ°¨
1. νλ‘μ νΈ μκ°
2. μ£ΌμκΈ°λ₯
3. νλ‘μ νΈ νμΌ κ΅¬μ‘°
4. Trouble Shooting

Flutter κΈ°μ΄ κ³Όμ μμ λ°°μ΄ λ μ΄μμ μ€κ³ λ₯λ ₯μ λ°νμΌλ‘ μ€λ¬΄μμ μ¬μ©νλ ννμ΄μ§(Home Page), λ°ν
μνΈ(Bottom Sheet), λν
μΌ νμ΄μ§ (Detail Page) λ± νμ΄μ§ κ° λ°μ΄ν° μ λ¬ μμ€ν
μ ꡬννκ³ μ§μ appμ ꡬμ λ° κ΅¬μ±νκ² ν΄λ³΄μλ€.
π λ©μΈνμ΄μ§
AppBar νμ΄νμ μ΄λ¦μ μ μ©ν μ μλλ‘ νμ¬ κ°μΈνλ νμ΄μ§λ₯Ό ꡬμ±νμΌλ©°, webpμ΄λ―Έμ§λ₯Ό λ°°μΉν΄μ μ©λμ μ€μ¬μ μ±μ κΈ°λ₯μ μ΅μ ν
π ν μΌ λͺ©λ‘ νμ΄μ§
ν μΌ λ°μ΄ν° μ 무μ λ°λΌ 'ν μΌ μμ' μμ ―κ³Ό '리μ€νΈλ·°'λ₯Ό μ μ©
π μμΈ μ 보 νμ΄μ§
ToDoEntity κ°μ²΄λ₯Ό λ겨λ°μμ μμΈ λ΄μ©μ νλ©΄μ ꡬμ±νκ³ νμ΄μ§μ 리μ€νΈ νμ΄μ§ κ°μ λ°μ΄ν°λ₯Ό λ겨λ°μ μ μλλ‘ κ΅¬ν
π focus μμ€ν
μΆκ° μ°½ νμ±ν μμ μλ ν¬μ»€μ€κ° λ μ μλλ‘ κ΅¬μ±νμ¬ ν€λ³΄λ λ
ΈμΆλ‘ μ¬μ©μκ° μ
λ ₯ν μ μλλ‘ κ΅¬ν
π λ°μν λ μ΄μμ
MediaQueryλ₯Ό μ¬μ©ν΄μ ν€λ³΄λκ° μ¬λΌμ¬ λ μ
λ ₯μ°½μ΄ κ°λ €μ§μ§ μλλ‘ νλ¨ μ¬λ°±μ μ‘°μ
π 'μ μ₯'λ²νΌ νμ©
ν μΌ μ λͺ©μ΄ μ
λ ₯λ κ²½μ°μλ§ 'μ μ₯'λ²νΌμ΄ νμ±ν λλλ‘ μ€κ³
π μμ΄μ½ λ° μ·¨μμ μ¬μ©
μ¦κ²¨μ°ΎκΈ°λ₯Ό νμ±νν΄μ μ¬μ©μκ° μ¦κ²¨μ°Ύλ λ΄μ©μ ν λμ νμΈ ν μ μλλ‘ νμΌλ©°, 체ν¬λ°μ€λ₯Ό μ ννμ λμ ν μΌ μ λͺ©μ μ·¨μμ ν¨κ³Όλ₯Ό λ£μ΄μ μ€μκ°μΌλ‘ μνλ₯Ό νμΈ ν μ μλλ‘ νλ€.
π Home Pageμ Detail page μ°λ
ν μΌμ΄ μμ κ²½μ°μ μ¬μ©μμκ² ν μΌ λͺ©λ‘μ μμ±νλΌκ³ μμ ―μ νμνκ³ , ν μΌ λͺ©λ‘μ΄ μμ κ²½μ°μλ 리μ€νΈλ₯Ό ν λμ λ³Ό μ μλλ‘ νλ©΄μ λ
ΈμΆμν€λλ‘ κ΅¬ννλ€.
π ν
μ€νΈ μ
λ ₯ μ ν
ν μΌ μ λͺ©μλ ν
μ€νΈ μ νμ λ¬μ μ λͺ©μ ν λμ λ³Ό μ μκ² κ΅¬ννμΌλ©°, μμΈ ν
μ€νΈμλ κΈμκ° κΈΈμ΄μ§λ©΄ μλμΌλ‘ μ€λ°κΏμ΄ λ μ μλλ‘ μ μ©νλ€.
π¦lib
β£ home
β β£ widgets
β β β add_todo_bottom_sheet.dart
β β home_page.dart
β£ todo_detail
β β£ widgets
β β β£ to_do_view.dart
β β β todo_entity.dart
β β detail_page.dart
β main.dart
π€Άπ» λ¬Έμ
μμΈ μ€λͺ
μ
λ ₯μ°½μ maxLines: nullμ μ€μ νμ, ν
μ€νΈκ° κΈΈμ΄μ§ λ λΆλͺ¨ μμ ―μ λ²μλ₯Ό λ²μ΄λμ μ€λ²νλ‘μ°κ° λ°μνμλ€.
π€Άπ» μμΈ
무νν λμ΄λ μ μλ TextFieldκ° ν¬κΈ° μ νμ΄ μλ Row/Column μμ μμΉνκΈ° λλ¬Έμ΄μλ€.
π§π»βπ ν΄κ²°
TextFieldλ₯Ό Flexible μμ ―μΌλ‘ κ°μΈμ λΆλͺ¨ λ΄μ μ¬μ© κ°λ₯ν 곡κ°λ§ μ°¨μ§νκ³ , λ΄μ©μ΄ λ§μμ§λ©΄ λ¨μ 곡κ°λ§ μ¬μ©ν μ μλλ‘ λμ΄λ¬λ€.
π€Άπ» λ¬Έμ
ν μΌ λ¦¬μ€νΈμ νλͺ©μ μΆκ°νμΌλ, μμ΄μ½μ 체ν¬ν΄λ νλ©΄μλ μλ¬΄λ° λ³νκ° μμμ΅λλ€. setStateλ₯Ό μ°λ €λ©΄ The method 'setState' ins't defined λΌλ μλ¬κ° λ°μνλ€.
π€Άπ» μμΈ
StatelessWidgetμ μ¬μ©νκ² λλ©΄ νλ©΄μ λ°κΏ μ μλ μμ ―μΌλ‘ νλ©΄μ μΌλΆκ° μ¬μ©μμ λμμΌλ‘ λ³νκ² λ μμλ λ°λμ StatefulWidgetμ μ¬μ©ν΄μΌ νλ€.
π§π»βπ ν΄κ²°
μμ ―μ StatefulWidetμΌλ‘ λ³κ²½νκ³ , λ°μ΄ν°κ° λ³κ²½λλ μμ μ setState()λ₯Ό νΈμΆνκ² ν΄μ λ°μ΄ν° λ³νμ λ°λΌ νλ©΄ λ³νλ₯Ό μ€ μ μμλ€.
π€Άπ» λ¬Έμ
ν μΌ μ λͺ©μ μ
λ ₯νμ§ μμμ λλ 'μ μ₯'λ²νΌμ΄ νμ±ν λλ λ¬Έμ κ° μμλ€.
π€Άπ» μμΈ
TextFieldμ κΈμκ° μ¨μ§κ³ μ§μμ§λ κ²μ μ€μκ°μΌλ‘ νμΈ ν μ μλ κΈ°λ₯μ΄ νμνλ€.
π§π»βπ ν΄κ²°
TextFieldμμ addListenerκΈ°λ₯μ νμ©νκ³ initStateμμ 리μ€λλ₯Ό μ¬μ©, μ¬μ©μκ° κΈμλ₯Ό μΉκ²λλ©΄ canSave λ³μλ₯Ό μ
λ°μ΄νΈ νλλ‘ ν΄μ λ¬Έμ λ₯Ό ν΄κ²°νλ€.
@override
void initState() {
super.initState();
titleController.addListener(() {
setState(() {
canSave = titleController.text.isNotEmpty;
});
});
}
π€Άπ» λ¬Έμ
μ½λκ° λ무 κΈΈμ΄μ§κΈ° μμνλ©΄μ ToDoViewλ AddTodoBottomSheetλ₯Ό λ³λμ νμΌλ‘ λΆλ¦¬νλλ HomePageμ μλ λ°μ΄ν°λ₯Ό μ°Ύμ μ μλ€λ μλ¬κ° λ§μμ Έμ λΉν©νμλ€.
π€Άπ» μμΈ
νμΌλ‘ λΆλ¦¬λλ©΄μ μμ ―μ΄ λ¨μ΄μ§κ² λκ³ , λ°μ΄ν°λ₯Ό μ¬μ©νλ €λ©΄ μμ±μλΌλ κ²μ ν΅ν΄ λ°μ΄ν°λ₯Ό λ겨μ€μΌ νλ€.
π§π»βπ ν΄κ²°
κ°μ²΄ μ λ¬κ³Ό ν¨μ μ λ¬
κ°μ²΄ μ λ¬: ToDoViewκ° TodoEntity μ 체λ₯Ό λ°μ μ μλλ‘ final TodoEntity toDo;λ₯Ό μ μΈνκ³ requiredν€μλλ‘ λ°μμ ν΄κ²°νλ€.
ν¨μ μ λ¬: μμΈ νμ΄μ§λ μμ μμ ―μμ λΆλͺ¨μ μνλ₯Ό λ°κΎΈλ €λ©΄ ν¨μ μ체λ₯Ό μ λ¬ν΄μ μ½λ°±νλ λ°©μμ΄ νμνμ΅λλ€. final VoidCallback onToggleDone;μ²λΌ ν¨μλ₯Ό λ³μλ‘ λ겨주λ λ°©μμ μ¬μ©νμ¬ ν΄κ²°νλ€.
π€Άπ» λ¬Έμ
todo.isDone = !todo.isDone; μ½λλ₯Ό μΌλλ° μλ¬κ° λ°μνλ€. can't be used as a setter because it's final
π€Άπ» μμΈ
TodoEntity ν΄λμ€μμ λ³μλ€μ finalλ‘ μ μΈνκΈ°μ λ³νμ§ μλ κ°μΌλ‘ μΈμλμ΄ μμ μ΄ λΆκ°λ₯νλ κ²μΌλ‘ νμΈνλ€.
π§π»βπ ν΄κ²°
μνκ° λ³ν μ μλλ‘ final ν€μλλ₯Ό μ κ±°νκ³ λ³κ²½ κ°λ₯ν μνλ‘ λ§λ€μλ€.
μ΄λ² νλ‘μ νΈλ₯Ό ν΅ν΄ λ°μ΄ν°λ κ°μ²΄ μ λ¬κ³Ό ν¨μ μ λ¬, μμ ―μ μμΉ λ±μ ν΅μ¬ μλ¦¬κ° μ€μνλ€λ μ¬μ€μ κΉ¨λ«κ² ν΄μ£ΌμμΌλ©°, 머리μμΌλ‘λ μ΄ν΄κ° λλλ° μ‘°κΈμ ꡬ쑰μ μΈ λΆλΆμμ λμμ΄ λ μ μμλ νλ‘μ νΈ μλ€..

λ무λ λ§μλ μ€λ₯.. νΈλ¬λΈμν
μ μ°κΈ°μ μΊ‘μ³ λ΄μκ³Ό μ 리 λ΄μμ΄ λ€μ£½λ°μ£½ μ°ΎκΈ°λ μ΄λ €μ λ€..γ
μΊ‘μ³ λ΄μμ ν¨μ¬ λ§λ€λ μ¬μ€~! μ€λ₯λ μλ¬κ° λλ©΄ μ 리ν μκ°λ μμ΄ μ λͺ» λλ©΄ μ΄μ©μ§λ λ§μμ κΈνκ² μ²λ¦¬νλ€λ³΄λ μ 리ν μκ°μ΄ λ§μ΄ μμλ€..γ
μ΄λ² To Do Appμ μ μκ²λ μμ§μ λ무 μ΄λ €μ΄ νλ‘μ νΈμλ κ² κ°λ€. κ±°μ 1λ μ μ§λ λλ.. μμ±μ νμΌλ κ·Έλ κ·Έλμ μλ¬μ μ μ°νμ§ λͺ» νκ² λΉν©μ λ§μ΄νκ³ λμνλκ² μμ½κ³ κΌ λ€μ λ§λ€μ΄λ³΄κ³ 볡μ΅νλ μκ°μ΄ νμνλ€κ³ λκΌλ€.