From b8ecd758cf6261e29ff3e714ea1a7a17c6ae179d Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Thu, 11 Sep 2025 22:36:02 +0600 Subject: [PATCH] chore: fix plugin import not working inside flatpak --- lib/pages/settings/metadata_plugins.dart | 37 ++++++++++++++----- macos/Flutter/GeneratedPluginRegistrant.swift | 2 + pubspec.lock | 4 +- pubspec.yaml | 2 +- 4 files changed, 32 insertions(+), 13 deletions(-) diff --git a/lib/pages/settings/metadata_plugins.dart b/lib/pages/settings/metadata_plugins.dart index 84e3edb8..6698a67f 100644 --- a/lib/pages/settings/metadata_plugins.dart +++ b/lib/pages/settings/metadata_plugins.dart @@ -1,5 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:collection/collection.dart'; +import 'package:file_selector/file_selector.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_form_builder/flutter_form_builder.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:form_builder_validators/form_builder_validators.dart'; @@ -154,20 +156,35 @@ class SettingsMetadataProviderPage extends HookConsumerWidget { child: IconButton.primary( icon: const Icon(SpotubeIcons.upload), onPressed: () async { - final result = await FilePicker.platform.pickFiles( - type: kIsAndroid ? FileType.any : FileType.custom, - allowedExtensions: kIsAndroid ? [] : ["smplug"], - withData: true, - ); + Uint8List bytes; - if (result == null) return; + if (kIsFlatpak) { + final result = await openFile( + acceptedTypeGroups: [ + const XTypeGroup( + label: 'Spotube Metadata Plugin', + extensions: ['smplug'], + ), + ], + ); + if (result == null) return; + bytes = await result.readAsBytes(); + } else { + final result = await FilePicker.platform.pickFiles( + type: kIsAndroid ? FileType.any : FileType.custom, + allowedExtensions: kIsAndroid ? [] : ["smplug"], + withData: true, + ); - final file = result.files.first; + if (result == null) return; - if (file.bytes == null) return; + final file = result.files.first; + if (file.bytes == null) return; + bytes = file.bytes!; + } - final pluginConfig = await pluginsNotifier - .extractPluginArchive(file.bytes!); + final pluginConfig = + await pluginsNotifier.extractPluginArchive(bytes); await pluginsNotifier.addPlugin(pluginConfig); }, ), diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 3e50c307..9385ed14 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -12,6 +12,7 @@ import bonsoir_darwin import connectivity_plus import desktop_webview_window import device_info_plus +import file_picker import file_selector_macos import flutter_inappwebview_macos import flutter_secure_storage_macos @@ -40,6 +41,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin")) DesktopWebviewWindowPlugin.register(with: registry.registrar(forPlugin: "DesktopWebviewWindowPlugin")) DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) + FilePickerPlugin.register(with: registry.registrar(forPlugin: "FilePickerPlugin")) FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) InAppWebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "InAppWebViewFlutterPlugin")) FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin")) diff --git a/pubspec.lock b/pubspec.lock index 8b9c3ef7..a6720c55 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -681,10 +681,10 @@ packages: dependency: "direct main" description: name: file_picker - sha256: "16dc141db5a2ccc6520ebb6a2eb5945b1b09e95085c021d9f914f8ded7f1465c" + sha256: f2d9f173c2c14635cc0e9b14c143c49ef30b4934e8d1d274d6206fcb0086a06f url: "https://pub.dev" source: hosted - version: "8.1.4" + version: "10.3.3" file_selector: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 8d3a5ecb..c3044aad 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -41,7 +41,7 @@ dependencies: duration: ^3.0.12 encrypt: ^5.0.3 envied: ^1.0.0 - file_picker: 8.1.4 + file_picker: 10.3.3 file_selector: ^1.0.3 fluentui_system_icons: ^1.1.234 flutter: