feat(ui): support running as menubar app (#1216)

This commit is contained in:
awe123343 authored and GitHub committed 2025-12-31 09:57:16 +08:00
1 parent b0e133b554
commit cb6331c20d
28 files changed
+214 -40

No files matched your search

+3 -1
View File
@@ -319,7 +319,7 @@ jobs:
channel: master
- run: |
sudo apt update -y
sudo apt install -y ninja-build libgtk-3-dev libayatana-appindicator3-1 libayatana-appindicator3-dev rpm patchelf libfuse2 locate imagemagick potrace
sudo apt install -y ninja-build libgtk-3-dev libayatana-appindicator3-1 libayatana-appindicator3-dev rpm patchelf libfuse2 locate imagemagick potrace libkeybinder-3.0-dev
arch=$(uname -m)
wget -O appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-${arch}.AppImage"
chmod +x appimagetool
@@ -476,6 +476,7 @@ jobs:
- cmake
- curl
- libgtk-3-dev
- libkeybinder-3.0-dev
- ninja-build
- unzip
- xz-utils
@@ -491,6 +492,7 @@ jobs:
plugin: nil
stage-packages:
- libgtk-3-dev
- libkeybinder-3.0-dev
- libappindicator3-dev
override-build: |
# work around pub get stack overflow # https://github.com/dart-lang/sdk/issues/51068#issuecomment-1396588253
+1 -1
View File
@@ -94,7 +94,7 @@ jobs:
- if: runner.os == 'Linux'
run: |
sudo apt-get update -y
sudo apt-get install -y ninja-build libgtk-3-dev libayatana-appindicator3-dev
sudo apt-get install -y ninja-build libgtk-3-dev libayatana-appindicator3-dev libkeybinder-3.0-dev
go build -tags nosqlite -ldflags="-w -s" -buildmode=c-shared -o ui/flutter/linux/bundle/lib/libgopeed.so github.com/GopeedLab/gopeed/bind/desktop
cd ui/flutter
flutter build linux
@@ -115,6 +115,9 @@ class AppController extends GetxController with WindowListener, TrayListener {
@override
void onWindowFocus() {
refresh();
if (Util.isMacos() && Database.instance.getRunAsMenubarApp()) {
windowManager.setSkipTaskbar(true);
}
}
@override
@@ -9,9 +9,11 @@ import 'package:gopeed/app/views/copy_button.dart';
import 'package:intl/intl.dart';
import 'package:launch_at_startup/launch_at_startup.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:window_manager/window_manager.dart';
import '../../../../api/api.dart' as api;
import '../../../../api/model/downloader_config.dart';
import '../../../../database/database.dart';
import '../../../../i18n/message.dart';
import '../../../../util/input_formatter.dart';
import '../../../../util/locale_manager.dart';
@@ -369,6 +371,46 @@ class SettingView extends GetView<SettingController> {
);
});
// Menubar mode only for macOS
final buildMenubarMode = !Util.isMacos()
? () => null
: _buildConfigItem('runAsMenubarApp', () {
return Database.instance.getRunAsMenubarApp() ? 'on'.tr : 'off'.tr;
}, (Key key) {
return Container(
alignment: Alignment.centerLeft,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Switch(
value: Database.instance.getRunAsMenubarApp(),
onChanged: (bool value) async {
// Save to database (single source of truth)
Database.instance.saveRunAsMenubarApp(value);
// Apply dock icon visibility
await windowManager.setSkipTaskbar(value);
// Small delay to let macOS process the activation policy change
await Future.delayed(const Duration(milliseconds: 100));
// Ensure window stays visible after toggle
await windowManager.show();
await windowManager.focus();
// Force UI refresh
controller.clearTap();
await debounceSave();
},
),
Text(
'runAsMenubarAppDesc'.tr,
style: TextStyle(
fontSize: 12,
color: Theme.of(context).hintColor,
),
),
],
),
);
});
// http config items start
final httpConfig = downloaderCfg.value.protocolConfig.http;
final buildHttpUa =
@@ -1353,6 +1395,7 @@ class SettingView extends GetView<SettingController> {
buildDefaultDirectDownload(),
buildBrowserExtension(),
buildAutoStartup(),
buildMenubarMode(),
]),
)),
Text('archives'.tr),
+9
View File
@@ -10,6 +10,7 @@ const String _windowState = 'windowState';
const String _bookmark = 'bookmark';
const String _createHistory = 'createHistory';
const String _webToken = 'webToken';
const String _runAsMenubarApp = 'runAsMenubarApp';
class Database {
static final Database _instance = Database._internal();
@@ -109,4 +110,12 @@ class Database {
void clearCreateHistory() {
clear(_createHistory);
}
void saveRunAsMenubarApp(bool value) {
box.put(_runAsMenubarApp, value);
}
bool getRunAsMenubarApp() {
return box.get(_runAsMenubarApp, defaultValue: false) as bool;
}
}
+2
View File
@@ -106,6 +106,8 @@ const deDE = {
'Vielen Dank an alle Mitwirkenden, die beim Aufbau und der Entwicklung der Gopeed-Community geholfen haben!',
'browserExtension': 'Browsererweiterung',
'launchAtStartup': 'Beim Start starten',
'runAsMenubarApp': 'Als Menüleisten-App ausführen',
'runAsMenubarAppDesc': 'Dock-Symbol ausblenden und nur in der Menüleiste ausführen',
'seedConfig': 'Seed-Konfiguration',
'seedKeep': 'Weiter-seeden bis manuell gestoppt',
'seedRatio': 'Seed Verhältniss',
+2
View File
@@ -114,6 +114,8 @@ const enUS = {
'Thanks to all the contributors who have helped build and develop the Gopeed community!',
'browserExtension': 'Browser Extension',
'launchAtStartup': 'Launch at Startup',
'runAsMenubarApp': 'Run as menubar app',
'runAsMenubarAppDesc': 'Hide dock icon and run in menubar only',
'seedConfig': 'Seed Config',
'seedKeep': 'Keep seeding until manually stopped',
'seedRatio': 'Seed ratio',
+2
View File
@@ -99,6 +99,8 @@ const esES = {
'¡Gracias a todos los contribuyentes que han ayudado a construir y desarrollar la comunidad Gopeed!',
'browserExtension': 'Extensión del Navegador',
'launchAtStartup': 'Iniciar al Arranque',
'runAsMenubarApp': 'Ejecutar como aplicación de barra de menú',
'runAsMenubarAppDesc': 'Ocultar icono del Dock y ejecutar solo en la barra de menú',
'seedConfig': 'Configuración de Semilla',
'seedKeep': 'Mantener sembrado',
'seedRatio': 'Ratio de semilla',
+3
View File
@@ -86,5 +86,8 @@ const faIR = {
'categoryPath': 'مسیر دسته‌بندی',
'builtInCategory': 'دسته‌بندی داخلی قابل حذف نیست',
'selectCategory': 'انتخاب دسته‌بندی',
'launchAtStartup': 'راه‌اندازی در استارت‌آپ',
'runAsMenubarApp': 'اجرا به عنوان برنامه نوار منو',
'runAsMenubarAppDesc': 'پنهان کردن آیکون Dock و اجرا فقط در نوار منو',
}
};
+2
View File
@@ -99,6 +99,8 @@ const frFR = {
'Merci à tous les contributeurs qui ont aidé à construire et développer la communauté Gopeed !',
'browserExtension': 'Extension du navigateur',
'launchAtStartup': 'Lancer au démarrage',
'runAsMenubarApp': 'Exécuter en tant qu\'application de barre de menus',
'runAsMenubarAppDesc': 'Masquer l\'icône du Dock et exécuter uniquement dans la barre de menus',
'skipVerifyCert': 'Ignorer la vérification du certificat',
'archives': 'Archives',
'autoExtract': 'Extraire automatiquement les archives',
+2
View File
@@ -106,6 +106,8 @@ const huHU = {
'Köszönet minden hozzájárulónak, aki segített a Gopeed közösség építésében és fejlesztésében!',
'browserExtension': 'Böngésző bővítmény',
'launchAtStartup': 'Indítás indításkor',
'runAsMenubarApp': 'Futtatás menüsáv alkalmazásként',
'runAsMenubarAppDesc': 'Dock ikon elrejtése és csak a menüsávban való futtatás',
'seedConfig': 'Seed beállítás',
'seedKeep': 'Tartsa a seedet amíg manuálisan le nem állítják',
'seedRatio': 'Seed arány',
+2
View File
@@ -101,6 +101,8 @@ const idID = {
'Terima kasih kepada semua kontributor yang telah membantu membangun dan mengembangkan komunitas Gopeed!',
'browserExtension': 'Ekstensi Perambanan',
'launchAtStartup': 'Luncurkan saat Startup',
'runAsMenubarApp': 'Jalankan sebagai aplikasi bilah menu',
'runAsMenubarAppDesc': 'Sembunyikan ikon Dock dan jalankan hanya di bilah menu',
'seedConfig': 'Konfigurasi Seed',
'seedKeep': 'Terus seeding hingga dihentikan secara manual',
'seedRatio': 'Rasio Seed',
+2
View File
@@ -97,6 +97,8 @@ const itIT = {
'Grazie a tutti i contributori che hanno contribuito a costruire e sviluppare la comunità Gopeed!',
'browserExtension': 'Estensione del browser',
'launchAtStartup': "Lancia all'avvio",
'runAsMenubarApp': 'Esegui come app della barra dei menu',
'runAsMenubarAppDesc': 'Nascondi icona Dock ed esegui solo nella barra dei menu',
'skipVerifyCert': 'Salta la verifica del certificato',
'archives': 'Archivi',
'autoExtract': 'Estrai automaticamente gli archivi',
+3
View File
@@ -87,5 +87,8 @@ const jaJP = {
'categoryPath': 'カテゴリパス',
'builtInCategory': '内蔵カテゴリは削除できません',
'selectCategory': 'カテゴリを選択',
'launchAtStartup': '起動時に起動',
'runAsMenubarApp': 'メニューバーアプリとして実行',
'runAsMenubarAppDesc': 'Dockアイコンを非表示にして、メニューバーのみで実行',
}
};
+2
View File
@@ -95,6 +95,8 @@ const plPL = {
'Dziękuję wszystkim za pomoc przy powstawaniu aplikacji Gopeed!',
'browserExtension': 'Wtyczka dla przeglądarki',
'launchAtStartup': 'Uruchom na starcie',
'runAsMenubarApp': 'Uruchom jako aplikacja paska menu',
'runAsMenubarAppDesc': 'Ukryj ikonę Docka i uruchom tylko w pasku menu',
'skipVerifyCert': 'Pomiń weryfikację certyfikatu',
'archives': 'Archiwa',
'autoExtract': 'Automatycznie wyodrębnij archiwa',
+2
View File
@@ -103,6 +103,8 @@ const ptBR = {
'Obrigado a todos os colaboradores que ajudaram a construir e desenvolver a comunidade Gopeed!',
'browserExtension': 'Extensões para Navegadores',
'launchAtStartup': 'Launch at Startup',
'runAsMenubarApp': 'Executar como aplicativo da barra de menus',
'runAsMenubarAppDesc': 'Ocultar ícone do Dock e executar apenas na barra de menus',
'seedConfig': 'Seed Config',
'seedKeep': 'Keep seeding until manually stopped',
'seedRatio': 'Seed ratio',
+2
View File
@@ -103,6 +103,8 @@ const ruRU = {
'Благодарим всех участников за их вклад в строительство и развитие сообщества Gopeed!',
'browserExtension': 'Расширение браузера',
'launchAtStartup': 'Запускать при загрузке системы',
'runAsMenubarApp': 'Запускать как приложение в строке меню',
'runAsMenubarAppDesc': 'Скрыть значок в Dock и запускать только в строке меню',
'seedConfig': 'Настройка раздачи',
'seedKeep': 'Раздавать пока не остановлю вручную',
'seedRatio': 'Коэффициент раздачи',
+2
View File
@@ -97,6 +97,8 @@ const taTA = {
'Gopeed சமூகத்தை உருவாக்கவும் மற்றும் மேம்படுத்த உதவிய அனைத்து பங்களிப்பாளர்களுக்கும் நன்றி!',
'browserExtension': 'உலாவி நீட்டிப்பு',
'launchAtStartup': 'தொடக்கத்தின் போது இயங்கு',
'runAsMenubarApp': 'மெனுபார் பயன்பாடாக இயக்கு',
'runAsMenubarAppDesc': 'டாக் ஐகானை மறைத்து மெனுபாரில் மட்டும் இயக்கு',
'skipVerifyCert': 'திருத்தி சான்று சரிபார்க்கவும்',
'archives': 'காப்பகங்கள்',
'autoExtract': 'காப்பகங்களை தானாக பிரித்தெடு',
+2
View File
@@ -104,6 +104,8 @@ const trTR = {
'Gopeed topluluğunun inşasında ve geliştirilmesinde katkıda bulunan herkese teşekkürler!',
'browserExtension': 'Tarayıcı Eklentisi',
'launchAtStartup': 'Başlangıçta Çalıştır',
'runAsMenubarApp': 'Menü çubuğu uygulaması olarak çalıştır',
'runAsMenubarAppDesc': 'Dock simgesini gizle ve yalnızca menü çubuğunda çalıştır',
'seedConfig': 'Seed Ayarları',
'seedKeep': 'Manuel olarak durdurulana kadar seed etmeye devam et',
'seedRatio': 'Seed oranı',
+2
View File
@@ -103,6 +103,8 @@ const ukUA = {
'Дякуємо всім учасникам, які допомогли створити та розвивати спільноту Gopeed!',
'browserExtension': 'Розширення для браузера',
'launchAtStartup': 'Запускати під час завантаження системи',
'runAsMenubarApp': 'Запускати як додаток у рядку меню',
'runAsMenubarAppDesc': 'Приховати значок у Dock і запускати лише в рядку меню',
'seedConfig': 'Налаштування роздачі',
'seedKeep': 'Роздавати доки не зупиню вручну',
'seedRatio': 'Коефіцієнт роздачі',
+3
View File
@@ -114,5 +114,8 @@ const viVN = {
'categoryPath': 'Đường dẫn danh mục',
'builtInCategory': 'Không thể xóa danh mục tích hợp',
'selectCategory': 'Chọn danh mục',
'launchAtStartup': 'Khởi động cùng hệ thống',
'runAsMenubarApp': 'Chạy như ứng dụng thanh menu',
'runAsMenubarAppDesc': 'Ẩn biểu tượng Dock và chỉ chạy trong thanh menu',
},
};
+2
View File
@@ -112,6 +112,8 @@ const zhCN = {
'thanksDesc': '感谢所有为 Gopeed 社区建设添砖加瓦的贡献者们!',
'browserExtension': '浏览器扩展',
'launchAtStartup': '开机自动运行',
'runAsMenubarApp': '以菜单栏应用运行',
'runAsMenubarAppDesc': '隐藏程序坞图标,仅在菜单栏运行',
'seedConfig': '做种设置',
'seedKeep': '持续做种直到手动停止',
'seedRatio': '做种分享率',
+2
View File
@@ -100,6 +100,8 @@ const zhTW = {
'thanksDesc': '感謝所有幫助建立和發展 Gopeed 社群的貢獻者!',
'browserExtension': '瀏覽器擴充功能',
'launchAtStartup': '開機自動執行',
'runAsMenubarApp': '以選單列應用程式執行',
'runAsMenubarAppDesc': '隱藏 Dock 圖示,僅在選單列執行',
'seedConfig': '做種設定',
'seedKeep': '持續做種直到手動停止',
'seedRatio': '做種分享率',
+23 -1
View File
@@ -1,8 +1,10 @@
import 'package:args/args.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_foreground_task/flutter_foreground_task.dart';
import 'package:get/get.dart';
import 'package:hotkey_manager/hotkey_manager.dart';
import 'package:window_manager/window_manager.dart';
import 'api/api.dart' as api;
@@ -67,10 +69,14 @@ Future<void> init(Args args) async {
if (Util.isDesktop()) {
await windowManager.ensureInitialized();
final windowState = Database.instance.getWindowState();
// Check if menubar mode is enabled (only for macOS)
final runAsMenubarApp = Util.isMacos() && Database.instance.getRunAsMenubarApp();
final windowOptions = WindowOptions(
size: Size(windowState?.width ?? 800, windowState?.height ?? 600),
center: true,
skipTaskbar: false,
skipTaskbar: runAsMenubarApp,
);
await windowManager.waitUntilReadyToShow(windowOptions, () async {
if (!args.hidden) {
@@ -84,6 +90,22 @@ Future<void> init(Args args) async {
// await windowManager.maximize();
// }
});
// Register Cmd+W hotkey on macOS to close window
if (Util.isMacos()) {
await hotKeyManager.unregisterAll();
HotKey hotKey = HotKey(
key: PhysicalKeyboardKey.keyW,
modifiers: [HotKeyModifier.meta],
scope: HotKeyScope.inapp,
);
await hotKeyManager.register(
hotKey,
keyDownHandler: (hotKey) {
windowManager.hide();
},
);
}
}
initLogger();
@@ -15,6 +15,7 @@ icon: assets/icon/icon.svg
dependencies:
- libayatana-appindicator3-1
- gir1.2-ayatanaappindicator3-0.1
- libkeybinder-3.0-0
keywords:
- Application
+31 -12
View File
@@ -6,6 +6,12 @@ PODS:
- device_info_plus (0.0.1):
- FlutterMacOS
- FlutterMacOS (1.0.0)
- HotKey (0.2.1)
- hotkey_manager_macos (0.0.1):
- FlutterMacOS
- HotKey
- open_dir_macos (0.0.1):
- FlutterMacOS
- package_info_plus (0.0.1):
- FlutterMacOS
- path_provider_foundation (0.0.1):
@@ -30,6 +36,8 @@ DEPENDENCIES:
- desktop_drop (from `Flutter/ephemeral/.symlinks/plugins/desktop_drop/macos`)
- device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`)
- FlutterMacOS (from `Flutter/ephemeral`)
- hotkey_manager_macos (from `Flutter/ephemeral/.symlinks/plugins/hotkey_manager_macos/macos`)
- open_dir_macos (from `Flutter/ephemeral/.symlinks/plugins/open_dir_macos/macos`)
- package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`)
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
- screen_retriever (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos`)
@@ -39,6 +47,10 @@ DEPENDENCIES:
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
- window_manager (from `Flutter/ephemeral/.symlinks/plugins/window_manager/macos`)
SPEC REPOS:
trunk:
- HotKey
EXTERNAL SOURCES:
app_links:
:path: Flutter/ephemeral/.symlinks/plugins/app_links/macos
@@ -48,6 +60,10 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos
FlutterMacOS:
:path: Flutter/ephemeral
hotkey_manager_macos:
:path: Flutter/ephemeral/.symlinks/plugins/hotkey_manager_macos/macos
open_dir_macos:
:path: Flutter/ephemeral/.symlinks/plugins/open_dir_macos/macos
package_info_plus:
:path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos
path_provider_foundation:
@@ -66,19 +82,22 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/window_manager/macos
SPEC CHECKSUMS:
app_links: 10e0a0ab602ffaf34d142cd4862f29d34b303b2a
desktop_drop: 69eeff437544aa619c8db7f4481b3a65f7696898
device_info_plus: 74e614483d05c89290d30a4c8feae15d555f7427
app_links: 9028728e32c83a0831d9db8cf91c526d16cc5468
desktop_drop: e0b672a7d84c0a6cbc378595e82cdb15f2970a43
device_info_plus: 724ebb83a99d517430554a1810445ff28fe71fa3
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
package_info_plus: f5790acc797bf17c3e959e9d6cf162cc68ff7523
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38
share_plus: fd717ef89a2801d3491e737630112b80c310640e
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
tray_manager: 9064e219c56d75c476e46b9a21182087930baf90
url_launcher_macos: c82c93949963e55b228a30115bd219499a6fe404
window_manager: 3a1844359a6295ab1e47659b1a777e36773cd6e8
HotKey: 400beb7caa29054ea8d864c96f5ba7e5b4852277
hotkey_manager_macos: a4317849af96d2430fa89944d3c58977ca089fbe
open_dir_macos: 79810d7921d777f8732bf6358b3a0839a8fad9b5
package_info_plus: 8147fd5037235202932580f35ebe195f7a55e3cd
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
screen_retriever: 4f97c103641aab8ce183fa5af3b87029df167936
share_plus: b818fd6bf0e537317735186d977a68a125703488
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
tray_manager: a104b5c81b578d83f3c3d0f40a997c8b10810166
url_launcher_macos: 0fba8ddabfc33ce0a9afe7c5fef5aab3d8d2d673
window_manager: 1d01fa7ac65a6e6f83b965471b1a7fdd3f06166c
PODFILE CHECKSUM: 353c8bcc5d5b0994e508d035b5431cfe18c1dea7
COCOAPODS: 1.15.2
COCOAPODS: 1.16.2
+60 -25
View File
@@ -5,15 +5,10 @@ packages:
dependency: transitive
description:
name: _fe_analyzer_shared
sha256: f256b0c0ba6c7577c15e2e4e114755640a875e885099367bf6e012b19314c834
sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7"
url: "https://pub.dev"
source: hosted
version: "72.0.0"
_macros:
dependency: transitive
description: dart
source: sdk
version: "0.3.2"
version: "67.0.0"
after_layout:
dependency: transitive
description:
@@ -26,10 +21,10 @@ packages:
dependency: transitive
description:
name: analyzer
sha256: b652861553cd3990d8ed361f7979dc6d7053a9ac8843fa73820ab68ce5410139
sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d"
url: "https://pub.dev"
source: hosted
version: "6.7.0"
version: "6.4.1"
animations:
dependency: transitive
description:
@@ -298,10 +293,10 @@ packages:
dependency: transitive
description:
name: dart_style
sha256: "7856d364b589d1f08986e140938578ed36ed948581fbc3bc9aef1805039ac5ab"
sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9"
url: "https://pub.dev"
source: hosted
version: "2.3.7"
version: "2.3.6"
desktop_drop:
dependency: "direct main"
description:
@@ -530,6 +525,46 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.2.3"
hotkey_manager:
dependency: "direct main"
description:
name: hotkey_manager
sha256: "06f0655b76c8dd322fb7101dc615afbdbf39c3d3414df9e059c33892104479cd"
url: "https://pub.dev"
source: hosted
version: "0.2.3"
hotkey_manager_linux:
dependency: transitive
description:
name: hotkey_manager_linux
sha256: "83676bda8210a3377bc6f1977f193bc1dbdd4c46f1bdd02875f44b6eff9a8473"
url: "https://pub.dev"
source: hosted
version: "0.2.0"
hotkey_manager_macos:
dependency: transitive
description:
name: hotkey_manager_macos
sha256: "03b5967e64357b9ac05188ea4a5df6fe4ed4205762cb80aaccf8916ee1713c96"
url: "https://pub.dev"
source: hosted
version: "0.2.0"
hotkey_manager_platform_interface:
dependency: transitive
description:
name: hotkey_manager_platform_interface
sha256: "98ffca25b8cc9081552902747b2942e3bc37855389a4218c9d50ca316b653b13"
url: "https://pub.dev"
source: hosted
version: "0.2.0"
hotkey_manager_windows:
dependency: transitive
description:
name: hotkey_manager_windows
sha256: "0d03ced9fe563ed0b68f0a0e1b22c9ffe26eb8053cb960e401f68a4f070e0117"
url: "https://pub.dev"
source: hosted
version: "0.2.0"
http:
dependency: transitive
description:
@@ -683,14 +718,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.3.0"
macros:
dependency: transitive
description:
name: macros
sha256: "0acaed5d6b7eab89f63350bccd82119e6c602df0f391260d0e32b5e23db79536"
url: "https://pub.dev"
source: hosted
version: "0.1.2-main.4"
matcher:
dependency: transitive
description:
@@ -783,10 +810,10 @@ packages:
dependency: "direct main"
description:
name: open_filex
sha256: ba425ea49affd0a98a234aa9344b9ea5d4c4f7625a1377961eae9fe194c3d523
sha256: "9976da61b6a72302cf3b1efbce259200cd40232643a467aac7370addf94d6900"
url: "https://pub.dev"
source: hosted
version: "4.5.0"
version: "4.7.0"
package_config:
dependency: transitive
description:
@@ -1072,18 +1099,18 @@ packages:
dependency: transitive
description:
name: shared_preferences
sha256: "746e5369a43170c25816cc472ee016d3a66bc13fcf430c0bc41ad7b4b2922051"
sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5"
url: "https://pub.dev"
source: hosted
version: "2.3.2"
version: "2.5.3"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
sha256: "3b9febd815c9ca29c9e3520d50ec32f49157711e143b7a4ca039eb87e8ade5ab"
sha256: "9f9f3d372d4304723e6136663bb291c0b93f5e4c8a4a6314347f481a33bda2b1"
url: "https://pub.dev"
source: hosted
version: "2.3.3"
version: "2.4.7"
shared_preferences_foundation:
dependency: transitive
description:
@@ -1274,6 +1301,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.4.0"
uni_platform:
dependency: transitive
description:
name: uni_platform
sha256: e02213a7ee5352212412ca026afd41d269eb00d982faa552f419ffc2debfad84
url: "https://pub.dev"
source: hosted
version: "0.1.3"
uri_to_file:
dependency: "direct main"
description:
+1
View File
@@ -53,6 +53,7 @@ dependencies:
app_links: ^6.3.3
uri_to_file: ^1.0.0
window_manager: ^0.4.2
hotkey_manager: ^0.2.3
share_plus: ^10.1.0
flutter_form_builder: ^9.5.0
form_builder_validators: ^11.0.0