Files
umbrix/CROSS_PLATFORM_SYNC.md
Umbrix Developer 76a374950f 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
2026-01-17 13:09:20 +03:00

9.6 KiB
Raw Blame History

Синхронизация изменений на все платформы

🎯 Главное: Изменения УЖЕ синхронизированы!

Все изменения, которые мы внесли, автоматически применяются ко всем платформам, потому что мы редактировали Flutter код, который является кросс-платформенным!


📝 Что мы изменили (применится везде):

1. Система обновлений

Файл: lib/features/app_update/widget/new_version_dialog.dart

Изменения:

  • Android → открывает браузер (простое решение)
  • Desktop (Windows/macOS/Linux) → скачивание с прогресс-баром + автозапуск установщика

Код:

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 (цветной)

Код:

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 платформах

Код:

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 (уже собрано)

flutter build apk --release
# Файл: build/app/outputs/flutter-apk/app-release.apk

Linux (уже собрано)

flutter build linux --release
# Файлы: build/linux/x64/release/bundle/

Windows (.exe)

Требуется Windows машина или Wine:

flutter build windows --release
# Файлы: build/windows/x64/runner/Release/

Или используйте GitHub Actions / Azure Pipelines для автоматической сборки

macOS (.dmg)

Требуется macOS:

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:

# Архивируем bundle
cd build/linux/x64/release/
tar czf umbrix-1.7.0-linux-x64.tar.gz bundle/

# Или создаём AppImage (требует дополнительные инструменты)

Для Windows:

# После сборки на Windows
cd build/windows/x64/runner/Release/
# Создаём установщик с помощью Inno Setup или NSIS

Загрузка на сервер:

# Скопируйте файлы
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

🎨 Дизайн кнопок - как это работает:

// БЫЛО (цветные иконки на белом фоне):
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 (если соберёте)

📋 Чеклист для полного деплоя:

Разработка ( Готово)

  • Изменения в коде
  • Сборка Android APK
  • Сборка Linux bundle
  • Тестирование на эмуляторе

Сборка ( В процессе)

  • Android release APK
  • 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

💡 Рекомендации:

Для локальной разработки:

# Используйте скрипт
./BUILD_DESKTOP.sh

Для автоматической сборки:

Настройте GitHub Actions / GitLab CI / Azure Pipelines:

  • Windows сборка на Windows runner
  • macOS сборка на macOS runner
  • Linux сборка на Linux runner

Пример GitHub Actions:

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 машине)

Никаких дополнительных правок не требуется! 🚀