Skip to content

Commit 60f51ed

Browse files
feat(ref: no-ref): fix comments
1 parent 3183fae commit 60f51ed

File tree

9 files changed

+126
-93
lines changed

9 files changed

+126
-93
lines changed

lib/common/button/button.widget.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import 'package:flutter/material.dart';
33
class ButtonWidget extends StatelessWidget {
44
const ButtonWidget({
55
required this.label,
6-
required this.isActive,
76
required this.onTap,
7+
this.isActive = false,
88
super.key,
99
});
1010

lib/main.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,10 @@ class TodoApp extends StatelessWidget {
1212
@override
1313
Widget build(BuildContext context) => GetMaterialApp(
1414
title: 'Todos',
15-
// initialBinding: HomeBinding(),
1615
getPages: [
1716
GetPage(
1817
name: '/',
19-
page: () => HomeScreen(),
18+
page: HomeScreen.new,
2019
),
2120
],
2221
);

lib/screens/home/home.screen.dart

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,18 @@ import 'todo/todo.widget.dart';
55
import '../home/title/title.widget.dart';
66

77
class HomeScreen extends StatelessWidget {
8+
const HomeScreen({super.key});
9+
810
@override
911
Widget build(BuildContext context) {
10-
Get.lazyPut(() => TodoController());
12+
Get.lazyPut(TodoController.new);
1113

12-
return Scaffold(
14+
return const Scaffold(
1315
backgroundColor: Colors.white,
1416
body: Center(
1517
child: Column(
16-
children: [
17-
const TitleWidget(),
18+
children: <Widget>[
19+
TitleWidget(),
1820
TodoWidget(),
1921
],
2022
),

lib/screens/home/todo/add-task/add-task.widget.dart

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,35 +3,27 @@ import 'package:get/get.dart';
33
import '../todo.controller.dart';
44
import '../../../../common/input/input.widget.dart';
55

6-
class AddTaskWidget extends StatelessWidget {
7-
const AddTaskWidget({
8-
required this.textController, super.key,
9-
});
6+
class AddTaskWidget extends GetView<TodoController> {
7+
const AddTaskWidget({ super.key });
108

11-
final TextEditingController textController;
129

1310
@override
14-
Widget build(BuildContext context) {
15-
final TodoController controller = Get.find<TodoController>();
16-
final FocusNode focusNode = FocusNode();
17-
18-
return Container(
11+
Widget build(BuildContext context) => Container(
1912
decoration: BoxDecoration(
2013
border: Border(
2114
bottom: BorderSide(color: Colors.grey.shade300),
2215
),
2316
),
2417
child: InputWidget(
25-
textController: textController,
26-
focusNode: focusNode,
18+
textController: controller.textController,
19+
focusNode: controller.focusNode,
2720
hintText: 'What needs to be done?',
2821
onSubmitted: (String value) {
2922
if (value.isNotEmpty) {
3023
controller.addTask(value);
31-
textController.clear();
24+
controller.textController.clear();
3225
}
3326
},
3427
),
3528
);
36-
}
3729
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class Filter {
2+
const Filter({required this.label, required this.key});
3+
4+
final String label;
5+
final String key;
6+
}

lib/screens/home/todo/filter-panel/filter-panel.widget.dart

Lines changed: 29 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,45 +2,36 @@ import 'package:flutter/material.dart';
22
import 'package:get/get.dart';
33
import '../../../../common/button/button.widget.dart';
44
import '../todo.controller.dart';
5+
import 'filter-panel.model.dart';
56

6-
class FilterPanelWidget extends StatelessWidget {
7-
FilterPanelWidget({super.key});
8-
9-
final TodoController controller = Get.find<TodoController>();
7+
class FilterPanelWidget extends GetView<TodoController> {
8+
const FilterPanelWidget({super.key});
109

1110
@override
12-
Widget build(BuildContext context) {
13-
final List<Map<String, String>> filters = <Map<String, String>>[
14-
<String, String>{'label': 'All', 'key': 'all'},
15-
<String, String>{'label': 'Active', 'key': 'active'},
16-
<String, String>{'label': 'Completed', 'key': 'completed'},
17-
];
18-
19-
return Container(
20-
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
21-
child: Row(
22-
mainAxisAlignment: MainAxisAlignment.spaceBetween,
23-
children: <Widget>[
24-
Obx(() => Text(
25-
'${controller.activeCount} items left',
26-
style: const TextStyle(fontSize: 14, color: Colors.grey),
27-
)),
28-
Obx(() => Row(
29-
children: filters
30-
.map((Map<String, String> filter) => ButtonWidget(
31-
label: filter['label']!,
32-
isActive: controller.currentFilter.value == filter['key'],
33-
onTap: () => controller.setFilter(filter['key']!),
34-
))
35-
.toList(),
36-
)),
37-
ButtonWidget(
38-
onTap: controller.clearCompleted,
39-
label: 'Clear completed',
40-
isActive: false,
41-
),
42-
],
43-
),
44-
);
45-
}
11+
Widget build(BuildContext context) => Container(
12+
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
13+
child: Obx(() => Row(
14+
mainAxisAlignment: MainAxisAlignment.spaceBetween,
15+
children: <Widget>[
16+
Text(
17+
'${controller.activeCount} items left',
18+
style: const TextStyle(fontSize: 14, color: Colors.grey),
19+
),
20+
Row(
21+
children: controller.filters
22+
.map((Filter filter) => ButtonWidget(
23+
label: filter.label,
24+
isActive:
25+
controller.currentFilter.value == filter.key,
26+
onTap: () => controller.setFilter(filter.key),
27+
))
28+
.toList(),
29+
),
30+
ButtonWidget(
31+
onTap: controller.clearCompleted,
32+
label: 'Clear completed',
33+
),
34+
],
35+
)),
36+
);
4637
}

lib/screens/home/todo/task-list/task-list.widget.dart

Lines changed: 61 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,74 @@
1+
// import 'package:flutter/material.dart';
2+
// import 'package:get/get.dart';
3+
// import '../todo.controller.dart';
4+
// import '../task-list-item/task-list-item.widget.dart';
5+
// import '../filter-panel/filter-panel.widget.dart';
6+
// import '../todo.model.dart';
7+
//
8+
// class TaskListWidget extends GetView<TodoController> {
9+
// const TaskListWidget({super.key});
10+
//
11+
// @override
12+
// Widget build(BuildContext context) => Obx(() {
13+
// final List<Task> filteredTasks = controller.filteredTasks;
14+
// final RxList<Task> tasks = controller.tasks;
15+
//
16+
// return Column(
17+
// children: <Widget>[
18+
// if (filteredTasks.isNotEmpty)
19+
// Column(
20+
// children: filteredTasks
21+
// .map(
22+
// (Task task) => TaskListItemWidget(
23+
// task: task,
24+
// onStatusChange: (bool status) =>
25+
// controller.updateTaskStatus(task, isFinished: status),
26+
// onUpdate: (String updatedText) =>
27+
// controller.updateTaskText(task, updatedText),
28+
// onDelete: () => controller.deleteTask(task),
29+
// ),
30+
// )
31+
// .toList(),
32+
// ),
33+
// if (tasks.isNotEmpty) const FilterPanelWidget(),
34+
// ],
35+
// );
36+
// });
37+
// }
138
import 'package:flutter/material.dart';
239
import 'package:get/get.dart';
340
import '../todo.controller.dart';
441
import '../task-list-item/task-list-item.widget.dart';
542
import '../filter-panel/filter-panel.widget.dart';
643
import '../todo.model.dart';
744

8-
class TaskListWidget extends StatelessWidget {
9-
TaskListWidget({super.key});
10-
11-
final TodoController controller = Get.find<TodoController>();
45+
class TaskListWidget extends GetView<TodoController> {
46+
const TaskListWidget({super.key});
1247

1348
@override
14-
Widget build(BuildContext context) => Column(
49+
Widget build(BuildContext context) => Obx(() {
50+
final List<Task> filteredTasks = controller.filteredTasks;
51+
final RxList<Task> tasks = controller.tasks;
52+
53+
return Column(
1554
children: <Widget>[
16-
Obx(() {
17-
final List<Task> filteredTasks = controller.filteredTasks;
18-
if (filteredTasks.isNotEmpty) {
19-
return Column(
20-
children: filteredTasks.map((Task task) => TaskListItemWidget(
21-
task: task,
22-
onStatusChange: (bool status) =>
23-
controller.updateTaskStatus(task, isFinished: status),
24-
onUpdate: (String updatedText) =>
25-
controller.updateTaskText(task, updatedText),
26-
onDelete: () => controller.deleteTask(task),
27-
)).toList(),
28-
);
29-
}
30-
return const SizedBox();
31-
}),
32-
Obx(() {
33-
final RxList<Task> tasks = controller.tasks;
34-
if (tasks.isNotEmpty) {
35-
return FilterPanelWidget();
36-
}
37-
return const SizedBox();
38-
}),
55+
if (filteredTasks.isNotEmpty)
56+
Column(
57+
children: filteredTasks
58+
.map(
59+
(Task task) => TaskListItemWidget(
60+
task: task,
61+
onStatusChange: (bool status) =>
62+
controller.updateTaskStatus(task, isFinished: status),
63+
onUpdate: (String updatedText) =>
64+
controller.updateTaskText(task, updatedText),
65+
onDelete: () => controller.deleteTask(task),
66+
),
67+
)
68+
.toList(),
69+
),
70+
if (tasks.isNotEmpty) const FilterPanelWidget(),
3971
],
4072
);
73+
});
4174
}
42-

lib/screens/home/todo/todo.controller.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,19 @@
11
import 'package:get/get.dart';
2+
import 'package:flutter/material.dart';
3+
import 'filter-panel/filter-panel.model.dart';
24
import 'todo.model.dart';
35

46
class TodoController extends GetxController {
7+
final TextEditingController textController = TextEditingController();
8+
final FocusNode focusNode = FocusNode();
9+
10+
final List<Filter> filters = const <Filter>[
11+
Filter(label: 'All', key: 'all'),
12+
Filter(label: 'Active', key: 'active'),
13+
Filter(label: 'Completed', key: 'completed'),
14+
];
15+
16+
517
RxList<Task> tasks = <Task>[].obs;
618
RxString currentFilter = 'all'.obs;
719

lib/screens/home/todo/todo.widget.dart

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ import 'task-list/task-list.widget.dart';
44

55

66
class TodoWidget extends StatelessWidget {
7-
TodoWidget({super.key});
8-
final TextEditingController textController = TextEditingController();
7+
const TodoWidget({super.key});
98

109
@override
1110
Widget build(BuildContext context) => Container(
@@ -14,9 +13,9 @@ class TodoWidget extends StatelessWidget {
1413
border: Border.all(color: Colors.grey.shade300),
1514
borderRadius: BorderRadius.circular(8),
1615
),
17-
child: Column(
18-
children: [
19-
AddTaskWidget(textController: textController),
16+
child: const Column(
17+
children: <Widget>[
18+
AddTaskWidget(),
2019
TaskListWidget(),
2120
],
2221
),

0 commit comments

Comments
 (0)