feat: mobile-like window size and always-visible stats
- Changed window size to mobile phone format (400x800) - Removed width condition for ActiveProxyFooter - now always visible - Added run-umbrix.sh launch script with icon copying - Stats cards now display on all screen sizes
This commit is contained in:
320
CROSS_PLATFORM_SYNC.md
Normal file
320
CROSS_PLATFORM_SYNC.md
Normal file
@@ -0,0 +1,320 @@
|
||||
# ✅ Синхронизация изменений на все платформы
|
||||
|
||||
## 🎯 Главное: Изменения УЖЕ синхронизированы!
|
||||
|
||||
Все изменения, которые мы внесли, **автоматически применяются ко всем платформам**, потому что мы редактировали **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 машине)
|
||||
|
||||
**Никаких дополнительных правок не требуется!** 🚀
|
||||
Reference in New Issue
Block a user