Start Debugging

TypeMonkey хорошо напоминает: десктопным приложениям на Flutter сначала нужна архитектура, потом полировка

TypeMonkey, десктопное приложение для тренировки набора текста на Flutter, показывает, почему десктопным проектам нужна чистая архитектура с первого дня: sealed-состояния, границы по интерфейсам и тестируемая логика.

Сегодня на r/FlutterDev появился небольшой десктопный проект на Flutter: TypeMonkey, приложение для тренировки набора в духе MonkeyType, которое явно позиционируется как “ранний, но структурированный” вариант.

Источник: оригинальный пост и репозиторий: тред на r/FlutterDev и BaldGhost-git/typemonkey.

Десктоп - это место, где “просто выкатить UI” перестаёт работать

На мобильных иногда удаётся обойтись одним объектом состояния и кучей виджетов. На десктопе (Flutter 3.x + Dart 3.x) вы быстро упираетесь в другие нагрузки:

Поэтому мне нравятся проекты, которые начинаются со структуры. Чистая архитектура - не религия, а способ сделать вторую и третью возможность менее болезненными, чем первая.

Моделируйте цикл набора текста как явные состояния

Dart 3 даёт классы sealed. Для состояния приложения это практичный способ избежать “супа из nullable” и случайных булевых флагов.

Вот минимальная форма состояния для сессии набора, которая остаётся тестируемой и удобной для UI:

sealed class TypingState {
  const TypingState();
}

final class Idle extends TypingState {
  const Idle();
}

final class Running extends TypingState {
  final DateTime startedAt;
  final int typedChars;
  final int errorChars;

  const Running({
    required this.startedAt,
    required this.typedChars,
    required this.errorChars,
  });
}

final class Finished extends TypingState {
  final Duration duration;
  final double wpm;

  const Finished({required this.duration, required this.wpm});
}

В Flutter 3.x вы можете подвесить это к любому решению по управлению состоянием (ValueNotifier, Provider, Riverpod, BLoC). Главное, чтобы ваш UI отрисовывал состояние, а не груду условий, размазанных по виджетам.

Держите “список слов” и “статистику” за интерфейсом

Десктопные приложения часто обрастают хранилищем позже. Если вы стартуете с такой границы:

вы можете держать логику набора детерминированной и unit-тестируемой и при этом выпускать UI рано.

Если вы делаете десктопное приложение на Flutter 3.x и ищете реальный репозиторий как ориентир для структуры, за этим стоит понаблюдать. Даже если вы никогда его не склонируете, главный вывод прост: на десктопе архитектура не избыточна, это то, как вы продолжаете двигаться вперёд.

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Назад