23 KiB
План адаптации дизайна веб-приложения mnemo_cards_web_v2
Цель: Адаптировать дизайн веб-приложения mnemo_cards_web_v2, чтобы он был визуально похож на мобильное приложение mnemo_cards.
Дата создания: 19 октября 2025
Статус: План
📊 Анализ текущего состояния
Мобильное приложение (mnemo_cards)
Ключевые особенности дизайна:
-
Цветовая схема:
- Черно-белая основа (black/white primary)
- Кастомные акцентные цвета: peach, golden, green
- Специальные цвета: progressBlue, menuBlue, backgroundBlue, borderGray
- Использует MaterialColor для создания палитр
-
Типографика:
- Шрифт:
Nunito - Все тексты жирные:
FontWeight.w700для всех стилей - Использует flutter_screenutil для адаптивных размеров
- Шрифт:
-
Карточки паков:
- Горизонтальная компоновка (Row)
- Изображение слева (квадратное, равно высоте карточки)
- Информация справа (title, subtitle, количество карточек)
- Граница с цветом пака (
border: Border.all(color: pack.color)) - Скругленные углы (12.0)
- Прозрачный фон карточки
- Высота: ~110.h
-
UI компоненты:
- RefreshIndicator с кастомным цветом
- Простые границы и минималистичный дизайн
- Иконки из webp файлов
- Loading состояния с изображениями (cerdo/luna)
-
Профиль:
- UserStatistics виджет со списком слов
- Прогресс-бары для каждого слова
- SimpleTile компоненты с Divider'ами
- Золотой цвет для выученных слов
Веб-приложение (mnemo_cards_web_v2)
Текущий дизайн:
-
Цветовая схема:
- Material 3 с синим seedColor
- Стандартная палитра Material
- Отсутствуют кастомные акцентные цвета
-
Типографика:
- Шрифт:
Nunito✅ - Стандартные весы шрифтов Material
- Шрифт:
-
Карточки паков:
- Вертикальная компоновка (Column)
- Изображение сверху (AspectRatio 16:9)
- Информация снизу
- Стандартные Material Card с elevation
- Hero анимация ✅
-
UI компоненты:
- Material 3 компоненты
- Shimmer loading states ✅
- Современный responsive дизайн ✅
-
Профиль:
- Продвинутый дизайн со статистикой
- StatsCard компоненты
- SimpleChart для графиков
- Settings card с темной темой
🎯 Этапы адаптации
Этап 1: Обновление цветовой схемы и темизации
Приоритет: 🔴 Высокий
Время: 2-3 часа
Сложность: Средняя
Задачи:
-
Создать файл с цветовыми константами (
lib/presentation/theme/app_colors.dart):// Точные цвета из мобильного приложения const Color peach = Color(0xffffc994); const Color golden = Color(0xffffea00); const Color green = Color(0xff3d5309); const Color greenAccent = Color(0xff688d11); const Color black = Color(0xff000000); const Color white = Color(0xffffffff); const Color progressBlue = Color(0xff8CCBFF); const Color menuBlue = Color(0xff99C4E9); const Color backgroundBlue = Color(0xFFf0f0f0); const Color testBlue = Color(0xffD0EAFF); const Color borderGray = Color(0xffABABAB); -
Обновить
app_theme.dart:- Изменить ColorScheme на черно-белую основу
- Светлая тема:
- primary: MaterialColor(0xFF000000, colorMap)
- surface: white
- onSurface: black
- secondary: green
- Темная тема:
- primary: MaterialColor(0xFFFFFFFF, whiteColorMap)
- surface: black
- onSurface: white
- secondary: lightBlue
-
Обновить TextTheme:
- Установить
FontWeight.w700для всех стилей текста - Сохранить Nunito шрифт
- Установить
-
Обновить компонентные темы:
- AppBarTheme: иконки с primary цветом
- CardTheme: скругление 12.0, минимальная elevation
- ButtonTheme: жирные тексты
Файлы для изменения:
- ✏️
lib/presentation/theme/app_theme.dart - ➕
lib/presentation/theme/app_colors.dart
Этап 2: Адаптация карточек паков (PackCard)
Приоритет: 🔴 Высокий
Время: 3-4 часа
Сложность: Высокая
Задачи:
-
Изменить компоновку PackCard на горизонтальную:
- Изменить Column на Row
- Левая часть: квадратное изображение (height = width)
- Правая часть: информация о паке
-
Обновить стиль карточки:
- Удалить elevation из Card
- Добавить Border.all с цветом пака
- Сделать фон прозрачным или белым
- Скругление: 12.0
-
Добавить парсинг цвета пака:
- Использовать
pack.color?.asColorиз мобильного приложения - Создать extension для ColorDto
- Использовать
-
Обновить информацию в карточке:
- Жирный большой заголовок
- Subtitle светлее
- Иконка карточек с количеством
- Индикатор загрузки (опционально)
-
Адаптировать высоту:
- Фиксированная высота ~110-120px
- Квадратное изображение слева
Файлы для изменения:
- ✏️
lib/presentation/widgets/pack_card.dart - ➕
lib/utils/color_extension.dart(для парсинга цветов)
Визуальный пример:
┌─────────────────────────────────────────┐
│ ┌─────┐ │
│ │ │ Pack Title (bold, large) │
│ │ IMG │ Pack Subtitle (light) │
│ │ │ 🃏 42 cards │
│ └─────┘ │
└─────────────────────────────────────────┘
Этап 3: Адаптация HomePage (список паков)
Приоритет: 🟡 Средний
Время: 2 часа
Сложность: Низкая
Задачи:
-
Изменить layout с GridView на ListView:
- Вертикальный список карточек
- Padding: 8.0
-
Обновить RefreshIndicator:
- Кастомные цвета (использовать цвет первого пака или primary)
- displacement: 20
-
Обновить Loading состояние:
- Опционально: добавить изображение (cerdo/luna) вместо shimmer
- Или оставить shimmer, но адаптировать под горизонтальную карточку
-
Обновить Search bar:
- Сделать более минималистичным
- Убрать излишнюю стилизацию
Файлы для изменения:
- ✏️
lib/presentation/pages/home/home_page.dart - ✏️
lib/presentation/widgets/loading/pack_card_shimmer.dart
Этап 4: Адаптация GamesPage и GameCard
Приоритет: 🟡 Средний
Время: 2-3 часа
Сложность: Средняя
Задачи:
-
Обновить GameCard под стиль мобильного:
- Возможно также сделать горизонтальную компоновку
- Или оставить вертикальную, но обновить стили
- Добавить границы с цветом игры
- Использовать кастомные цвета
-
Обновить GamesPage:
- Изменить layout (Grid или List в зависимости от выбора)
- Обновить RefreshIndicator
- Адаптировать Loading состояния
-
Обновить shimmer для GameCard
Файлы для изменения:
- ✏️
lib/presentation/widgets/game_card.dart - ✏️
lib/presentation/pages/games/games_page.dart - ✏️
lib/presentation/widgets/loading/game_card_shimmer.dart
Этап 5: Адаптация ProfilePage
Приоритет: 🟢 Низкий
Время: 3-4 часа
Сложность: Средняя
Задачи:
-
Упростить дизайн профиля:
- Убрать или упростить статистические карточки
- Добавить UserStatistics компонент (или его аналог)
- Использовать SimpleTile стиль с Divider'ами
-
Обновить статистику:
- Показывать список изученных слов с прогрессом
- Использовать HorizontalProgressWidget
- Золотой цвет для выученных слов
-
Обновить Settings секцию:
- Более простой стиль с dividers
- Минималистичные иконки
-
Обновить logout кнопку:
- Более простой стиль
Файлы для изменения:
- ✏️
lib/presentation/pages/profile/profile_page.dart - ✏️
lib/presentation/widgets/stats_card.dart(упростить или удалить) - ➕
lib/presentation/widgets/simple_tile.dart(создать) - ➕
lib/presentation/widgets/horizontal_progress.dart(создать)
Этап 6: Адаптация PackDetailsPage
Приоритет: 🟢 Низкий
Время: 2 часа
Сложность: Низкая
Задачи:
-
Упростить дизайн деталей пака:
- Убрать излишнюю стилизацию
- Использовать границы вместо elevation
- Адаптировать под минималистичный стиль
-
Обновить список карточек:
- Более простой стиль ListTile
- Границы вместо карточек
Файлы для изменения:
- ✏️
lib/presentation/pages/pack_details/pack_details_page.dart
Этап 7: Адаптация общих компонентов
Приоритет: 🟡 Средний
Время: 2-3 часа
Сложность: Низкая
Задачи:
-
Обновить MainShell (нижняя навигация):
- Адаптировать стили под новую тему
- Проверить цвета иконок
-
Обновить AuthPage:
- Упростить дизайн кнопок
- Использовать новую цветовую схему
-
Обновить ErrorView и LoadingView:
- Адаптировать под новую тему
- Опционально: добавить кастомные изображения для ошибок
-
Создать общие утилиты:
- ColorExtension для парсинга ColorDto
- Дополнительные helper'ы
Файлы для изменения:
- ✏️
lib/presentation/widgets/main_shell.dart - ✏️
lib/presentation/pages/auth/auth_page.dart - ✏️
lib/presentation/widgets/error_view.dart - ✏️
lib/presentation/widgets/loading_view.dart - ➕
lib/utils/color_extension.dart
Этап 8: Адаптация для responsive дизайна
Приоритет: 🟢 Низкий
Время: 2-3 часа
Сложность: Средняя
Задачи:
-
Обновить Responsive утилиты:
- Адаптировать под новые размеры карточек
- Убедиться, что горизонтальные карточки хорошо смотрятся на разных экранах
-
Тестирование на разных разрешениях:
- Mobile (узкий экран)
- Tablet (средний экран)
- Desktop (широкий экран)
-
Адаптация максимальной ширины контента:
- Убедиться, что карточки не слишком широкие на больших экранах
Файлы для изменения:
- ✏️
lib/utils/responsive.dart - ✏️ Все страницы с использованием responsive логики
Этап 9: Финальная полировка и тестирование
Приоритет: 🔴 Высокий
Время: 2-3 часа
Сложность: Низкая
Задачи:
-
Проверка консистентности:
- Все цвета соответствуют мобильному приложению
- Все шрифты жирные где нужно
- Все границы используют правильные цвета
-
Темная тема:
- Проверить, что темная тема работает корректно
- Адаптировать все компоненты под темную тему
-
Accessibility:
- Проверить контрастность цветов
- Обновить Semantics labels если нужно
-
Тестирование:
- Визуальное тестирование всех экранов
- Проверка анимаций и переходов
- Unit тесты для новых компонентов
-
Документация:
- Обновить README с информацией о дизайне
- Создать DESIGN_GUIDE.md с примерами компонентов
Файлы для проверки:
- Все обновленные файлы
- Тесты
📁 Структура новых файлов
lib/
├── presentation/
│ ├── theme/
│ │ ├── app_theme.dart ✏️ Обновить
│ │ └── app_colors.dart ➕ Создать
│ ├── widgets/
│ │ ├── pack_card.dart ✏️ Полностью переделать
│ │ ├── game_card.dart ✏️ Обновить
│ │ ├── simple_tile.dart ➕ Создать
│ │ ├── horizontal_progress.dart ➕ Создать
│ │ └── loading/
│ │ ├── pack_card_shimmer.dart ✏️ Обновить под горизонтальную карточку
│ │ └── game_card_shimmer.dart ✏️ Обновить
│ └── pages/
│ ├── home/
│ │ └── home_page.dart ✏️ Изменить layout
│ ├── games/
│ │ └── games_page.dart ✏️ Обновить стили
│ ├── profile/
│ │ └── profile_page.dart ✏️ Упростить дизайн
│ └── pack_details/
│ └── pack_details_page.dart ✏️ Упростить
├── utils/
│ └── color_extension.dart ➕ Создать
└── assets/ ➕ Опционально
└── images/
├── cerdo.webp ➕ Копировать из мобильного
└── luna.webp ➕ Копировать из мобильного
🎨 Ключевые изменения дизайна
До и После:
1. Цветовая схема
До: Material 3 синяя палитра
После: Черно-белая основа с акцентными цветами (golden, green, peach)
2. Карточки паков
До: Вертикальные карточки с изображением 16:9 сверху
После: Горизонтальные карточки с квадратным изображением слева и границей цвета пака
3. Типографика
До: Стандартные веса шрифтов Material
После: Все тексты жирные (FontWeight.w700)
4. UI компоненты
До: Material 3 elevation, стандартные карточки
После: Минималистичный дизайн с границами, без elevation
5. Профиль
До: Продвинутая статистика с графиками и карточками
После: Простой список слов с прогрессом, SimpleTile компоненты
⚠️ Важные замечания
-
Сохранить функциональность:
- Все существующие функции должны работать
- Hero анимации сохранить
- RefreshIndicator сохранить
-
Responsive дизайн:
- Убедиться, что горизонтальные карточки хорошо смотрятся на всех экранах
- На очень узких экранах возможно нужно адаптировать размеры
-
Тестирование:
- Обновить тесты для новых компонентов
- Проверить, что старые тесты проходят
-
Темная тема:
- Особое внимание к темной теме
- Проверить контрастность
-
Assets:
- Возможно понадобится скопировать иконки из мобильного приложения
- Добавить cerdo.webp и luna.webp для loading состояний
📊 Приоритизация этапов
Критический путь (начать с этого):
- Этап 1: Цветовая схема и темизация
- Этап 2: Адаптация PackCard (самое заметное изменение)
- Этап 3: Адаптация HomePage
Средний приоритет:
- Этап 4: GamesPage и GameCard
- Этап 7: Общие компоненты
- Этап 5: ProfilePage
Низкий приоритет (можно отложить):
- Этап 6: PackDetailsPage
- Этап 8: Responsive адаптация
- Этап 9: Финальная полировка
🚀 Порядок выполнения
День 1 (4-5 часов):
- Этап 1: Цветовая схема (2-3 часа)
- Этап 2: PackCard начать (2 часа)
День 2 (4-5 часов):
- Этап 2: PackCard завершить (2 часа)
- Этап 3: HomePage (2 часа)
- Тестирование (1 час)
День 3 (4-5 часов):
- Этап 4: GamesPage (2-3 часа)
- Этап 7: Общие компоненты (2 часа)
День 4 (3-4 часа):
- Этап 5: ProfilePage (3 часа)
- Этап 6: PackDetailsPage (1 час)
День 5 (2-3 часа):
- Этап 8: Responsive (2 часа)
- Этап 9: Финальная полировка (1 час)
Общее время: 17-22 часа работы
📝 Чек-лист выполнения
Этап 1: Цветовая схема
- Создан app_colors.dart с константами
- Обновлен app_theme.dart (светлая тема)
- Обновлен app_theme.dart (темная тема)
- Все тексты жирные (FontWeight.w700)
- Проверено на обоих темах
Этап 2: PackCard
- Изменена компоновка на горизонтальную
- Добавлена граница с цветом пака
- Создан ColorExtension для парсинга
- Обновлена информация в карточке
- Hero анимация работает
Этап 3: HomePage
- Изменен GridView на ListView
- Обновлен RefreshIndicator
- Обновлен PackCardShimmer
- Проверена прокрутка и загрузка
Этап 4: GamesPage
- Обновлен GameCard
- Обновлен GamesPage layout
- Обновлен GameCardShimmer
- Проверена функциональность
Этап 5: ProfilePage
- Упрощен дизайн
- Создан SimpleTile компонент
- Создан HorizontalProgress (опционально)
- Обновлена статистика
Этап 6: PackDetailsPage
- Упрощен дизайн
- Обновлен список карточек
- Проверена функциональность
Этап 7: Общие компоненты
- Обновлен MainShell
- Обновлен AuthPage
- Обновлены ErrorView/LoadingView
- Созданы утилиты
Этап 8: Responsive
- Проверено на mobile
- Проверено на tablet
- Проверено на desktop
- Адаптированы размеры
Этап 9: Финальная полировка
- Проверена консистентность
- Проверена темная тема
- Проверена accessibility
- Все тесты проходят
- Обновлена документация
🎯 Ожидаемый результат
После выполнения всех этапов веб-приложение mnemo_cards_web_v2 будет визуально похоже на мобильное приложение mnemo_cards:
- ✅ Идентичная цветовая схема (черно-белая с акцентами)
- ✅ Жирные шрифты Nunito
- ✅ Горизонтальные карточки паков с границами
- ✅ Минималистичный дизайн без лишних elevation
- ✅ Упрощенный профиль со статистикой
- ✅ Консистентный UI на всех экранах
- ✅ Работающая темная тема
- ✅ Сохраненная функциональность (авторизация, навигация, загрузка данных)
Автор плана: AI Assistant
Дата: 19 октября 2025
Версия: 1.0