mnemo_cards/mnemo_cards_web_v2/DESIGN_ADAPTATION_PLAN.md

602 lines
23 KiB
Markdown
Raw Normal View History

2025-11-10 23:55:41 +00:00
# План адаптации дизайна веб-приложения mnemo_cards_web_v2
**Цель**: Адаптировать дизайн веб-приложения `mnemo_cards_web_v2`, чтобы он был визуально похож на мобильное приложение `mnemo_cards`.
**Дата создания**: 19 октября 2025
**Статус**: План
---
## 📊 Анализ текущего состояния
### Мобильное приложение (mnemo_cards)
**Ключевые особенности дизайна:**
1. **Цветовая схема**:
- Черно-белая основа (black/white primary)
- Кастомные акцентные цвета: peach, golden, green
- Специальные цвета: progressBlue, menuBlue, backgroundBlue, borderGray
- Использует MaterialColor для создания палитр
2. **Типографика**:
- Шрифт: `Nunito`
- Все тексты жирные: `FontWeight.w700` для всех стилей
- Использует flutter_screenutil для адаптивных размеров
3. **Карточки паков**:
- Горизонтальная компоновка (Row)
- Изображение слева (квадратное, равно высоте карточки)
- Информация справа (title, subtitle, количество карточек)
- Граница с цветом пака (`border: Border.all(color: pack.color)`)
- Скругленные углы (12.0)
- Прозрачный фон карточки
- Высота: ~110.h
4. **UI компоненты**:
- RefreshIndicator с кастомным цветом
- Простые границы и минималистичный дизайн
- Иконки из webp файлов
- Loading состояния с изображениями (cerdo/luna)
5. **Профиль**:
- UserStatistics виджет со списком слов
- Прогресс-бары для каждого слова
- SimpleTile компоненты с Divider'ами
- Золотой цвет для выученных слов
### Веб-приложение (mnemo_cards_web_v2)
**Текущий дизайн:**
1. **Цветовая схема**:
- Material 3 с синим seedColor
- Стандартная палитра Material
- Отсутствуют кастомные акцентные цвета
2. **Типографика**:
- Шрифт: `Nunito`
- Стандартные весы шрифтов Material
3. **Карточки паков**:
- Вертикальная компоновка (Column)
- Изображение сверху (AspectRatio 16:9)
- Информация снизу
- Стандартные Material Card с elevation
- Hero анимация ✅
4. **UI компоненты**:
- Material 3 компоненты
- Shimmer loading states ✅
- Современный responsive дизайн ✅
5. **Профиль**:
- Продвинутый дизайн со статистикой
- StatsCard компоненты
- SimpleChart для графиков
- Settings card с темной темой
---
## 🎯 Этапы адаптации
### Этап 1: Обновление цветовой схемы и темизации
**Приоритет**: 🔴 Высокий
**Время**: 2-3 часа
**Сложность**: Средняя
#### Задачи:
1. **Создать файл с цветовыми константами** (`lib/presentation/theme/app_colors.dart`):
```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);
```
2. **Обновить `app_theme.dart`**:
- Изменить ColorScheme на черно-белую основу
- Светлая тема:
- primary: MaterialColor(0xFF000000, colorMap)
- surface: white
- onSurface: black
- secondary: green
- Темная тема:
- primary: MaterialColor(0xFFFFFFFF, whiteColorMap)
- surface: black
- onSurface: white
- secondary: lightBlue
3. **Обновить TextTheme**:
- Установить `FontWeight.w700` для всех стилей текста
- Сохранить Nunito шрифт
4. **Обновить компонентные темы**:
- AppBarTheme: иконки с primary цветом
- CardTheme: скругление 12.0, минимальная elevation
- ButtonTheme: жирные тексты
**Файлы для изменения**:
- ✏️ `lib/presentation/theme/app_theme.dart`
- `lib/presentation/theme/app_colors.dart`
---
### Этап 2: Адаптация карточек паков (PackCard)
**Приоритет**: 🔴 Высокий
**Время**: 3-4 часа
**Сложность**: Высокая
#### Задачи:
1. **Изменить компоновку PackCard на горизонтальную**:
- Изменить Column на Row
- Левая часть: квадратное изображение (height = width)
- Правая часть: информация о паке
2. **Обновить стиль карточки**:
- Удалить elevation из Card
- Добавить Border.all с цветом пака
- Сделать фон прозрачным или белым
- Скругление: 12.0
3. **Добавить парсинг цвета пака**:
- Использовать `pack.color?.asColor` из мобильного приложения
- Создать extension для ColorDto
4. **Обновить информацию в карточке**:
- Жирный большой заголовок
- Subtitle светлее
- Иконка карточек с количеством
- Индикатор загрузки (опционально)
5. **Адаптировать высоту**:
- Фиксированная высота ~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 часа
**Сложность**: Низкая
#### Задачи:
1. **Изменить layout с GridView на ListView**:
- Вертикальный список карточек
- Padding: 8.0
2. **Обновить RefreshIndicator**:
- Кастомные цвета (использовать цвет первого пака или primary)
- displacement: 20
3. **Обновить Loading состояние**:
- Опционально: добавить изображение (cerdo/luna) вместо shimmer
- Или оставить shimmer, но адаптировать под горизонтальную карточку
4. **Обновить Search bar**:
- Сделать более минималистичным
- Убрать излишнюю стилизацию
**Файлы для изменения**:
- ✏️ `lib/presentation/pages/home/home_page.dart`
- ✏️ `lib/presentation/widgets/loading/pack_card_shimmer.dart`
---
### Этап 4: Адаптация GamesPage и GameCard
**Приоритет**: 🟡 Средний
**Время**: 2-3 часа
**Сложность**: Средняя
#### Задачи:
1. **Обновить GameCard под стиль мобильного**:
- Возможно также сделать горизонтальную компоновку
- Или оставить вертикальную, но обновить стили
- Добавить границы с цветом игры
- Использовать кастомные цвета
2. **Обновить GamesPage**:
- Изменить layout (Grid или List в зависимости от выбора)
- Обновить RefreshIndicator
- Адаптировать Loading состояния
3. **Обновить 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 часа
**Сложность**: Средняя
#### Задачи:
1. **Упростить дизайн профиля**:
- Убрать или упростить статистические карточки
- Добавить UserStatistics компонент (или его аналог)
- Использовать SimpleTile стиль с Divider'ами
2. **Обновить статистику**:
- Показывать список изученных слов с прогрессом
- Использовать HorizontalProgressWidget
- Золотой цвет для выученных слов
3. **Обновить Settings секцию**:
- Более простой стиль с dividers
- Минималистичные иконки
4. **Обновить 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 часа
**Сложность**: Низкая
#### Задачи:
1. **Упростить дизайн деталей пака**:
- Убрать излишнюю стилизацию
- Использовать границы вместо elevation
- Адаптировать под минималистичный стиль
2. **Обновить список карточек**:
- Более простой стиль ListTile
- Границы вместо карточек
**Файлы для изменения**:
- ✏️ `lib/presentation/pages/pack_details/pack_details_page.dart`
---
### Этап 7: Адаптация общих компонентов
**Приоритет**: 🟡 Средний
**Время**: 2-3 часа
**Сложность**: Низкая
#### Задачи:
1. **Обновить MainShell** (нижняя навигация):
- Адаптировать стили под новую тему
- Проверить цвета иконок
2. **Обновить AuthPage**:
- Упростить дизайн кнопок
- Использовать новую цветовую схему
3. **Обновить ErrorView и LoadingView**:
- Адаптировать под новую тему
- Опционально: добавить кастомные изображения для ошибок
4. **Создать общие утилиты**:
- 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 часа
**Сложность**: Средняя
#### Задачи:
1. **Обновить Responsive утилиты**:
- Адаптировать под новые размеры карточек
- Убедиться, что горизонтальные карточки хорошо смотрятся на разных экранах
2. **Тестирование на разных разрешениях**:
- Mobile (узкий экран)
- Tablet (средний экран)
- Desktop (широкий экран)
3. **Адаптация максимальной ширины контента**:
- Убедиться, что карточки не слишком широкие на больших экранах
**Файлы для изменения**:
- ✏️ `lib/utils/responsive.dart`
- ✏️ Все страницы с использованием responsive логики
---
### Этап 9: Финальная полировка и тестирование
**Приоритет**: 🔴 Высокий
**Время**: 2-3 часа
**Сложность**: Низкая
#### Задачи:
1. **Проверка консистентности**:
- Все цвета соответствуют мобильному приложению
- Все шрифты жирные где нужно
- Все границы используют правильные цвета
2. **Темная тема**:
- Проверить, что темная тема работает корректно
- Адаптировать все компоненты под темную тему
3. **Accessibility**:
- Проверить контрастность цветов
- Обновить Semantics labels если нужно
4. **Тестирование**:
- Визуальное тестирование всех экранов
- Проверка анимаций и переходов
- Unit тесты для новых компонентов
5. **Документация**:
- Обновить 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 компоненты
---
## ⚠️ Важные замечания
1. **Сохранить функциональность**:
- Все существующие функции должны работать
- Hero анимации сохранить
- RefreshIndicator сохранить
2. **Responsive дизайн**:
- Убедиться, что горизонтальные карточки хорошо смотрятся на всех экранах
- На очень узких экранах возможно нужно адаптировать размеры
3. **Тестирование**:
- Обновить тесты для новых компонентов
- Проверить, что старые тесты проходят
4. **Темная тема**:
- Особое внимание к темной теме
- Проверить контрастность
5. **Assets**:
- Возможно понадобится скопировать иконки из мобильного приложения
- Добавить cerdo.webp и luna.webp для loading состояний
---
## 📊 Приоритизация этапов
### Критический путь (начать с этого):
1. **Этап 1**: Цветовая схема и темизация
2. **Этап 2**: Адаптация PackCard (самое заметное изменение)
3. **Этап 3**: Адаптация HomePage
### Средний приоритет:
4. **Этап 4**: GamesPage и GameCard
5. **Этап 7**: Общие компоненты
6. **Этап 5**: ProfilePage
### Низкий приоритет (можно отложить):
7. **Этап 6**: PackDetailsPage
8. **Этап 8**: Responsive адаптация
9. **Этап 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