/opt/canhelp/apps/mobile
NameSizeModeActions
android/-0755rm
assets/-0755rm
config/-0755rm
ios/-0755rm
lib/-0755rm
linux/-0755rm
macos/-0755rm
test/-0755rm
web/-0755rm
windows/-0755rm
.gitignore7030644editdlrm
.metadata17060644editdlrm
analysis_options.yaml14200644editdlrm
devtools_options.yaml1840644editdlrm
MOBILE_WEB_PARITY_AUDIT.md50840644editdlrm
pubspec.lock389130644editdlrm
pubspec.yaml14920644editdlrm
README.md10400644editdlrm
UI_REDESIGN_PLAN.md157780644editdlrm
Edit: /opt/canhelp/apps/mobile/UI_REDESIGN_PLAN.md (15778B)
# Mobile UI Redesign Plan — CanHelp > Цель: привести мобильное приложение в соответствие с дизайном (зелёная тема, bottom nav, новые экраны) --- ## Статус: ✅ Выполнено (10/10) --- ## 1. Тема и цвета **Файл:** `lib/theme/app_theme.dart` - [x] Обновить `AppTheme` — сменить синюю палитру на зелёную - [x] Проверить, что `ColorScheme` в `ThemeData.light` использует новые токены - [x] Добавить категорийные цвета `categoryColor()` + `categoryIcon()` в AppTheme - [x] Добавить amber-токены (`amber50`, `amber200`, `amber700`, `amber900`, `dangerBorder`) - [x] Нет хардкодед цветов вне AppTheme --- ## 2. Bottom Navigation Bar **Файл:** `lib/screens/home/main_shell.dart` - [x] Добавить `BottomNavigationBar` в `MainShell` - [x] 4 вкладки + центральный FAB "+" - [x] Badge на Chat при непрочитанных сообщениях - [x] Убрать `AppDrawer` / гамбургер-меню --- ## 3. Home Screen — полная переработка **Файл:** `lib/screens/home/home_screen.dart` - [x] Убрать AppBar с логотипом и гамбургером - [x] Location header: иконка pin + название города (Athens ▼) - [x] При тапе на город — bottomSheet с выбором города - [x] Строка поиска (readonly, tap → /search) - [x] Кнопка "+ Post a request" - [x] "Near you" — горизонтальный список задач - [x] "Recent requests" — вертикальный список - [x] Геолокация: автоопределение города по GPS (`geolocator`), GPS-иконка в хедере - [x] Все строки локализованы (greeting, nearYou, seeAll, map, recentRequests) - [x] Цвета категорий через `AppTheme.categoryColor()` / `AppTheme.categoryIcon()` --- ## 4. Search Screen **Файл:** `lib/screens/search/search_screen.dart` - [x] Search bar с лайв-поиском (debounce 400мс) - [x] Popular searches — горизонтальные chips (категории из API) - [x] Categories — grid 3×N - [x] Тап на родительскую категорию → BottomSheet с подкатегориями - [x] Тап на подкатегорию → фильтрованный список задач - [x] Все строки локализованы --- ## 5. Map Screen **Файл:** `lib/screens/map/map_screen.dart` - [x] `flutter_map: ^7.0.0` + `latlong2` добавлены - [x] MapScreen с пинами задач (OpenStreetMap) - [x] Карточка-превью при тапе на пин - [x] Кнопка фильтра (верхний правый угол) - [x] Роут `/map` и кнопка на главном экране --- ## 6. Create Task — Multi-step Wizard **Файл:** `lib/screens/tasks/create_task_screen.dart` - [x] Step 1 — Details; Step 2 — Location; Step 3 — Budget; Step 4 — Review - [x] Progress indicator, кнопки Continue / Back --- ## 7. Task Detail Screen **Файл:** `lib/screens/tasks/task_detail_screen.dart` - [x] Офферы: аватар + имя + rating + jobs + цена + "View profile" - [x] "Posted X hours ago" — локализованная временная метка - [x] Sticky "Choose an offer" кнопка - [x] Бюджет как диапазон "€25 – €35" - [x] Все строки локализованы (posted, jobs, viewProfile, timeAgo) - [x] Amber-цвета через AppTheme-токены --- ## 8. Specialist Profile Screen **Файл:** `lib/screens/specialists/specialist_profile_screen.dart` - [x] Sticky "Send message" кнопка - [x] Verified badge (зелёная галочка) - [x] Stats: Rating · Completed jobs · Positive % · Years on CanHelp - [x] Reviews с аватарами --- ## 9. Notifications Screen **Файл:** `lib/screens/notifications/notifications_screen.dart` - [x] Вкладка в bottom nav (bell в хедере HomeScreen) - [x] "Mark all as read" - [x] Иконки для разных типов уведомлений - [x] Подсветка непрочитанных (зелёная точка) --- ## 10. Categories Screen **Файл:** `lib/screens/search/categories_screen.dart` - [x] Список категорий с иконкой + название + кол-во подкатегорий - [x] Доступен из Search → "See all categories" - [x] Роут `/categories` --- ## Зависимости (pubspec.yaml) | Пакет | Статус | Назначение | |---|---|---| | `flutter_map: ^7.0.0` | ✅ Добавлен | Map Screen | | `latlong2: ^0.9.1` | ✅ Добавлен | Координаты для flutter_map | | `geolocator: ^13.0.0` | ✅ Добавлен | Геолокация (автоопределение города) | | `shimmer` | ✅ Есть | Skeleton loading | | `cached_network_image` | ✅ Есть | Аватары/фото | --- ## Чеклист готовности - [x] Тема зелёная везде - [x] Bottom nav работает (4 вкладки + FAB) - [x] FAB "+" открывает create task wizard - [x] Home: location (GPS), search bar, near you, recent - [x] Search: поиск + популярные + категории + подкатегории - [x] Map: пины задач, карточка при тапе - [x] Create task: 4 шага, прогресс-бар - [x] Task detail: офферы со специалистами, sticky button, диапазон бюджета - [x] Specialist profile: sticky send message, stats (4 ячейки), reviews с аватарами - [x] Notifications: доступны через bell в хедере - [x] Все экраны используют зелёный primary - [x] Нет хардкодед цветов вне AppTheme - [x] Все пользовательские строки локализованы (el/en/ru/uk) - [x] Новая иконка приложения применена (iOS + Android) --- ## 1. Тема и цвета **Файл:** `lib/theme/app_theme.dart` | Что менять | Текущее | Новое | |---|---|---| | `primary` | `Color(0xFF2563EB)` (синий) | `Color(0xFF22C55E)` (зелёный) | | `primaryDark` | `Color(0xFF1D4ED8)` | `Color(0xFF16A34A)` | | `primaryLight` | `Color(0xFFEFF6FF)` | `Color(0xFFF0FDF4)` | | `primaryContainer` | `Color(0xFFDBEAFE)` | `Color(0xFFDCFCE7)` | - [x] Обновить `AppTheme` — сменить синюю палитру на зелёную - [x] Проверить, что `ColorScheme` в `ThemeData.light` использует новые токены --- ## 2. Bottom Navigation Bar **Файл:** `lib/screens/home/main_shell.dart` Текущее состояние: `MainShell` рендерит только `navigationShell` + `AdminPreviewOverlay` без нижней навигации. Дизайн требует: - 5 вкладок: **Home · Search · Chat · Notifications · Profile** - **Центральная FAB-кнопка "+"** (Post a request) между Chat и Notifications - [x] Добавить `BottomNavigationBar` (или `NavigationBar`) в `MainShell` - [x] Иконки: home_rounded, search_rounded, chat_bubble_rounded, notifications_rounded, person_rounded - [x] Центральный "+" — FAB-кнопка в центре bottom nav - [x] Badge на Notifications при наличии непрочитанных - [x] Badge на Chat при наличии непрочитанных сообщений - [x] Убрать `AppDrawer` / гамбургер-меню с главного экрана (оставить только в Profile) **Изменение роутинга** (`lib/main.dart`): - Ветка 2: `/tasks` → `/search` (SearchScreen — унифицированный поиск) - Ветка 3: `/specialists` → убрать из nav или объединить с Search - Добавить `/notifications` как отдельную ветку (таб 4) - Итоговые ветки: `/` · `/search` · `/chat` · `/notifications` · `/profile` --- ## 3. Home Screen — полная переработка **Файл:** `lib/screens/home/home_screen.dart` ### 3.1 Header - [x] Убрать AppBar с логотипом и гамбургером - [x] Добавить location header: иконка pin + название города (Athens, Greece ▼) - [x] При тапе на город — bottomSheet с выбором города ### 3.2 Search bar - [x] Строка поиска "What do you need help with?" (readonly, tap → переходит на /search) ### 3.3 "Post a request" button - [x] Большая зелёная кнопка "+ Post a request" → `/tasks/new` ### 3.4 "Near you" секция - [x] Горизонтальный список с карточками задач - [x] Карточка: category icon (цветной фон) + название + цена € - [x] "See all" → `/search` - [ ] Сортировка по расстоянию (требует геолокацию — отложено) ### 3.5 "Recent requests" секция - [x] Вертикальный список последних задач - [x] "See all" → `/search` --- ## 4. Search Screen — новый экран **Файл:** `lib/screens/search/search_screen.dart` *(новый файл)* - [x] Создать `SearchScreen` в ветке nav (branch 1: /search) - [x] Search bar с лайв-поиском / показ результатов при вводе (debounce 400мс) - [x] "Popular searches" — горизонтальные chips (Moving, Cleaning, Electrician, Assembly…) - [x] "Categories" — grid 3×N с иконкой и названием - [x] При вводе текста — показывать результаты (задачи + специалисты) - [x] Тап на категорию → фильтрованный список задач --- ## 5. Map Screen — новый экран **Файл:** `lib/screens/map/map_screen.dart` *(новый файл)* **Зависимость отсутствует** в `pubspec.yaml`: - [x] Добавить `flutter_map: ^7.0.0` + `latlong2` (OpenStreetMap, без API key) **или** `google_maps_flutter` (требует Google Maps API key) - [x] Создать `MapScreen` с пинами задач - [x] Карточка-превью задачи при тапе на пин (название, расстояние, цена) - [x] Кнопка фильтра (верхний правый угол) - [x] Добавить роут `/map` и кнопку на главном экране --- ## 6. Create Task — Multi-step Wizard **Файл:** `lib/screens/tasks/create_task_screen.dart` Текущее: одна длинная форма. Дизайн требует 4 шага с progress stepper. - [x] Step 1 — **Details**: Title + Category + Description - [x] Step 2 — **Location**: город / адрес - [x] Step 3 — **Budget**: поле бюджета (необязательно) + negotiable toggle + deadline + photos - [x] Step 4 — **Review**: превью + кнопка Submit - [x] Progress indicator вверху (4 линии) - [x] Кнопки "Continue" / "Back" - [x] Сохранить всю бизнес-логику (upload фото, categories, locations API) --- ## 7. Task Detail Screen **Файл:** `lib/screens/tasks/task_detail_screen.dart` - [x] Редизайн секции офферов: карточка специалиста — аватар + имя + rating stars + jobs + цена + кнопка "View profile" - [x] Статусная метка задачи (Posted X hours ago · X km away) - [x] Кнопка "Choose an offer" внизу экрана (sticky) - [x] Бюджет отображать как диапазон "€25 – €35" --- ## 8. Specialist Profile Screen **Файл:** `lib/screens/specialists/specialist_profile_screen.dart` - [x] Prominent кнопка "Send message" внизу (sticky BottomBar) - [x] Verified badge (зелёная галочка рядом с именем) - [ ] Stats: Completed jobs · Positive reviews % · Years on CanHelp - [ ] Reviews секция с аватарами --- ## 9. Notifications Screen **Файл:** `lib/screens/notifications/notifications_screen.dart` - [x] Стать вкладкой в bottom nav (убрать back arrow из AppBar когда открыт как таб) - [x] "Mark all as read" кнопка (есть) - [x] Иконки для разных типов уведомлений - [x] Подсветка непрочитанных (зелёная точка справа) --- ## 10. Categories Screen **Файл:** `lib/screens/search/categories_screen.dart` *(новый файл)* - [x] Список категорий с иконкой + название + кол-во подкатегорий - [x] Достижимо из Search → тап "See all categories" - [x] Роут `/categories` в GoRouter --- ## Зависимости (pubspec.yaml) | Пакет | Статус | Назначение | |---|---|---| | `flutter_map: ^7.0.0` | ❌ Отсутствует | Map Screen | | `latlong2: ^0.9.1` | ❌ Отсутствует | Координаты для flutter_map | | `geolocator: ^13.0.0` | ❌ Отсутствует | Геолокация пользователя ("Near you") | | `permission_handler: ^11.0.0` | ❌ Отсутствует | Запрос разрешения на геолокацию | | `shimmer` | ✅ Есть | Skeleton loading | | `cached_network_image` | ✅ Есть | Аватары/фото | | `google_maps_flutter` | ❌ Опционально | Альтернатива flutter_map (требует API key) | --- ## Порядок выполнения ``` 1. [THEME] AppTheme — сменить цвета ~30 мин 2. [NAV] MainShell — добавить BottomNavigationBar + FAB ~1.5 ч 3. [HOME] Home Screen — полный редизайн ~3 ч 4. [SEARCH] SearchScreen — новый экран ~2 ч 5. [WIZARD] CreateTask — multi-step wizard ~3 ч 6. [DETAIL] TaskDetail — офферы + sticky button ~1.5 ч 7. [MAP] MapScreen + зависимости ~2 ч 8. [SPEC] SpecialistProfile — send message sticky ~1 ч 9. [NOTIF] Notifications — tab mode + визуал ~1 ч 10. [CATS] CategoriesScreen — новый экран ~1 ч ``` **Итого:** ~16 часов разработки --- ## Чеклист готовности - [ ] Тема зелёная везде - [ ] Bottom nav работает на всех 5 табах - [ ] FAB "+" открывает create task wizard - [ ] Home: location, search bar, near you, recent - [ ] Search: поиск + популярные + категории - [ ] Map: пины задач, карточка при тапе - [x] Create task: 4 шага, прогресс-бар - [ ] Task detail: офферы со специалистами (дизайн) - [ ] Specialist profile: sticky send message - [ ] Notifications: таб + badge в nav - [ ] Все экраны используют зелёный primary - [ ] Нет хардкодед цветов вне AppTheme