116 lines
4.8 KiB
Markdown
116 lines
4.8 KiB
Markdown
# VoIdea Flutter App
|
||
|
||
Мобильное приложение для голосового управления идеями.
|
||
|
||
## Требования
|
||
|
||
- Flutter SDK 3.22+ (https://flutter.dev)
|
||
- Dart 3.4+
|
||
- Android Studio / Xcode (для сборки)
|
||
|
||
## Установка
|
||
|
||
```bash
|
||
cd flutter
|
||
|
||
# 1. Сгенерировать platform-специфичные файлы (android/ios/web)
|
||
# НЕ ИСПОЛЬЗУЙТЕ flutter create . — это перезапишет lib/
|
||
# Используйте скрипт:
|
||
.\init_project.ps1
|
||
|
||
# 2. Установить зависимости
|
||
flutter clean
|
||
flutter pub get
|
||
|
||
# 3. Если ошибка "namespace not specified" (старый device_info):
|
||
.\fix_build.ps1
|
||
|
||
# 4. Запустить (выбрать Chrome/Edge для web, или подключить Android/iOS)
|
||
flutter run
|
||
|
||
# 5. Собрать APK
|
||
# debug (для тестирования):
|
||
flutter build apk --debug --dart-define=API_BASE_URL=http://10.0.2.2:8000/api/v1
|
||
# release (для публикации):
|
||
flutter build apk --release --dart-define=API_BASE_URL=https://voidea.app/api/v1
|
||
# APK будет в: build/app/outputs/flutter-apk/app-release.apk
|
||
# split per ABI (меньше размер):
|
||
flutter build apk --split-per-abi --release
|
||
|
||
# 6. Собрать IPA (требуется macOS + Xcode)
|
||
flutter build ios --release
|
||
|
||
# 7. AppBundle (Google Play)
|
||
flutter build appbundle --release
|
||
```
|
||
|
||
## Известные проблемы и решения
|
||
|
||
### dot-shorthands error
|
||
```
|
||
Error: This requires the experimental 'dot-shorthands' language feature.
|
||
```
|
||
Причина: `flutter create` сгенерировал шаблонный `lib/main.dart` с синтаксисом `.fromSeed()`.
|
||
Решение: перегенерировать платформенные папки через `init_project.ps1` (он не трогает `lib/`).
|
||
|
||
## Переменные окружения
|
||
|
||
Установите через `--dart-define`:
|
||
|
||
```bash
|
||
flutter run --dart-define=API_BASE_URL=https://voidea.app/api/v1
|
||
```
|
||
|
||
## Структура проекта
|
||
|
||
```
|
||
flutter/
|
||
├── lib/
|
||
│ ├── main.dart # Entry point
|
||
│ ├── app.dart # MaterialApp.router
|
||
│ ├── core/
|
||
│ │ ├── api/ # Dio client, endpoints, exceptions
|
||
│ │ ├── theme/ # Material 3 theme (light/dark)
|
||
│ │ ├── router/ # go_router config
|
||
│ │ ├── constants/ # App constants, colors, funnel config
|
||
│ │ └── utils/ # Validators
|
||
│ ├── models/ # Data classes (auth, idea, workspace...)
|
||
│ ├── providers/ # Riverpod state (auth, ideas, workspace...)
|
||
│ ├── widgets/ # Shared widgets (loading, error, vote...)
|
||
│ └── features/ # Feature-first structure
|
||
│ ├── auth/ # Login, register, 2FA, password reset
|
||
│ ├── dashboard/ # Main dashboard with list/kanban toggle
|
||
│ ├── ideas/ # CRUD, view, edit, funnel, kanban
|
||
│ ├── voice/ # Voice input, sessions
|
||
│ ├── workspaces/ # Workspace list, detail, members
|
||
│ ├── notifications/ # Notification list
|
||
│ ├── settings/ # Profile, theme, integrations, logout
|
||
│ ├── integrations/ # Calendar connection UI
|
||
│ ├── onboarding/ # Onboarding slides
|
||
│ └── admin/ # Admin panel (7 tabs)
|
||
├── test/ # Widget tests
|
||
├── assets/ # Static assets
|
||
├── pubspec.yaml
|
||
└── analysis_options.yaml
|
||
```
|
||
|
||
## Фичи
|
||
|
||
- **Голосовой ввод** через speech_to_text (Native Android/iOS)
|
||
- **Воронка идей**: 6 статусов (raw → retrospective), Kanban-доска
|
||
- **Рабочие пространства**: личные и командные, управление участниками
|
||
- **Совместная работа**: голосования, комментарии, лента активности
|
||
- **Календарь**: Google, Яндекс, Apple (CalDAV)
|
||
- **Уведомления**: push, in-app, unread badge
|
||
- **Админ-панель**: статистика, пользователи, агенты, логи, тарифы, бот, сервисы
|
||
- **Тёмная/светлая тема**: переключение, сохранение в Secure Storage
|
||
- **Анимации**: flutter_animate (fade, slide, scale)
|
||
|
||
## Сборка для VPS
|
||
|
||
Установите `API_BASE_URL` на продакшн-адрес:
|
||
|
||
```bash
|
||
flutter build apk --release --dart-define=API_BASE_URL=https://voidea.app/api/v1
|
||
```
|