Remove file_selector dependency

This commit is contained in:
wanghongenpin
2024-10-30 01:53:44 +08:00
parent f2e7269ff2
commit d95741bb6b
17 changed files with 65 additions and 110 deletions

View File

@@ -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

View File

@@ -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<String> extensions =
call.arguments is List ? Lists.convertList<String>(call.arguments) : <String>[call.arguments];
XTypeGroup typeGroup =
XTypeGroup(extensions: extensions, uniformTypeIdentifiers: Platform.isMacOS ? const ['public.item'] : null);
final XFile? file = await openFile(acceptedTypeGroups: <XTypeGroup>[typeGroup]);
if (Platform.isWindows) windowManager.blur();
return file?.path;
}
if (call.method == 'pickFile') {
List<String> extensions =
call.arguments is List ? Lists.convertList<String>(call.arguments) : <String>[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));
}

View File

@@ -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', <String>['jpg', 'png', 'jpeg']);
if (widget.windowId != null) WindowController.fromWindowId(widget.windowId!).show();
return file;
//<String>['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;

View File

@@ -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: <String>['har']);
final XFile? file = await openFile(acceptedTypeGroups: <XTypeGroup>[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<HttpRequest> 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);

View File

@@ -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<DesktopRequestListWidget> 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<DesktopRequestListWidget> with Autom
List<HttpRequest>? 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);

View File

@@ -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<RequestRewriteWidget> {
//导入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<RequestRuleList> {
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<RequestRuleList> {
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);
}

View File

@@ -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<ScriptWidget> {
//导入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<dynamic>) {
for (var item in json) {
@@ -616,9 +615,8 @@ class _ScriptListState extends State<ScriptList> {
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<ScriptList> {
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);
}

View File

@@ -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<MobileHistory> {
//导入har
import(HistoryStorage storage) async {
const XTypeGroup typeGroup =
XTypeGroup(label: 'har', extensions: <String>['har'], uniformTypeIdentifiers: ["public.item"]);
final XFile? file = await openFile(acceptedTypeGroups: <XTypeGroup>[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);

View File

@@ -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<DomainFilter> {
//导入
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) {

View File

@@ -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<MobileRequestRewrite> {
//导入
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()));

View File

@@ -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<MobileScript> {
//导入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()));

View File

@@ -7,7 +7,6 @@
#include "generated_plugin_registrant.h"
#include <desktop_multi_window/desktop_multi_window_plugin.h>
#include <file_selector_linux/file_selector_plugin.h>
#include <flutter_desktop_context_menu/flutter_desktop_context_menu_plugin.h>
#include <flutter_js/flutter_js_plugin.h>
#include <proxy_manager/proxy_manager_plugin.h>
@@ -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);

View File

@@ -4,7 +4,6 @@
list(APPEND FLUTTER_PLUGIN_LIST
desktop_multi_window
file_selector_linux
flutter_desktop_context_menu
flutter_js
proxy_manager

View File

@@ -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"))

View File

@@ -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

View File

@@ -7,7 +7,6 @@
#include "generated_plugin_registrant.h"
#include <desktop_multi_window/desktop_multi_window_plugin.h>
#include <file_selector_windows/file_selector_windows.h>
#include <flutter_desktop_context_menu/flutter_desktop_context_menu_plugin.h>
#include <flutter_js/flutter_js_plugin.h>
#include <permission_handler_windows/permission_handler_windows_plugin.h>
@@ -21,8 +20,6 @@
void RegisterPlugins(flutter::PluginRegistry* registry) {
DesktopMultiWindowPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("DesktopMultiWindowPlugin"));
FileSelectorWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FileSelectorWindows"));
FlutterDesktopContextMenuPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FlutterDesktopContextMenuPlugin"));
FlutterJsPluginRegisterWithRegistrar(

View File

@@ -4,7 +4,6 @@
list(APPEND FLUTTER_PLUGIN_LIST
desktop_multi_window
file_selector_windows
flutter_desktop_context_menu
flutter_js
permission_handler_windows