Skip to content

Commit 829d8e9

Browse files
committed
feat(checkpoint): 체크포인트 추가 구현
- 원래 있던 체크포인트의 뒤에만 들어갈 수 있음 - 파이어베이스 ${taskName}000##으로 ref 변경 요망
1 parent ced5a2e commit 829d8e9

File tree

4 files changed

+78
-24
lines changed

4 files changed

+78
-24
lines changed

lib/view/screen/AddTaskPage.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ class _AddTaskFormState extends State<AddTaskForm> {
221221
checkpoints: 0,
222222
finishedCheckpoints: 0,
223223
),
224+
isAdd: false,
224225
),
225226
),
226227
);

lib/view/screen/CheckPointPage.dart

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import 'package:until/model/task_data.dart';
44
import 'package:until/shared_preference.dart';
55
import 'package:until/view/widget/task_item.dart';
66
import 'package:until/view/widget/task_checkpoints.dart';
7-
import 'package:until/view/screen/AddTaskPage.dart';
7+
import 'SetCheckpointsPage.dart';
88

99
class CheckPointPage extends StatefulWidget {
1010
final String name;
@@ -43,12 +43,33 @@ class _CheckPointPageState extends State<CheckPointPage> {
4343
title: const Text('Today'),
4444
actions: [
4545
IconButton(
46-
onPressed: () {
47-
Navigator.push(
48-
context,
49-
MaterialPageRoute(
50-
builder: (context) => const AddTaskPage(),
51-
),
46+
onPressed: () async {
47+
await FirebaseFirestore.instance
48+
.collection('task')
49+
.where('userId', isEqualTo: userId.data)
50+
.where('name', isEqualTo: widget.name)
51+
.get()
52+
.then(
53+
(QuerySnapshot ss) {
54+
Navigator.push(
55+
context,
56+
MaterialPageRoute(
57+
builder: (context) => SetCheckpointsPage(
58+
task: TaskData(
59+
name: widget.name,
60+
startDate: ss.docs[0]['start'],
61+
endDate: ss.docs[0]['end'],
62+
tag: ss.docs[0]['tag'],
63+
imminent: ss.docs[0]['imminent'],
64+
checkpoints: ss.docs[0]['checkpoints'],
65+
finishedCheckpoints: ss.docs[0]
66+
['finishedCheckpoints'],
67+
),
68+
isAdd: true,
69+
),
70+
),
71+
);
72+
},
5273
);
5374
},
5475
icon: const Icon(Icons.add),

lib/view/screen/SetCheckpointsPage.dart

Lines changed: 48 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,26 @@ import 'package:until/view/widget/checkpoint_setter.dart';
1111

1212
class SetCheckpointsPage extends StatelessWidget {
1313
final TaskData task;
14-
const SetCheckpointsPage({Key? key, required this.task}) : super(key: key);
14+
final bool isAdd;
15+
const SetCheckpointsPage({Key? key, required this.task, required this.isAdd})
16+
: super(key: key);
1517

1618
@override
1719
Widget build(BuildContext context) {
1820
return ChangeNotifierProvider(
1921
create: (_) => TaskProvider(),
2022
builder: (builder, child) {
21-
return _SetCheckpointsPage(task: task);
23+
return _SetCheckpointsPage(task: task, isAdd: isAdd);
2224
},
2325
);
2426
}
2527
}
2628

2729
class _SetCheckpointsPage extends StatefulWidget {
2830
final TaskData task;
29-
const _SetCheckpointsPage({Key? key, required this.task}) : super(key: key);
31+
final bool isAdd;
32+
const _SetCheckpointsPage({Key? key, required this.task, required this.isAdd})
33+
: super(key: key);
3034

3135
@override
3236
State<_SetCheckpointsPage> createState() => _SetCheckpointsPageState();
@@ -131,7 +135,7 @@ class _SetCheckpointsPageState extends State<_SetCheckpointsPage> {
131135
const Align(
132136
alignment: Alignment.center,
133137
child: Text(
134-
'There are no checkpoints.\nPlease add some checkpoints.',
138+
'Add some checkpoints.',
135139
style: TextStyle(fontSize: 16),
136140
),
137141
),
@@ -173,18 +177,45 @@ class _SetCheckpointsPageState extends State<_SetCheckpointsPage> {
173177
db.collection('task').doc();
174178
final _task =
175179
context.read<TaskProvider>().task;
176-
await newTaskRef.set({
177-
"name": _task.name,
178-
"userId": userId.data,
179-
"start": _task.startDate,
180-
"end": _task.endDate,
181-
"tag": _task.tag,
182-
"checkpoints":
183-
context.read<TaskProvider>().length,
184-
"finishedCheckpoints":
185-
_task.finishedCheckpoints,
186-
"imminent": _task.imminent,
187-
});
180+
if (widget.isAdd) {
181+
await db
182+
.collection('task')
183+
.where('userId',
184+
isEqualTo: userId.data)
185+
.where('name',
186+
isEqualTo: _task.name)
187+
.get()
188+
.then(
189+
(QuerySnapshot ss) {
190+
db
191+
.collection('task')
192+
.doc(ss.docs[0].id)
193+
.update(
194+
{
195+
'checkpoints': _task
196+
.checkpoints +
197+
context
198+
.read<TaskProvider>()
199+
.length
200+
},
201+
);
202+
},
203+
);
204+
} else {
205+
await newTaskRef.set({
206+
"name": _task.name,
207+
"userId": userId.data,
208+
"start": _task.startDate,
209+
"end": _task.endDate,
210+
"tag": _task.tag,
211+
"checkpoints": context
212+
.read<TaskProvider>()
213+
.length,
214+
"finishedCheckpoints":
215+
_task.finishedCheckpoints,
216+
"imminent": _task.imminent,
217+
});
218+
}
188219
LocalNotification
189220
.initLocalNotificationPlugin();
190221
LocalNotification.requestPermission();
@@ -237,6 +268,7 @@ class _SetCheckpointsPageState extends State<_SetCheckpointsPage> {
237268
"다음 체크 포인트가 1일 남았습니다.\n어서 확인해보세요!");
238269
}
239270
}
271+
240272
Navigator.push(
241273
context,
242274
MaterialPageRoute(

lib/view/widget/task_item.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ class _TaskItemState extends State<TaskItem> {
106106
builder: (BuildContext context) {
107107
return alert;
108108
});
109-
}, //TODO: 여기부터
109+
},
110110
icon: const Icon(
111111
Icons.delete,
112112
color: mainColor,

0 commit comments

Comments
 (0)