From 13767656b59c4100ba214c13eef5e12143f6c19e Mon Sep 17 00:00:00 2001 From: rang <378694192@qq.com> Date: Thu, 6 Nov 2025 17:09:09 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0=E6=89=98=E7=9B=98=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=202.=E5=85=B3=E9=97=AD=E4=BF=AE=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E6=9C=80=E5=B0=8F=E5=8C=96=E5=88=B0=E6=89=98=E7=9B=98=203.?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=92=AD=E6=94=BE=E9=A1=B5=E6=92=AD=E6=94=BE?= =?UTF-8?q?=E9=80=9F=E7=8E=87=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/icon/logo.ico | Bin 0 -> 16958 bytes .../player/view/widgets/speed_selector.dart | 4 +- lib/main.dart | 17 ++- lib/models/tray.dart | 130 ++++++++++++++++++ lib/shared/utils/utils.dart | 40 ++++++ .../widgets/expandable_description.dart | 35 +++-- lib/shared/widgets/shelves/home_shelf.dart | 2 +- linux/flutter/generated_plugin_registrant.cc | 12 ++ linux/flutter/generated_plugins.cmake | 3 + macos/Flutter/GeneratedPluginRegistrant.swift | 6 + pubspec.lock | 104 ++++++++++++++ pubspec.yaml | 4 + .../flutter/generated_plugin_registrant.cc | 9 ++ windows/flutter/generated_plugins.cmake | 3 + 14 files changed, 354 insertions(+), 15 deletions(-) create mode 100644 assets/icon/logo.ico create mode 100644 lib/models/tray.dart create mode 100644 lib/shared/utils/utils.dart diff --git a/assets/icon/logo.ico b/assets/icon/logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..860c54246480c3cc80ff1f9bf7b908bf56e36615 GIT binary patch literal 16958 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 createState() => _TrayFrameworkState(); +} + +class _TrayFrameworkState extends ConsumerState + with TrayListener, WindowListener { + @override + void initState() { + if (Utils.isDesktop()) { + windowManager.addListener(this); + _init(); + } + + super.initState(); + } + + @override + void dispose() { + trayManager.removeListener(this); + super.dispose(); + } + + void _init() async { + await trayManager.setIcon( + Utils.isWindows() ? 'assets/icon/logo.ico' : 'assets/icon/logo.png', + ); + await trayManager.setToolTip(AppMetadata.appName); + Menu menu = Menu( + items: [ + MenuItem( + key: 'show_window', + // label: 'Show Window', + label: '显示主窗口', + onClick: (menuItem) => windowManager.show(), + ), + MenuItem.separator(), + MenuItem( + key: 'play_pause', + label: '播放/暂停', + onClick: (menuItem) => + ref.read(audiobookPlayerProvider).togglePlayPause(), + ), + MenuItem( + key: 'previous', + label: '上一个', + onClick: (menuItem) => + ref.read(audiobookPlayerProvider).seekToPrevious(), + ), + MenuItem( + key: 'next', + label: '下一个', + onClick: (menuItem) => ref.read(audiobookPlayerProvider).seekToNext(), + ), + MenuItem.separator(), + MenuItem( + key: 'exit_app', + // label: 'Exit App', + label: '退出', + onClick: (menuItem) => windowManager.destroy(), + ), + ], + ); + await trayManager.setContextMenu(menu); + trayManager.addListener(this); + } + + @override + Widget build(BuildContext context) { + return widget.child; + } + + @override + void onTrayIconMouseDown() { + // do something, for example pop up the menu + // print('onTrayIconMouseDown'); + windowManager.show(); + } + + @override + void onTrayIconMouseUp() { + // do something, for example pop up the menu + // print('onTrayIconMouseUp'); + } + + @override + void onTrayIconRightMouseDown() { + // do something + // print('onTrayIconRightMouseDown'); + trayManager.popUpContextMenu(bringAppToFront: true); + } + + @override + void onTrayIconRightMouseUp() { + // do something + // print('onTrayIconRightMouseUp'); + } + + // @override + // void onTrayMenuItemClick(MenuItem menuItem) { + // print(menuItem.key); + // if (menuItem.key == 'show_window') { + // // do something + // } else if (menuItem.key == 'exit_app') { + // // do something + + // } else if (menuItem.key == 'play_pause'){ + + // } + // } + + @override + void onWindowClose() async { + final isPreventClose = await windowManager.isPreventClose(); + if (isPreventClose) { + windowManager.hide(); + } + } +} diff --git a/lib/shared/utils/utils.dart b/lib/shared/utils/utils.dart new file mode 100644 index 0000000..93a14d6 --- /dev/null +++ b/lib/shared/utils/utils.dart @@ -0,0 +1,40 @@ +import 'dart:io'; + +import 'package:flutter/foundation.dart'; + +class Utils { + static isAndroid() { + return !kIsWeb && Platform.isAndroid; + } + + static isIOS() { + return !kIsWeb && Platform.isIOS; + } + + static isMobile() { + return !kIsWeb && (Platform.isAndroid || Platform.isIOS); + } + + static isDesktop() { + if (kIsWeb) { + return false; + } + return Platform.isWindows || Platform.isLinux || Platform.isMacOS; + } + + static isWindows() { + return !kIsWeb && Platform.isWindows; + } + + static isMacos() { + return !kIsWeb && Platform.isMacOS; + } + + static isLinux() { + return !kIsWeb && Platform.isLinux; + } + + static isWeb() { + return kIsWeb; + } +} diff --git a/lib/shared/widgets/expandable_description.dart b/lib/shared/widgets/expandable_description.dart index 203c7b0..c79f6be 100644 --- a/lib/shared/widgets/expandable_description.dart +++ b/lib/shared/widgets/expandable_description.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; +import 'package:flutter_html/flutter_html.dart'; class ExpandableDescription extends HookWidget { const ExpandableDescription({ @@ -78,18 +79,28 @@ class ExpandableDescription extends HookWidget { padding: const EdgeInsets.symmetric(horizontal: 8.0), child: AnimatedSwitcher( duration: duration * 3, - child: isDescExpanded.value - ? Text( - style: textTheme.bodyMedium, - content, - maxLines: null, - ) - : Text( - style: textTheme.bodyMedium, - content, - maxLines: 3, - overflow: TextOverflow.ellipsis, - ), + // child: isDescExpanded.value + // ? Text( + // style: textTheme.bodyMedium, + // content, + // maxLines: null, + // ) + // : Text( + // style: textTheme.bodyMedium, + // content, + // maxLines: 3, + // overflow: TextOverflow.ellipsis, + // ), + child: Html( + data: '
$content
', + style: { + "div": Style( + maxLines: isDescExpanded.value ? null : 3, + textOverflow: TextOverflow.ellipsis, + fontStyle: textTheme.bodyMedium?.fontStyle, + ), + }, + ), ), ), diff --git a/lib/shared/widgets/shelves/home_shelf.dart b/lib/shared/widgets/shelves/home_shelf.dart index 9a59a54..34e492e 100644 --- a/lib/shared/widgets/shelves/home_shelf.dart +++ b/lib/shared/widgets/shelves/home_shelf.dart @@ -70,7 +70,7 @@ class SimpleHomeShelf extends HookConsumerWidget { ), // fix the height of the shelf as a percentage of the screen height SizedBox( - height: height ?? getDefaultShelfHeight(context, perCent: 0.5), + height: height ?? getDefaultShelfHeight(context, perCent: 0.45), child: ListView.separated( scrollDirection: Axis.horizontal, itemBuilder: (context, index) { diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index 606c5a6..a380286 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -9,7 +9,10 @@ #include #include #include +#include +#include #include +#include void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) dynamic_color_registrar = @@ -21,7 +24,16 @@ void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) media_kit_libs_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "MediaKitLibsLinuxPlugin"); media_kit_libs_linux_plugin_register_with_registrar(media_kit_libs_linux_registrar); + g_autoptr(FlPluginRegistrar) screen_retriever_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "ScreenRetrieverLinuxPlugin"); + screen_retriever_linux_plugin_register_with_registrar(screen_retriever_linux_registrar); + g_autoptr(FlPluginRegistrar) tray_manager_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "TrayManagerPlugin"); + tray_manager_plugin_register_with_registrar(tray_manager_registrar); g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); + g_autoptr(FlPluginRegistrar) window_manager_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "WindowManagerPlugin"); + window_manager_plugin_register_with_registrar(window_manager_registrar); } diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 6023074..30a795e 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -6,7 +6,10 @@ list(APPEND FLUTTER_PLUGIN_LIST dynamic_color isar_flutter_libs media_kit_libs_linux + screen_retriever_linux + tray_manager url_launcher_linux + window_manager ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index e83c5d8..435043d 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -14,9 +14,12 @@ import isar_flutter_libs import just_audio import package_info_plus import path_provider_foundation +import screen_retriever_macos import share_plus import sqflite_darwin +import tray_manager import url_launcher_macos +import window_manager func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { AudioServicePlugin.register(with: registry.registrar(forPlugin: "AudioServicePlugin")) @@ -28,7 +31,10 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { JustAudioPlugin.register(with: registry.registrar(forPlugin: "JustAudioPlugin")) FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + ScreenRetrieverMacosPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverMacosPlugin")) SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) + TrayManagerPlugin.register(with: registry.registrar(forPlugin: "TrayManagerPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) + WindowManagerPlugin.register(with: registry.registrar(forPlugin: "WindowManagerPlugin")) } diff --git a/pubspec.lock b/pubspec.lock index fa15a52..31f219d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -318,6 +318,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.6" + csslib: + dependency: transitive + description: + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" cupertino_icons: dependency: "direct main" description: @@ -499,6 +507,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.21.3+1" + flutter_html: + dependency: "direct main" + description: + name: flutter_html + sha256: "38a2fd702ffdf3243fb7441ab58aa1bc7e6922d95a50db76534de8260638558d" + url: "https://pub.dev" + source: hosted + version: "3.0.0" flutter_launcher_icons: dependency: "direct dev" description: @@ -642,6 +658,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.3.0" + html: + dependency: transitive + description: + name: html + sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602" + url: "https://pub.dev" + source: hosted + version: "0.15.6" http: dependency: transitive description: @@ -811,6 +835,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.1.1" + list_counter: + dependency: transitive + description: + name: list_counter + sha256: c447ae3dfcd1c55f0152867090e67e219d42fe6d4f2807db4bbe8b8d69912237 + url: "https://pub.dev" + source: hosted + version: "1.0.2" list_wheel_scroll_view_nls: dependency: "direct main" description: @@ -899,6 +931,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.9" + menu_base: + dependency: transitive + description: + name: menu_base + sha256: "820368014a171bd1241030278e6c2617354f492f5c703d7b7d4570a6b8b84405" + url: "https://pub.dev" + source: hosted + version: "0.1.1" meta: dependency: transitive description: @@ -1180,6 +1220,46 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.1" + screen_retriever: + dependency: transitive + description: + name: screen_retriever + sha256: "570dbc8e4f70bac451e0efc9c9bb19fa2d6799a11e6ef04f946d7886d2e23d0c" + url: "https://pub.dev" + source: hosted + version: "0.2.0" + screen_retriever_linux: + dependency: transitive + description: + name: screen_retriever_linux + sha256: f7f8120c92ef0784e58491ab664d01efda79a922b025ff286e29aa123ea3dd18 + url: "https://pub.dev" + source: hosted + version: "0.2.0" + screen_retriever_macos: + dependency: transitive + description: + name: screen_retriever_macos + sha256: "71f956e65c97315dd661d71f828708bd97b6d358e776f1a30d5aa7d22d78a149" + url: "https://pub.dev" + source: hosted + version: "0.2.0" + screen_retriever_platform_interface: + dependency: transitive + description: + name: screen_retriever_platform_interface + sha256: ee197f4581ff0d5608587819af40490748e1e39e648d7680ecf95c05197240c0 + url: "https://pub.dev" + source: hosted + version: "0.2.0" + screen_retriever_windows: + dependency: transitive + description: + name: screen_retriever_windows + sha256: "449ee257f03ca98a57288ee526a301a430a344a161f9202b4fcc38576716fe13" + url: "https://pub.dev" + source: hosted + version: "0.2.0" scroll_loop_auto_scroll: dependency: "direct main" description: @@ -1251,6 +1331,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.0" + shortid: + dependency: transitive + description: + name: shortid + sha256: d0b40e3dbb50497dad107e19c54ca7de0d1a274eb9b4404991e443dadb9ebedb + url: "https://pub.dev" + source: hosted + version: "0.1.2" sky_engine: dependency: transitive description: flutter @@ -1416,6 +1504,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.2" + tray_manager: + dependency: "direct main" + description: + name: tray_manager + sha256: c5fd83b0ae4d80be6eaedfad87aaefab8787b333b8ebd064b0e442a81006035b + url: "https://pub.dev" + source: hosted + version: "0.5.2" typed_data: dependency: transitive description: @@ -1592,6 +1688,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" + window_manager: + dependency: "direct main" + description: + name: window_manager + sha256: "7eb6d6c4164ec08e1bf978d6e733f3cebe792e2a23fb07cbca25c2872bfdbdcd" + url: "https://pub.dev" + source: hosted + version: "0.5.1" xdg_directories: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 24c0e6b..4c36578 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -96,8 +96,11 @@ dependencies: shimmer: ^3.0.0 url_launcher: ^6.2.6 vibration: ^3.1.3 + flutter_html: ^3.0.0 flutter_localizations: sdk: flutter + window_manager: ^0.5.1 + tray_manager: ^0.5.2 dev_dependencies: build_runner: ^2.4.9 custom_lint: ^0.7.0 @@ -126,6 +129,7 @@ flutter: - assets/sounds/ - assets/images/ - assets/fonts/ + - assets/icon/ # - images/a_dot_burr.jpeg # - images/a_dot_ham.jpeg # An image asset can refer to one or more resolution-specific "variants", see diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index de21556..4f18e92 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -10,8 +10,11 @@ #include #include #include +#include #include +#include #include +#include void RegisterPlugins(flutter::PluginRegistry* registry) { DynamicColorPluginCApiRegisterWithRegistrar( @@ -22,8 +25,14 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { registry->GetRegistrarForPlugin("MediaKitLibsWindowsAudioPluginCApi")); PermissionHandlerWindowsPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin")); + ScreenRetrieverWindowsPluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("ScreenRetrieverWindowsPluginCApi")); SharePlusWindowsPluginCApiRegisterWithRegistrar( registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi")); + TrayManagerPluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("TrayManagerPlugin")); UrlLauncherWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("UrlLauncherWindows")); + WindowManagerPluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("WindowManagerPlugin")); } diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 13d504d..ed05458 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -7,8 +7,11 @@ list(APPEND FLUTTER_PLUGIN_LIST isar_flutter_libs media_kit_libs_windows_audio permission_handler_windows + screen_retriever_windows share_plus + tray_manager url_launcher_windows + window_manager ) list(APPEND FLUTTER_FFI_PLUGIN_LIST