Простое ToDo приложение, построенное с использованием Flutter и Riverpod, с REST API в качестве бэкенда. Приложение демонстрирует принципы Clean Architecture и современные подходы к управлению состоянием.
- Просмотр задач по категориям
- Создание новых задач
- Фильтрация по категориям
- Автоматическое обновление списка
- Логирование сетевых запросов в режиме отладки
- Полноценная обработка ошибок
- Flutter 3.19+
- Riverpod - управление состоянием
- Dio - HTTP-клиент
- Equatable - сравнение объектов
- Fast Immutable Collections - неизменяемые коллекции
- Clean Architecture - организация кода
lib/
├── domain/
│ ├── entities/ # Бизнес-сущности
│ ├── repositories/ # Абстракции репозиториев
│ └── usecases/ # Бизнес-логика
├── data/
│ ├── models/ # Модели данных
│ ├── datasources/ # Источники данных
│ └── repositories/ # Реализации репозиториев
└── presentation/
├── providers/ # Провайдеры Riverpod
└── screens/ # UI-экраны
- Клонируйте репозиторий:
git clone https://github.com/i-panov/flutter-rest-todo.git- Перейдите в директорию проекта:
bash
cd flutter-rest-todo
- Установите зависимости:
bash
flutter pub get
- Запустите приложение:
bash
flutter run
Приложение использует публичное REST API:
https://my-json-server.typicode.com/i-panov/flutter_rest_todo
Для изменения базового URL отредактируйте файл:
lib/presentation/providers/todo_providers.dart
-
Clean Architecture:
- Чёткое разделение на domain (сущности, репозитории), data (реализации, источники данных) и presentation (UI, состояние)
- Инверсия зависимостей через внедрение реализаций в конструкторы
- Независимость бизнес-логики от фреймворков
-
Управление состоянием с Riverpod:
- StateNotifier для управления состоянием списка задач
- FutureProvider для асинхронной загрузки категорий
- Комбинированные провайдеры для фильтрации задач
- Селективное чтение провайдеров для оптимизации
-
Оптимизация производительности:
- Неизменяемые коллекции (IList) для безопасного управления состоянием
- Мемоизация вычисляемых значений (автоматическая в Riverpod)
- Ленивая инициализация зависимостей
-
Обработка ошибок:
- Глобальный перехват исключений в репозитории
- Локальная обработка ошибок в UI слое
- Пользовательские уведомления через SnackBar
- Состояния загрузки для всех асинхронных операций
Этот проект распространяется под лицензией MIT.

