From d95741bb6bcd6319f924c4d0219e6b3e16b08c69 Mon Sep 17 00:00:00 2001 From: wanghongenpin Date: Wed, 30 Oct 2024 01:53:44 +0800 Subject: [PATCH] Remove file_selector dependency --- lib/storage/histories.dart | 2 +- lib/ui/component/multi_window.dart | 37 +------------------ lib/ui/component/qr_code_page.dart | 8 ++-- lib/ui/desktop/left_menus/history.dart | 17 +++++---- lib/ui/desktop/request/list.dart | 8 ++-- .../toolbar/setting/request_rewrite.dart | 22 +++++------ lib/ui/desktop/toolbar/setting/script.dart | 19 ++++------ lib/ui/mobile/request/history.dart | 10 ++--- lib/ui/mobile/setting/filter.dart | 9 +++-- lib/ui/mobile/setting/request_rewrite.dart | 8 ++-- lib/ui/mobile/setting/script.dart | 8 ++-- linux/flutter/generated_plugin_registrant.cc | 4 -- linux/flutter/generated_plugins.cmake | 1 - macos/Flutter/GeneratedPluginRegistrant.swift | 2 - pubspec.yaml | 16 ++++---- .../flutter/generated_plugin_registrant.cc | 3 -- windows/flutter/generated_plugins.cmake | 1 - 17 files changed, 65 insertions(+), 110 deletions(-) diff --git a/lib/storage/histories.dart b/lib/storage/histories.dart index b67013c..023955c 100644 --- a/lib/storage/histories.dart +++ b/lib/storage/histories.dart @@ -20,7 +20,6 @@ import 'dart:convert'; import 'dart:io'; import 'package:date_format/date_format.dart'; -import 'package:file_selector/file_selector.dart'; import 'package:proxypin/network/bin/configuration.dart'; import 'package:proxypin/network/http/http.dart'; import 'package:proxypin/network/util/logger.dart'; @@ -29,6 +28,7 @@ import 'package:proxypin/utils/files.dart'; import 'package:proxypin/utils/har.dart'; import 'package:proxypin/utils/listenable_list.dart'; import 'package:path_provider/path_provider.dart'; +import 'package:share_plus/share_plus.dart'; ///历史存储 ///@Author WangHongEn diff --git a/lib/ui/component/multi_window.dart b/lib/ui/component/multi_window.dart index 3b7712d..2644a0a 100644 --- a/lib/ui/component/multi_window.dart +++ b/lib/ui/component/multi_window.dart @@ -18,16 +18,14 @@ import 'dart:convert'; import 'dart:io'; import 'package:desktop_multi_window/desktop_multi_window.dart'; -import 'package:file_picker/file_picker.dart'; -import 'package:file_selector/file_selector.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:path_provider/path_provider.dart'; import 'package:proxypin/network/bin/server.dart'; import 'package:proxypin/network/components/rewrite/request_rewrite_manager.dart'; import 'package:proxypin/network/components/rewrite/rewrite_rule.dart'; import 'package:proxypin/network/components/script_manager.dart'; import 'package:proxypin/network/http/http.dart'; -import 'package:proxypin/network/util/lang.dart'; import 'package:proxypin/network/util/logger.dart'; import 'package:proxypin/ui/component/cert_hash.dart'; import 'package:proxypin/ui/component/device.dart'; @@ -41,7 +39,6 @@ import 'package:proxypin/ui/desktop/request/request_editor.dart'; import 'package:proxypin/ui/desktop/toolbar/setting/request_rewrite.dart'; import 'package:proxypin/ui/desktop/toolbar/setting/script.dart'; import 'package:proxypin/utils/platform.dart'; -import 'package:path_provider/path_provider.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:window_manager/window_manager.dart'; @@ -216,38 +213,6 @@ void registerMethodHandler() { return getApplicationSupportDirectory().then((it) => it.path); } - if (call.method == 'getSaveLocation') { - String? path = (await getSaveLocation(suggestedName: call.arguments))?.path; - if (Platform.isWindows) windowManager.blur(); - return path; - } - - if (call.method == 'saveFile') { - String? path = (await FilePicker.platform.saveFile(fileName: call.arguments)); - return path; - } - - if (call.method == 'openFile') { - List extensions = - call.arguments is List ? Lists.convertList(call.arguments) : [call.arguments]; - - XTypeGroup typeGroup = - XTypeGroup(extensions: extensions, uniformTypeIdentifiers: Platform.isMacOS ? const ['public.item'] : null); - final XFile? file = await openFile(acceptedTypeGroups: [typeGroup]); - if (Platform.isWindows) windowManager.blur(); - return file?.path; - } - - if (call.method == 'pickFile') { - List extensions = - call.arguments is List ? Lists.convertList(call.arguments) : [call.arguments]; - - var file = - (await FilePicker.platform.pickFiles(allowedExtensions: extensions, type: FileType.custom))?.files.single; - if (Platform.isWindows) windowManager.blur(); - return file?.path; - } - if (call.method == 'launchUrl') { return launchUrl(Uri.parse(call.arguments)); } diff --git a/lib/ui/component/qr_code_page.dart b/lib/ui/component/qr_code_page.dart index 70178cc..9de4fb4 100644 --- a/lib/ui/component/qr_code_page.dart +++ b/lib/ui/component/qr_code_page.dart @@ -17,7 +17,6 @@ import 'dart:async'; import 'dart:io'; -import 'package:desktop_multi_window/desktop_multi_window.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -203,9 +202,10 @@ class _QrDecodeState extends State<_QrDecode> with AutomaticKeepAliveClientMixin } if (Platforms.isDesktop()) { - String? file = await DesktopMultiWindow.invokeMethod(0, 'pickFile', ['jpg', 'png', 'jpeg']); - if (widget.windowId != null) WindowController.fromWindowId(widget.windowId!).show(); - return file; + //['jpg', 'png', 'jpeg'] + FilePickerResult? result = await FilePicker.platform.pickFiles(type: FileType.image); + if (result == null || result.files.isEmpty) return null; + return result.files.single.path; } return null; diff --git a/lib/ui/desktop/left_menus/history.dart b/lib/ui/desktop/left_menus/history.dart index d0c3eac..bb593b1 100644 --- a/lib/ui/desktop/left_menus/history.dart +++ b/lib/ui/desktop/left_menus/history.dart @@ -18,7 +18,7 @@ import 'dart:io'; import 'dart:math'; import 'package:date_format/date_format.dart'; -import 'package:file_selector/file_selector.dart'; +import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_toastr/flutter_toastr.dart'; @@ -233,14 +233,14 @@ class _HistoryListState extends State<_HistoryListWidget> { //导入har import() async { - const XTypeGroup typeGroup = XTypeGroup(label: 'Har', extensions: ['har']); - final XFile? file = await openFile(acceptedTypeGroups: [typeGroup]); - if (file == null) { + final results = await FilePicker.platform.pickFiles(type: FileType.custom, allowedExtensions: ['har']); + if (results == null || results.files.isEmpty) { return; } + var file = results.files.first; try { - var historyItem = await storage.addHarFile(file); + var historyItem = await storage.addHarFile(file.xFile); setState(() { toRequestsView(historyItem); FlutterToastr.show(localizations.importSuccess, context); @@ -370,14 +370,15 @@ class _HistoryListState extends State<_HistoryListWidget> { //文件名称 String fileName = '${item.name.contains("ProxyPin") ? '' : 'ProxyPin'}${item.name}.har'.replaceAll(" ", "_").replaceAll(":", "_"); - final FileSaveLocation? result = await getSaveLocation(suggestedName: fileName); - if (result == null) { + + final String? path = await FilePicker.platform.saveFile(fileName: fileName); + if (path == null) { return; } //获取请求 List requests = await storage.getRequests(item); - var file = await File(result.path).create(); + var file = await File(path).create(); await Har.writeFile(requests, file, title: item.name); if (mounted) FlutterToastr.show(localizations.exportSuccess, context); Future.delayed(const Duration(seconds: 30), () => item.requests = null); diff --git a/lib/ui/desktop/request/list.dart b/lib/ui/desktop/request/list.dart index ed7b786..14f88cf 100644 --- a/lib/ui/desktop/request/list.dart +++ b/lib/ui/desktop/request/list.dart @@ -16,7 +16,7 @@ import 'dart:collection'; import 'dart:io'; -import 'package:file_selector/file_selector.dart'; +import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_desktop_context_menu/flutter_desktop_context_menu.dart'; @@ -170,8 +170,8 @@ class DesktopRequestListState extends State with Autom ///导出 export(String fileName) async { - final FileSaveLocation? result = await getSaveLocation(suggestedName: fileName); - if (result == null) { + var path = await FilePicker.platform.saveFile(fileName: fileName); + if (path == null) { return; } @@ -179,7 +179,7 @@ class DesktopRequestListState extends State with Autom List? requests = currentView(); if (requests == null) return; - var file = await File(result.path).create(); + var file = await File(path).create(); await Har.writeFile(requests, file, title: fileName); if (mounted) FlutterToastr.show(AppLocalizations.of(context)!.exportSuccess, context); diff --git a/lib/ui/desktop/toolbar/setting/request_rewrite.dart b/lib/ui/desktop/toolbar/setting/request_rewrite.dart index 6ac474c..1440c97 100644 --- a/lib/ui/desktop/toolbar/setting/request_rewrite.dart +++ b/lib/ui/desktop/toolbar/setting/request_rewrite.dart @@ -17,7 +17,7 @@ import 'dart:convert'; import 'dart:io'; import 'package:desktop_multi_window/desktop_multi_window.dart'; -import 'package:file_selector/file_selector.dart'; +import 'package:file_picker/file_picker.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -154,14 +154,16 @@ class RequestRewriteState extends State { //导入js import() async { - String? file = await DesktopMultiWindow.invokeMethod(0, 'openFile', 'config'); - WindowController.fromWindowId(widget.windowId).show(); - if (file == null) { + FilePickerResult? result = + await FilePicker.platform.pickFiles(type: FileType.custom, allowedExtensions: ['config', 'json']); + if (result == null || result.files.isEmpty) { return; } + var file = result.files.single; + try { - List json = jsonDecode(await File(file).readAsString()); + List json = jsonDecode(await File(file.path!).readAsString()); for (var item in json) { var rule = RequestRewriteRule.formJson(item); var items = (item['items'] as List).map((e) => RewriteItem.fromJson(e)).toList(); @@ -350,9 +352,8 @@ class _RequestRuleListState extends State { if (indexes.isEmpty) return; String fileName = 'proxypin-rewrites.config'; - String? saveLocation = await DesktopMultiWindow.invokeMethod(0, 'getSaveLocation', fileName); - WindowController.fromWindowId(widget.windowId).show(); - if (saveLocation == null) { + var path = await FilePicker.platform.saveFile(fileName: fileName); + if (path == null) { return; } @@ -365,8 +366,7 @@ class _RequestRuleListState extends State { list.add(json); } - final XFile xFile = XFile.fromData(utf8.encode(jsonEncode(list)), mimeType: 'json'); - await xFile.saveTo(saveLocation); + await File(path).writeAsBytes(utf8.encode(jsonEncode(list))); if (mounted) FlutterToastr.show(localizations.exportSuccess, context); } @@ -521,7 +521,7 @@ class _RewriteRuleEditState extends State { shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0)), content: Container( width: 550, - constraints: const BoxConstraints(minHeight: 200,maxHeight: 550), + constraints: const BoxConstraints(minHeight: 200, maxHeight: 550), child: Form( key: formKey, child: Column( diff --git a/lib/ui/desktop/toolbar/setting/script.dart b/lib/ui/desktop/toolbar/setting/script.dart index d81753a..996129e 100644 --- a/lib/ui/desktop/toolbar/setting/script.dart +++ b/lib/ui/desktop/toolbar/setting/script.dart @@ -18,7 +18,7 @@ import 'dart:convert'; import 'dart:io'; import 'package:desktop_multi_window/desktop_multi_window.dart'; -import 'package:file_selector/file_selector.dart'; +import 'package:file_picker/file_picker.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -151,14 +151,13 @@ class _ScriptWidgetState extends State { //导入js import() async { - String? file = await DesktopMultiWindow.invokeMethod(0, 'openFile', 'json'); - WindowController.fromWindowId(widget.windowId).show(); - if (file == null) { + FilePickerResult? result = await FilePicker.platform.pickFiles(type: FileType.custom, allowedExtensions: ['json']); + if (result == null || result.files.isEmpty) { return; } - + var file = result.files.single.path; try { - var json = jsonDecode(await File(file).readAsString()); + var json = jsonDecode(await File(file!).readAsString()); var scriptManager = (await ScriptManager.instance); if (json is List) { for (var item in json) { @@ -616,9 +615,8 @@ class _ScriptListState extends State { if (indexes.isEmpty) return; //文件名称 String fileName = 'proxypin-scripts.json'; - String? saveLocation = await DesktopMultiWindow.invokeMethod(0, 'getSaveLocation', fileName); - WindowController.fromWindowId(widget.windowId).show(); - if (saveLocation == null) { + String? path = await FilePicker.platform.saveFile(fileName: fileName); + if (path == null) { return; } var scriptManager = await ScriptManager.instance; @@ -631,8 +629,7 @@ class _ScriptListState extends State { json.add(map); } - final XFile xFile = XFile.fromData(utf8.encode(jsonEncode(json)), mimeType: 'json'); - await xFile.saveTo(saveLocation); + await File(path).writeAsBytes(utf8.encode(jsonEncode(json))); if (mounted) FlutterToastr.show(localizations.exportSuccess, context); } diff --git a/lib/ui/mobile/request/history.dart b/lib/ui/mobile/request/history.dart index aefe2ce..e6615c9 100644 --- a/lib/ui/mobile/request/history.dart +++ b/lib/ui/mobile/request/history.dart @@ -18,7 +18,7 @@ import 'dart:convert'; import 'dart:io'; import 'package:date_format/date_format.dart'; -import 'package:file_selector/file_selector.dart'; +import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -156,15 +156,13 @@ class _MobileHistoryState extends State { //导入har import(HistoryStorage storage) async { - const XTypeGroup typeGroup = - XTypeGroup(label: 'har', extensions: ['har'], uniformTypeIdentifiers: ["public.item"]); - final XFile? file = await openFile(acceptedTypeGroups: [typeGroup]); - if (file == null) { + FilePickerResult? result = await FilePicker.platform.pickFiles(type: FileType.custom, allowedExtensions: ['har']); + if (result == null || result.files.isEmpty) { return; } try { - var historyItem = await storage.addHarFile(file); + var historyItem = await storage.addHarFile(result.files.single.xFile); setState(() { toRequestsView(historyItem, storage); FlutterToastr.show(localizations.importSuccess, context); diff --git a/lib/ui/mobile/setting/filter.dart b/lib/ui/mobile/setting/filter.dart index 9da853f..70e125a 100644 --- a/lib/ui/mobile/setting/filter.dart +++ b/lib/ui/mobile/setting/filter.dart @@ -15,8 +15,9 @@ */ import 'dart:collection'; import 'dart:convert'; +import 'dart:io'; -import 'package:file_selector/file_selector.dart'; +import 'package:file_picker/file_picker.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -135,11 +136,11 @@ class _DomainFilterState extends State { //导入 import() async { - final XFile? file = await openFile(); - if (file == null) { + FilePickerResult? result = await FilePicker.platform.pickFiles(type: FileType.custom, allowedExtensions: ['config', 'json']); + if (result == null || result.files.isEmpty) { return; } - + var file = File(result.files.single.path!); try { List json = jsonDecode(await file.readAsString()); for (var item in json) { diff --git a/lib/ui/mobile/setting/request_rewrite.dart b/lib/ui/mobile/setting/request_rewrite.dart index a0c1ae9..5154305 100644 --- a/lib/ui/mobile/setting/request_rewrite.dart +++ b/lib/ui/mobile/setting/request_rewrite.dart @@ -16,7 +16,7 @@ import 'dart:collection'; import 'dart:convert'; -import 'package:file_selector/file_selector.dart'; +import 'package:file_picker/file_picker.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -98,10 +98,12 @@ class _MobileRequestRewriteState extends State { //导入 import() async { - final XFile? file = await openFile(); - if (file == null) { + FilePickerResult? result = + await FilePicker.platform.pickFiles(type: FileType.custom, allowedExtensions: ['config', 'json']); + if (result == null || result.files.isEmpty) { return; } + var file = result.files.single.xFile; try { List json = jsonDecode(utf8.decode(await file.readAsBytes())); diff --git a/lib/ui/mobile/setting/script.dart b/lib/ui/mobile/setting/script.dart index 66b1626..d52dba3 100644 --- a/lib/ui/mobile/setting/script.dart +++ b/lib/ui/mobile/setting/script.dart @@ -15,7 +15,7 @@ */ import 'dart:convert'; -import 'package:file_selector/file_selector.dart'; +import 'package:file_picker/file_picker.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter_code_editor/flutter_code_editor.dart'; @@ -118,11 +118,11 @@ class _MobileScriptState extends State { //导入js import() async { - final XFile? file = await openFile(); - if (file == null) { + FilePickerResult? result = await FilePicker.platform.pickFiles(type: FileType.custom, allowedExtensions: ['json']); + if (result == null || result.files.isEmpty) { return; } - + var file = result.files.single.xFile; try { var scriptManager = (await ScriptManager.instance); var json = jsonDecode(utf8.decode(await file.readAsBytes())); diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index 3f8c288..b1f65f6 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -7,7 +7,6 @@ #include "generated_plugin_registrant.h" #include -#include #include #include #include @@ -19,9 +18,6 @@ void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) desktop_multi_window_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "DesktopMultiWindowPlugin"); desktop_multi_window_plugin_register_with_registrar(desktop_multi_window_registrar); - g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = - fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); - file_selector_plugin_register_with_registrar(file_selector_linux_registrar); g_autoptr(FlPluginRegistrar) flutter_desktop_context_menu_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterDesktopContextMenuPlugin"); flutter_desktop_context_menu_plugin_register_with_registrar(flutter_desktop_context_menu_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 4ed09c7..740dc77 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -4,7 +4,6 @@ list(APPEND FLUTTER_PLUGIN_LIST desktop_multi_window - file_selector_linux flutter_desktop_context_menu flutter_js proxy_manager diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 17cf8cc..1808fce 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -7,7 +7,6 @@ import Foundation import desktop_multi_window import device_info_plus -import file_selector_macos import flutter_desktop_context_menu import flutter_js import path_provider_foundation @@ -21,7 +20,6 @@ import window_manager func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { FlutterMultiWindowPlugin.register(with: registry.registrar(forPlugin: "FlutterMultiWindowPlugin")) DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) - FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) FlutterDesktopContextMenuPlugin.register(with: registry.registrar(forPlugin: "FlutterDesktopContextMenuPlugin")) FlutterJsPlugin.register(with: registry.registrar(forPlugin: "FlutterJsPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) diff --git a/pubspec.yaml b/pubspec.yaml index 822f096..19c2606 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -23,27 +23,29 @@ dependencies: url: https://gitee.com/wanghongenpin/flutter-plugins.git path: packages/desktop_multi_window path_provider: ^2.1.4 - url_launcher: ^6.3.1 + file_picker: ^8.1.3 proxy_manager: ^0.0.3 permission_handler: ^11.3.1 - qr_flutter: ^4.1.0 - flutter_qr_reader: ^1.0.5 flutter_toastr: ^1.0.3 share_plus: ^10.1.1 - brotli: ^0.6.0 flutter_js: ^0.8.1 flutter_code_editor: git: url: https://github.com/wanghongenpin/flutter-code-editor.git ref: secure-keyboard flutter_desktop_context_menu: ^0.2.0 - file_picker: ^8.1.3 - file_selector: ^1.0.3 - win32audio: ^1.3.1 device_info_plus: ^11.1.0 shared_preferences: ^2.3.2 image_pickers: ^2.0.5+2 + qr_flutter: ^4.1.0 + flutter_qr_reader: ^1.0.5 + + brotli: ^0.6.0 + win32audio: ^1.3.1 + + url_launcher: ^6.3.1 + dev_dependencies: flutter_test: sdk: flutter diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 2c58eab..bfb3e6c 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -7,7 +7,6 @@ #include "generated_plugin_registrant.h" #include -#include #include #include #include @@ -21,8 +20,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { DesktopMultiWindowPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("DesktopMultiWindowPlugin")); - FileSelectorWindowsRegisterWithRegistrar( - registry->GetRegistrarForPlugin("FileSelectorWindows")); FlutterDesktopContextMenuPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("FlutterDesktopContextMenuPlugin")); FlutterJsPluginRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 862f263..a0b8a09 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -4,7 +4,6 @@ list(APPEND FLUTTER_PLUGIN_LIST desktop_multi_window - file_selector_windows flutter_desktop_context_menu flutter_js permission_handler_windows