forked from eatvio/eatvio_app
450 lines
15 KiB
Markdown
450 lines
15 KiB
Markdown
# Eatvio - Nutrition & Diet Management Application
|
||
|
||
## Project Overview
|
||
|
||
Eatvio is a comprehensive mobile application connecting users with nutrition consultants, providing diet planning tools, recipes, food diary tracking, and professional consultation services. The application is specifically designed for Russian-speaking users interested in nutrition and healthy eating.
|
||
|
||
### Core Features
|
||
- **Blog Posts**: Educational nutrition content and articles
|
||
- **Nutrition Consultation**: Professional consultation services with certified nutritionists
|
||
- **Recipes**: User-generated and professional recipes with nutritional information
|
||
- **Diets**: Structured diet plans with daily schedules
|
||
- **Nutrition Plans**: Long-term nutrition planning and tracking
|
||
|
||
### Target Audience
|
||
- **Primary**: Russian-speaking users interested in nutrition and healthy eating
|
||
- **Secondary**: Certified nutrition consultants offering professional services
|
||
- **Market**: Russian Federation and Russian-speaking countries
|
||
|
||
### Business Model
|
||
- Paid consultations with nutritionists
|
||
- Content marketplace for premium diets and plans
|
||
- Subscription-based features for consultants
|
||
|
||
### Platform Information
|
||
- **Mobile**: iOS and Android (including Huawei devices)
|
||
- **Language**: Russian (ru)
|
||
- **Current Version**: 1.3.0+79 (build 79)
|
||
|
||
## Prerequisites
|
||
|
||
### Flutter & Dart Versions
|
||
- **Flutter**: SDK 3.8.0+
|
||
- **Dart**: Language version >=3.8.0 <4.0.0
|
||
|
||
### Platform-Specific Requirements
|
||
|
||
#### Android
|
||
- **NDK Version**: 27.0.12077973
|
||
- **Huawei HMS Dependencies**:
|
||
- Huawei Push (6.12.0.300)
|
||
- Huawei Analytics (6.12.0.300)
|
||
- **Google Play Services**
|
||
- **ProGuard** for code obfuscation
|
||
- **Compile SDK**: Flutter default
|
||
- **Min SDK**: Flutter default
|
||
- **Target SDK**: Flutter default
|
||
|
||
#### iOS
|
||
- **APNs** for push notifications
|
||
- **Deep linking** configuration
|
||
- **Xcode** version compatible with Flutter requirements
|
||
|
||
#### General IDE Requirements
|
||
- **VS Code** with Flutter/Dart extensions
|
||
- **Android Studio** with Flutter plugin
|
||
- **Visual Studio Code** recommended for development
|
||
|
||
## Environment Configuration
|
||
|
||
### .env Setup Process
|
||
|
||
1. Copy the environment template:
|
||
```bash
|
||
cp env.example .env
|
||
```
|
||
|
||
2. Edit the `.env` file with your configuration values
|
||
|
||
### Required Environment Variables
|
||
|
||
#### API URLs
|
||
- `BASE_URL` - основной URL API (по умолчанию: https://eatvio.ru)
|
||
- `DEV_BASE_URL` - URL API для разработки (по умолчанию: https://dev2.eatvio.com)
|
||
|
||
#### Sentry Configuration
|
||
- `SENTRY_DSN` - DSN для Sentry мониторинга
|
||
|
||
#### Firebase Configuration
|
||
- `FIREBASE_PROJECT_ID` - ID проекта Firebase
|
||
- `FIREBASE_DATABASE_URL` - URL базы данных Firebase
|
||
- `FIREBASE_STORAGE_BUCKET` - bucket для хранения файлов
|
||
- `FIREBASE_MESSAGING_SENDER_ID` - ID отправителя сообщений
|
||
|
||
#### Firebase Android Configuration
|
||
- `FIREBASE_ANDROID_API_KEY` - API ключ для Android
|
||
- `FIREBASE_ANDROID_APP_ID` - ID приложения для Android
|
||
|
||
#### Firebase iOS Configuration
|
||
- `FIREBASE_IOS_API_KEY` - API ключ для iOS
|
||
- `FIREBASE_IOS_APP_ID` - ID приложения для iOS
|
||
- `FIREBASE_IOS_BUNDLE_ID` - Bundle ID для iOS
|
||
|
||
#### App Store URLs
|
||
- `APP_STORE_URL` - URL App Store
|
||
- `RUSTORE_URL` - URL RuStore
|
||
|
||
#### Support URLs
|
||
- `TELEGRAM_SUPPORT_URL` - URL поддержки в Telegram
|
||
- `SUPPORT_EMAIL` - email для поддержки
|
||
|
||
#### Test Credentials (только для разработки)
|
||
- `TEST_EMAIL` - тестовый email
|
||
- `TEST_PASSWORD` - тестовый пароль
|
||
|
||
#### Email Validation API
|
||
- `EMAIL_VALIDATION_API_URL` - URL API для валидации email
|
||
|
||
#### Connection Check URLs
|
||
- `GOOGLE_CHECK_URL` - URL для проверки соединения (Google)
|
||
- `YANDEX_CHECK_URL` - URL для проверки соединения (Yandex)
|
||
|
||
#### VK ID Configuration
|
||
- `VK_CLIENT_ID` - ID приложения VK (числовой)
|
||
- **Примечание**: VK_CLIENT_ID - это числовой "ID приложения" из консоли VK ID, НЕ "Защищённый ключ" или "Сервисный ключ доступа"
|
||
|
||
#### Yandex ID Configuration
|
||
- `YANDEX_CLIENT_ID` - ID приложения Yandex OAuth
|
||
- `YANDEX_CLIENT_SECRET` - секретный ключ приложения Yandex OAuth
|
||
- `YANDEX_REDIRECT_URI` - URI для перенаправления (должен совпадать с настройками в Yandex OAuth приложении)
|
||
|
||
## Technology Stack
|
||
|
||
### Core Framework
|
||
- **Flutter**: SDK 3.8.0+
|
||
- **Dart**: Language version >=3.8.0 <4.0.0
|
||
- **Version**: 1.3.0+79 (build 79)
|
||
|
||
### State Management
|
||
- **flutter_bloc**: ^9.1.1 - BLoC pattern implementation
|
||
- **equatable**: ^2.0.7 - Value equality for state objects
|
||
|
||
### Data Management
|
||
- **freezed**: ^3.2.0 - Immutable data classes
|
||
- **freezed_annotation**: ^3.1.0 - Code generation annotations
|
||
- **json_annotation**: ^4.9.0 - JSON serialization
|
||
- **json_serializable**: ^6.10.0 - JSON code generation
|
||
|
||
### Networking
|
||
- **dio**: ^5.9.0 - HTTP client
|
||
- **retrofit**: ^4.7.1 - Type-safe REST client
|
||
- **retrofit_generator**: ^10.0.2 - Retrofit code generation
|
||
- **http**: ^1.5.0 - Additional HTTP support
|
||
- **http_parser**: ^4.1.2 - HTTP parsing utilities
|
||
|
||
### Real-time Communication
|
||
- **dart_pusher_channels**: ^1.2.3 - WebSocket support via Pusher
|
||
- **connectivity_plus**: ^6.1.5 - Network connectivity monitoring
|
||
|
||
### Navigation & Routing
|
||
- **go_router**: ^16.1.0 - Declarative routing
|
||
- Deep linking support for content
|
||
|
||
### UI Components
|
||
- **cached_network_image**: ^3.4.1 - Image caching
|
||
- **flutter_svg**: ^2.2.0 - SVG rendering
|
||
- **google_fonts**: ^6.3.0 - Mulish font family
|
||
- **carousel_slider_plus**: ^7.1.1 - Carousel widgets
|
||
- **photo_view**: ^0.15.0 - Image viewer
|
||
- **dismissible_page**: ^1.0.2 - Swipe to dismiss
|
||
- **badges**: ^3.1.2 - Notification badges
|
||
- **lottie**: ^3.3.1 - Animation support
|
||
- **flutter_portal**: ^1.1.4 - Overlay widgets
|
||
- **dotted_border**: ^3.1.0 - Dotted borders
|
||
- **flutter_rating_bar**: ^4.0.1 - Rating widgets
|
||
|
||
### Forms & Input
|
||
- **flutter_form_builder**: ^10.2.0 - Form management
|
||
- **validators**: ^3.0.0 - Input validation
|
||
- **flutter_typeahead**: ^5.2.0 - Autocomplete
|
||
- **keyboard_dismisser**: ^3.0.0 - Keyboard management
|
||
- **flutter_keyboard_visibility**: ^6.0.0 - Keyboard state
|
||
- **mask_text_input_formatter**: ^2.9.0 - Input masking
|
||
|
||
### Media & Files
|
||
- **image_picker**: ^1.2.0 - Image selection
|
||
- **flutter_image_compress**: ^2.4.0 - Image compression
|
||
- **image**: ^4.5.4 - Image manipulation
|
||
- **file_picker**: ^10.3.1 - File selection
|
||
- **audioplayers**: ^6.5.0 - Audio playback
|
||
- **qr_code_scanner_plus**: ^2.0.10+1 - QR code scanning
|
||
|
||
### Data Visualization
|
||
- **syncfusion_flutter_charts**: ^30.2.5 - Chart widgets
|
||
- **syncfusion_flutter_gauges**: ^30.2.5 - Gauge widgets
|
||
- **table_calendar**: ^3.2.0 - Calendar widget
|
||
|
||
### Storage & Persistence
|
||
- **shared_preferences**: ^2.5.3 - Local key-value storage
|
||
- **path_provider**: ^2.1.5 - File system paths
|
||
- **path**: ^1.9.1 - Path manipulation
|
||
|
||
### Firebase
|
||
- **firebase_core**: ^4.0.0 - Firebase initialization
|
||
- **firebase_messaging**: ^16.0.0 - Push notifications
|
||
|
||
### Analytics & Monitoring
|
||
- **sentry_flutter**: ^9.6.0 - Error tracking
|
||
- **appmetrica_plugin**: ^3.3.0 - Analytics (Russian market)
|
||
|
||
### Authentication
|
||
- **vk_id**: ^1.0.3 - VK social login
|
||
- **flutter_login_yandex**: ^0.0.5 - Yandex ID login
|
||
- OAuth support for OK and Mail.ru
|
||
|
||
### Utilities
|
||
- **url_launcher**: ^6.3.2 - URL handling
|
||
- **easy_debounce**: ^2.0.3 - Debouncing
|
||
- **share_plus**: ^11.1.0 - Content sharing
|
||
- **flutter_html**: ^3.0.0 - HTML rendering
|
||
- **webview_flutter**: ^4.13.0 - WebView
|
||
- **intl**: ^0.20.2 - Internationalization
|
||
- **collection**: ^1.19.1 - Collection utilities
|
||
- **uuid**: ^4.5.1 - UUID generation
|
||
- **visibility_detector**: ^0.4.0+2 - Visibility tracking
|
||
- **fluttertoast**: ^8.2.12 - Toast messages
|
||
- **version**: ^3.0.2 - Version management
|
||
- **package_info_plus**: ^8.3.1 - Package info
|
||
- **device_info_plus**: ^11.5.0 - Device information
|
||
- **permission_handler**: ^12.0.1 - Permissions
|
||
|
||
## Development Workflow
|
||
|
||
### Code Generation
|
||
- Run `flutter pub run build_runner build` for code generation
|
||
- Run `flutter pub run build_runner build --delete-conflicting-outputs` for clean generation
|
||
- Use `flutter pub run build_runner watch` for watch mode
|
||
|
||
### Environment Setup
|
||
- Configure `.env` file with all required variables
|
||
- Set up Firebase for both Android and iOS platforms
|
||
- Configure social authentication providers (VK, Yandex, etc.)
|
||
|
||
### Testing
|
||
- Unit tests with `flutter_test`
|
||
- Integration tests with `integration_test`
|
||
- Mocking with `mockito`
|
||
|
||
## Build Commands
|
||
|
||
### Development Builds
|
||
```bash
|
||
# Run on connected device
|
||
flutter run
|
||
|
||
# Run on specific Android device
|
||
flutter run -d emulator-5554
|
||
|
||
# Run on specific iOS simulator
|
||
flutter run -d iPhone\ 15
|
||
```
|
||
|
||
### Production Builds
|
||
|
||
#### Android
|
||
```bash
|
||
# Build APK (split by ABI)
|
||
flutter build apk --release --split-per-abi
|
||
|
||
# Build App Bundle
|
||
flutter build appbundle --release
|
||
|
||
# Huawei-specific build (with HMS)
|
||
flutter build apk --release --flavor production --target-platform android-arm64
|
||
```
|
||
|
||
#### iOS
|
||
```bash
|
||
# Build IPA for TestFlight
|
||
flutter build ipa --export-options-plist=ExportOptions.plist
|
||
|
||
# Build for specific device architecture
|
||
flutter build ipa --export-options-plist=ExportOptions.plist --no-codesign
|
||
```
|
||
|
||
## Optimization Techniques
|
||
|
||
### Android Build Optimization
|
||
1. **ProGuard Rules**:
|
||
- Configure rules in [`android/app/proguard-rules.pro`](android/app/proguard-rules.pro:1)
|
||
- Essential rules for Flutter:
|
||
```
|
||
-keep class io.flutter.app.** { *; }
|
||
-keep class io.flutter.plugin.** { *; }
|
||
-keep class io.flutter.util.** { *; }
|
||
-keep class io.flutter.view.** { *; }
|
||
```
|
||
|
||
2. **Resource Shrinking**:
|
||
- Enabled in `android/app/build.gradle`:
|
||
```gradle
|
||
buildTypes {
|
||
release {
|
||
shrinkResources true
|
||
minifyEnabled true
|
||
}
|
||
}
|
||
```
|
||
|
||
3. **Code Obfuscation**:
|
||
- Use `--obfuscate` flag with build commands
|
||
- Verify with `flutter build apk --release --obfuscate --split-debug-info=debug-info/`
|
||
|
||
4. **Image Compression Workflow**:
|
||
- Automatic compression via [`flutter_image_compress`](lib/features/create_diet/models/create_diet_model.dart:1)
|
||
- Configuration in image upload flows:
|
||
```dart
|
||
final compressedFile = await FlutterImageCompress.compressWithFile(
|
||
file.path,
|
||
quality: 85,
|
||
minWidth: 1024,
|
||
minHeight: 1024,
|
||
);
|
||
```
|
||
|
||
## Troubleshooting
|
||
|
||
### Common Issues
|
||
|
||
#### Missing .env Variables
|
||
- **Symptom**: Application crashes on startup with "Missing environment variable" error
|
||
- **Solution**:
|
||
1. Verify `.env` file exists in project root
|
||
2. Check [`ENV_SETUP.md`](ENV_SETUP.md) for required variables
|
||
3. Regenerate configuration with `flutter clean && flutter pub get`
|
||
|
||
#### Firebase Configuration Errors
|
||
- **Android**:
|
||
- Missing `google-services.json` in `android/app/`
|
||
- Missing `agconnect-services.json` for Huawei devices
|
||
- Verify SHA-1 fingerprints match Firebase console
|
||
- **iOS**:
|
||
- Missing `GoogleService-Info.plist` in `ios/Runner`
|
||
- Check bundle identifier matches Firebase project
|
||
|
||
#### WebSocket Connection Failures
|
||
- **Symptoms**: Chat messages not delivering, real-time updates not working
|
||
- **Solutions**:
|
||
1. Verify Pusher configuration in [`lib/core/websockets/ws_manager.dart`](lib/core/websockets/ws_manager.dart:1)
|
||
2. Check network connectivity with `connectivity_plus` package
|
||
3. Ensure proper authentication token is sent with WebSocket connection
|
||
|
||
#### Platform-Specific Build Errors
|
||
- **Huawei vs Google Services**:
|
||
- For Huawei devices, ensure `agconnect-services.json` is present
|
||
- Use `--flavor` flag to specify build variant:
|
||
```bash
|
||
flutter build apk --release --flavor hms
|
||
```
|
||
- Check for conflicting dependencies between HMS and GMS
|
||
|
||
- **iOS Code Signing Issues**:
|
||
- Verify `ExportOptions.plist` contains correct provisioning profiles
|
||
- Update signing certificates in Xcode
|
||
- Clean build folder: `flutter clean && rm -rf ios/Pods ios/Podfile.lock`
|
||
|
||
## Key Implementation Details
|
||
|
||
### Content View Tracking
|
||
- `ViewsCubit` handles visibility detection
|
||
- `VisibilityDetector` widget tracks on-screen time
|
||
- Views sent to backend when 50%+ visible for 2+ seconds
|
||
- Debounced to prevent excessive API calls
|
||
|
||
### Image Handling
|
||
- `ImagePicker` for selection
|
||
- `FlutterImageCompress` for compression
|
||
- MultiPart form data upload via Dio
|
||
- Preview via `CachedNetworkImage`
|
||
|
||
### Search Implementation
|
||
- Debounced search with 500ms delay
|
||
- Min query length: 3 characters
|
||
- Applied to: Feed, Recipes, Diets, Plans, Consultants
|
||
- Tag-based filtering for recipes
|
||
|
||
### Pagination Pattern
|
||
- Page-based pagination
|
||
- Scroll detection for next page load
|
||
- Loading state during fetch
|
||
- Meta data tracking (current page, last page)
|
||
|
||
## Security Considerations
|
||
|
||
### Authentication
|
||
- Bearer token authentication
|
||
- Secure token storage
|
||
- Automatic session management
|
||
- OAuth 2.0 for social login
|
||
|
||
### Data Protection
|
||
- HTTPS only communication
|
||
- Token encryption in storage
|
||
- Secure WebSocket connections
|
||
- Privacy policy compliance
|
||
|
||
## Key Files Reference
|
||
|
||
### Entry Point
|
||
- `lib/main.dart` - App initialization
|
||
|
||
### Core Infrastructure
|
||
- `lib/core/app_initializer.dart` - Startup sequence
|
||
- `lib/core/locator_service.dart` - DI container
|
||
- `lib/core/app_config.dart` - App configuration
|
||
- `lib/core/app_router.dart` - Routing setup
|
||
|
||
### WebSocket
|
||
- `lib/core/websockets/ws_manager.dart` - Connection management
|
||
- `lib/core/websockets/ws_service.dart` - API service
|
||
|
||
### Authentication
|
||
- `lib/features/auth/sdk/social_auth_facade.dart` - Social auth
|
||
- `lib/core/token_storage.dart` - Token persistence
|
||
- `lib/core/interceptors/token_interceptor.dart` - Auth interceptor
|
||
|
||
### Environment
|
||
- `lib/core/env_config.dart` - Environment variables
|
||
- `.env` - Environment file (not in repo)
|
||
|
||
## Key Success Metrics
|
||
|
||
- User engagement with food diary
|
||
- Consultation bookings and completion rates
|
||
- Content creation by consultants
|
||
- User retention and progress tracking
|
||
|
||
## Documentation Standards
|
||
|
||
- **Last Updated**: 2025-10-16
|
||
- All paths are relative to `/home/apoloz/dev/eatvio_app`
|
||
- Russian market focus maintained throughout documentation
|
||
- Version compatibility matrix:
|
||
| Component | Version | Notes |
|
||
|-----------|---------|-------|
|
||
| Flutter | 3.8.0+ | Required |
|
||
| Dart | 3.8.0-3.9.9 | Required |
|
||
| Android SDK | 34 | Target SDK |
|
||
| iOS Deployment | 14.0 | Minimum |
|
||
|
||
## Ubuntu Development PC Optimization
|
||
```bash
|
||
-# apt install linux-oem-24.04
|
||
-# sudo apt-get install --install-recommends linux-lowlatency-hwe-24.04
|
||
```
|
||
----
|
||
- ubuntu switch to hwe [kernel](https://canonical-kernel-docs.readthedocs-hosted.com/latest/reference/hwe-kernels/#installing-a-hwe-kernel)
|
||
----
|
||
- ubuntu instal intel iRIS gpu [drivers](https://dgpu-docs.intel.com/driver/client/overview.html#ubuntu-latest)
|
||
```
|