Привет, проверяю твое дз, постараюсь максимально подробно изложить все замечания и подкрепить их документацией.
1. flutter_lints.
Я вижу, что у тебя в зависимостях подтягивается flutter_lints. По умолчанию он настроен уже в любом проекте, но ты можешь переопределять правила его работы. Даже, если ты их не переопределял, то он все равно тебе выдает подсказки, но они у тебя были проигнорированы. Смотри ниже:
-
lowerCamelCase
Переменным не дается название с нижним подчеркиванием. Должны называться в таком формате [lowerCamelCase]
|
DateTime created_at, |
|
DateTime changed_at, |
|
String last_updated_by, { |
Подробнее
-
prefer_const_constructors
В некоторых местах можно явно указать, что виджет будет константным. Да, иногда не всегда это нужно делать. Но в данном случае думаю нужно было оставить const.
|
duration: Duration(milliseconds: 300), |
duration: const Duration(milliseconds: 300),
Подробнее: Dart Documentation
-
prefer_const_declarations
Используй const, вместо final, где это возможно. Константные конструкции определяются во время компиляции, а финальные при выполнении.
Подробнее: Dart Documentation
Подробнее: Metanit
2. Форматирование кода.
В некоторых местах есть выходы кода за ограничение. Возможно ты делал autoformat, но это не помогало.
|
const Padding( |
|
padding: EdgeInsets.only(top: appPaddingMedium, bottom: appPaddingMedium), |
|
child: Divider( |
|
height: 2, |
|
), |
|
), |
Если поставим ,
после bottom: appPaddingMedium
, при автоформатировании это учтется и получится что-то такое:
const Padding(
padding: EdgeInsets.only(
top: appPaddingMedium,
bottom: appPaddingMedium,
),
child: Divider(
height: 2,
),
),
Вся информация про линтер и форматирование тут -> Dart Documentation
Все остальное реализовано вроде прилично(Учитывая, что я не последователь GetIT и MobX)
Придирки
Тут я опишу некоторые моменты, которы по моему мнению кажутся важными. (Можно игнорировать)
-
Пакеты для маленьких задач.
Я бы не стал тянуть лишние пакеты, чтобы вызывать у них конкретную функциональность. С одной стороны я посмотрел и обновление пакета было недавно, но с другой стороны поддержка может прекратиться в любой момент.
-
Использование определенных хранилищ данных для определенных целей.
Я бы не использовал get_storage, так как он предназначен для хранения каких-то маленьких данных, которые не нужно индексировать. В принципе они сами об это пишут в документации (в самом низу).
Иначе у тебя получаются вот такие ситуации, как ниже:
Тебе приходится перебирать все ключи и запоминать их значения, а потом по ним делать еще и запросы на получение значения. Теперь представь, что у тебя так миллион записей :).
|
Future<List<Map<String, dynamic>>?> getAllTasks() async { |
|
List<String> keys = _box?.getKeys().toList(); |
|
|
|
List<Map<String, dynamic>>? values; |
|
|
|
if (keys.isNotEmpty) { |
|
values = []; |
|
} |
|
|
|
for (String key in keys) { |
|
values?.add(_box?.read(key)); |
|
} |
|
|
|
return values; |
|
} |
|
|
Если бы это был, к примеру, sqlflie(SQL), то там бы вопрос решался одной строчкой
SELECT * from tasks where uuid == ...
- Виджет тяжело переиспользовать.
У тебя есть виджет
|
class DeleteTaskButton extends StatelessWidget { |
|
DeleteTaskButton({super.key, required this.taskUid}); |
|
|
|
final String taskUid; |
|
|
|
final TaskListContoller contoller = GetIt.I<TaskListContoller>(); |
И в самом низу ты определяешь для него логику нажатия
|
Future<void> deleteTask() async { |
|
runInAction(() => isSyncing.value = true); |
|
await contoller.deleteTask(taskUid); |
|
|
|
navigationManager.popToHomePage(); |
|
} |
Выходит так, что это виджет у тебя может делать только одно действие. А теперь представь ситуацию, когда тебе нужно точно такой же виджет показывать на другом экране, но с другой например кнопкой и логикой. Ты либо будешь новый виджет писать(копировать), либо можешь переделать этот так, что в качестве параметра он принимал метод Function() deleteTask
И таких виджетов, как я понял, у тебя несколько.
Как-то так)
Итого.
- Чистота кода и общая структура проекта (4б)
форматирование: 0.5
линт: 0.5
- State-Management (8)
- Получение и хранение данных (10)
- Разное (3)
Итого: 25
Если с чем-то не согласен - пиши, баллы еще не ставил