321 lines
9.6 KiB
Markdown
321 lines
9.6 KiB
Markdown
|
|
# ✅ Синхронизация изменений на все платформы
|
|||
|
|
|
|||
|
|
## 🎯 Главное: Изменения УЖЕ синхронизированы!
|
|||
|
|
|
|||
|
|
Все изменения, которые мы внесли, **автоматически применяются ко всем платформам**, потому что мы редактировали **Flutter код**, который является кросс-платформенным!
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📝 Что мы изменили (применится везде):
|
|||
|
|
|
|||
|
|
### 1. **Система обновлений** ✅
|
|||
|
|
**Файл:** `lib/features/app_update/widget/new_version_dialog.dart`
|
|||
|
|
|
|||
|
|
**Изменения:**
|
|||
|
|
- Android → открывает браузер (простое решение)
|
|||
|
|
- Desktop (Windows/macOS/Linux) → скачивание с прогресс-баром + автозапуск установщика
|
|||
|
|
|
|||
|
|
**Код:**
|
|||
|
|
```dart
|
|||
|
|
if (Platform.isAndroid) {
|
|||
|
|
await UriUtils.tryLaunch(Uri.parse(newVersion.url));
|
|||
|
|
if (context.mounted) context.pop();
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Desktop - загрузка с прогресс-баром
|
|||
|
|
try {
|
|||
|
|
isDownloading.value = true;
|
|||
|
|
final tempDir = await getTemporaryDirectory();
|
|||
|
|
String fileExt = '';
|
|||
|
|
if (Platform.isWindows) fileExt = '.exe';
|
|||
|
|
else if (Platform.isMacOS) fileExt = '.dmg';
|
|||
|
|
else if (Platform.isLinux) fileExt = '.AppImage';
|
|||
|
|
|
|||
|
|
final savePath = '${tempDir.path}/umbrix-${newVersion.version}$fileExt';
|
|||
|
|
await dio.download(newVersion.url, savePath, onReceiveProgress: ...);
|
|||
|
|
await OpenFile.open(savePath);
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Результат:** Windows/Linux/macOS получат красивый прогресс-бар при обновлении!
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2. **Кнопки профилей (белый дизайн)** ✅
|
|||
|
|
**Файл:** `lib/features/profile/add/add_profile_modal.dart`
|
|||
|
|
|
|||
|
|
**Изменения:**
|
|||
|
|
- Иконки: теперь белые (`Colors.white`)
|
|||
|
|
- Текст: теперь белый
|
|||
|
|
- Фон кнопок: изменён с `surface` на `primary` (цветной)
|
|||
|
|
|
|||
|
|
**Код:**
|
|||
|
|
```dart
|
|||
|
|
Icon(
|
|||
|
|
icon,
|
|||
|
|
size: size / 3,
|
|||
|
|
color: Colors.white, // Было: theme.colorScheme.primary
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
Material(
|
|||
|
|
color: theme.colorScheme.primary, // Было: surface
|
|||
|
|
...
|
|||
|
|
)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Результат:** Кнопки стали более контрастными и красивыми на всех платформах!
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3. **Страница "О программе"** ✅
|
|||
|
|
**Файл:** `lib/features/settings/about/about_page.dart`
|
|||
|
|
|
|||
|
|
**Изменения:**
|
|||
|
|
- Кнопка "Проверить обновления" скрыта на Android
|
|||
|
|
- Показывается только на Desktop платформах
|
|||
|
|
|
|||
|
|
**Код:**
|
|||
|
|
```dart
|
|||
|
|
if (PlatformUtils.isDesktop)
|
|||
|
|
FilledButton(
|
|||
|
|
onPressed: () => ref.read(appUpdateNotifierProvider.notifier).checkForUpdate(context),
|
|||
|
|
child: Text(t.about.checkForUpdateButtonTxt),
|
|||
|
|
),
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Результат:** На Android нет путаницы с обновлениями (будет Google Play)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 4. **Android-specific изменения** ✅
|
|||
|
|
**Файлы:**
|
|||
|
|
- `android/app/src/main/AndroidManifest.xml` - удалён `REQUEST_INSTALL_PACKAGES`
|
|||
|
|
- `android/app/src/main/kotlin/.../InstallHandler.kt` - удалён
|
|||
|
|
- `android/app/src/main/kotlin/.../MainActivity.kt` - удалена регистрация InstallHandler
|
|||
|
|
|
|||
|
|
**Результат:** Упрощённая Android версия без лишних разрешений
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 Как собрать для всех платформ:
|
|||
|
|
|
|||
|
|
### ✅ Android (уже собрано)
|
|||
|
|
```bash
|
|||
|
|
flutter build apk --release
|
|||
|
|
# Файл: build/app/outputs/flutter-apk/app-release.apk
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### ✅ Linux (уже собрано)
|
|||
|
|
```bash
|
|||
|
|
flutter build linux --release
|
|||
|
|
# Файлы: build/linux/x64/release/bundle/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### ⏳ Windows (.exe)
|
|||
|
|
**Требуется Windows машина или Wine:**
|
|||
|
|
```bash
|
|||
|
|
flutter build windows --release
|
|||
|
|
# Файлы: build/windows/x64/runner/Release/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Или используйте GitHub Actions / Azure Pipelines для автоматической сборки**
|
|||
|
|
|
|||
|
|
### ⏳ macOS (.dmg)
|
|||
|
|
**Требуется macOS:**
|
|||
|
|
```bash
|
|||
|
|
flutter build macos --release
|
|||
|
|
# Файлы: build/macos/Build/Products/Release/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📦 Текущее состояние:
|
|||
|
|
|
|||
|
|
| Платформа | Статус | Файл | Размер |
|
|||
|
|
|-----------|--------|------|--------|
|
|||
|
|
| Android | ✅ Собрано | `app-release.apk` | ~50 MB |
|
|||
|
|
| Linux | ✅ Собрано | `bundle/hiddify` | ~1.5 MB + libs |
|
|||
|
|
| Windows | ⏳ Требует Windows | `.exe` | - |
|
|||
|
|
| macOS | ⏳ Требует macOS | `.dmg` | - |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 Что работает на всех платформах:
|
|||
|
|
|
|||
|
|
### ✅ Белые кнопки
|
|||
|
|
- "Добавить из буфера обмена"
|
|||
|
|
- "Сканировать QR-код" (только мобильные)
|
|||
|
|
- "Добавить WARP"
|
|||
|
|
- "Ввести вручную"
|
|||
|
|
|
|||
|
|
### ✅ Система обновлений
|
|||
|
|
- Android: открывает браузер/Google Play
|
|||
|
|
- Desktop: скачивание с прогресс-баром
|
|||
|
|
|
|||
|
|
### ✅ Все остальные функции
|
|||
|
|
Работают одинаково на всех платформах!
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📤 Деплой на update-server:
|
|||
|
|
|
|||
|
|
### Для Linux:
|
|||
|
|
```bash
|
|||
|
|
# Архивируем bundle
|
|||
|
|
cd build/linux/x64/release/
|
|||
|
|
tar czf umbrix-1.7.0-linux-x64.tar.gz bundle/
|
|||
|
|
|
|||
|
|
# Или создаём AppImage (требует дополнительные инструменты)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Для Windows:
|
|||
|
|
```bash
|
|||
|
|
# После сборки на Windows
|
|||
|
|
cd build/windows/x64/runner/Release/
|
|||
|
|
# Создаём установщик с помощью Inno Setup или NSIS
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Загрузка на сервер:
|
|||
|
|
```bash
|
|||
|
|
# Скопируйте файлы
|
|||
|
|
cp umbrix-1.7.0-linux-x64.tar.gz /path/to/update-server/downloads/linux/
|
|||
|
|
cp umbrix-1.7.0-windows-x64.exe /path/to/update-server/downloads/windows/
|
|||
|
|
|
|||
|
|
# Обновите latest.json через admin панель
|
|||
|
|
# http://localhost:8000/admin/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔧 Технические детали:
|
|||
|
|
|
|||
|
|
### Почему изменения применяются автоматически?
|
|||
|
|
|
|||
|
|
**Flutter использует единый код для всех платформ:**
|
|||
|
|
```
|
|||
|
|
lib/
|
|||
|
|
├── features/
|
|||
|
|
│ ├── app_update/ ← Единый код обновлений
|
|||
|
|
│ ├── profile/ ← Единые кнопки
|
|||
|
|
│ └── settings/ ← Единые настройки
|
|||
|
|
└── ...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Платформо-специфичный код:** только в папках `android/`, `linux/`, `windows/`, `macos/`
|
|||
|
|
|
|||
|
|
**Что мы изменили:**
|
|||
|
|
- ✅ 99% изменений - в `lib/` (Flutter код) → автоматически на всех платформах
|
|||
|
|
- ✅ 1% изменений - в `android/` → только для Android
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎨 Дизайн кнопок - как это работает:
|
|||
|
|
|
|||
|
|
```dart
|
|||
|
|
// БЫЛО (цветные иконки на белом фоне):
|
|||
|
|
Material(
|
|||
|
|
color: theme.colorScheme.surface, // Белый/серый фон
|
|||
|
|
child: Icon(
|
|||
|
|
icon,
|
|||
|
|
color: theme.colorScheme.primary, // Цветная иконка
|
|||
|
|
),
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// СТАЛО (белые иконки на цветном фоне):
|
|||
|
|
Material(
|
|||
|
|
color: theme.colorScheme.primary, // Цветной фон
|
|||
|
|
child: Icon(
|
|||
|
|
icon,
|
|||
|
|
color: Colors.white, // Белая иконка
|
|||
|
|
),
|
|||
|
|
)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Это работает на:**
|
|||
|
|
- ✅ Android
|
|||
|
|
- ✅ iOS (если соберёте)
|
|||
|
|
- ✅ Windows
|
|||
|
|
- ✅ macOS
|
|||
|
|
- ✅ Linux
|
|||
|
|
- ✅ Web (если соберёте)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📋 Чеклист для полного деплоя:
|
|||
|
|
|
|||
|
|
### Разработка (✅ Готово)
|
|||
|
|
- [x] Изменения в коде
|
|||
|
|
- [x] Сборка Android APK
|
|||
|
|
- [x] Сборка Linux bundle
|
|||
|
|
- [x] Тестирование на эмуляторе
|
|||
|
|
|
|||
|
|
### Сборка (⏳ В процессе)
|
|||
|
|
- [x] Android release APK
|
|||
|
|
- [x] Linux release bundle
|
|||
|
|
- [ ] Windows .exe (требует Windows)
|
|||
|
|
- [ ] macOS .dmg (требует macOS)
|
|||
|
|
|
|||
|
|
### Упаковка (⏳ Следующий шаг)
|
|||
|
|
- [ ] Linux AppImage
|
|||
|
|
- [ ] Windows Installer (Inno Setup/NSIS)
|
|||
|
|
- [ ] macOS DMG
|
|||
|
|
- [ ] Подписание кодом (code signing)
|
|||
|
|
|
|||
|
|
### Деплой (⏳ После упаковки)
|
|||
|
|
- [ ] Загрузка на update-server
|
|||
|
|
- [ ] Обновление latest.json
|
|||
|
|
- [ ] Тестирование обновлений
|
|||
|
|
- [ ] Публикация в Google Play
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 💡 Рекомендации:
|
|||
|
|
|
|||
|
|
### Для локальной разработки:
|
|||
|
|
```bash
|
|||
|
|
# Используйте скрипт
|
|||
|
|
./BUILD_DESKTOP.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Для автоматической сборки:
|
|||
|
|
Настройте **GitHub Actions / GitLab CI / Azure Pipelines**:
|
|||
|
|
- Windows сборка на Windows runner
|
|||
|
|
- macOS сборка на macOS runner
|
|||
|
|
- Linux сборка на Linux runner
|
|||
|
|
|
|||
|
|
**Пример GitHub Actions:**
|
|||
|
|
```yaml
|
|||
|
|
name: Build Desktop
|
|||
|
|
on: push
|
|||
|
|
|
|||
|
|
jobs:
|
|||
|
|
build-linux:
|
|||
|
|
runs-on: ubuntu-latest
|
|||
|
|
steps:
|
|||
|
|
- uses: actions/checkout@v3
|
|||
|
|
- uses: subosito/flutter-action@v2
|
|||
|
|
- run: flutter build linux --release
|
|||
|
|
|
|||
|
|
build-windows:
|
|||
|
|
runs-on: windows-latest
|
|||
|
|
steps:
|
|||
|
|
- uses: actions/checkout@v3
|
|||
|
|
- uses: subosito/flutter-action@v2
|
|||
|
|
- run: flutter build windows --release
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎉 Итого:
|
|||
|
|
|
|||
|
|
**Все изменения синхронизированы автоматически!**
|
|||
|
|
|
|||
|
|
Просто соберите для нужной платформы:
|
|||
|
|
- Android → `flutter build apk --release` ✅
|
|||
|
|
- Linux → `flutter build linux --release` ✅
|
|||
|
|
- Windows → `flutter build windows --release` (на Windows машине)
|
|||
|
|
- macOS → `flutter build macos --release` (на macOS машине)
|
|||
|
|
|
|||
|
|
**Никаких дополнительных правок не требуется!** 🚀
|