Fix core crash caused by windows resource manager restart Optimize logs, requests, access to pages Fix macos bypass domain issues
50 lines
1.5 KiB
Dart
50 lines
1.5 KiB
Dart
import 'dart:io';
|
|
import 'dart:typed_data';
|
|
|
|
import 'package:file_picker/file_picker.dart';
|
|
import 'package:fl_clash/common/common.dart';
|
|
import 'package:image_picker/image_picker.dart';
|
|
import 'package:mobile_scanner/mobile_scanner.dart';
|
|
|
|
class Picker {
|
|
Future<PlatformFile?> pickerFile() async {
|
|
final filePickerResult = await FilePicker.platform.pickFiles(
|
|
withData: true,
|
|
allowMultiple: false,
|
|
initialDirectory: await appPath.downloadDirPath,
|
|
);
|
|
return filePickerResult?.files.first;
|
|
}
|
|
|
|
Future<String?> saveFile(String fileName, Uint8List bytes) async {
|
|
final path = await FilePicker.platform.saveFile(
|
|
fileName: fileName,
|
|
initialDirectory: await appPath.downloadDirPath,
|
|
bytes: Platform.isAndroid ? bytes : null,
|
|
);
|
|
if (!Platform.isAndroid && path != null) {
|
|
final file = await File(path).create(recursive: true);
|
|
await file.writeAsBytes(bytes);
|
|
}
|
|
return path;
|
|
}
|
|
|
|
Future<String?> pickerConfigQRCode() async {
|
|
final xFile = await ImagePicker().pickImage(source: ImageSource.gallery);
|
|
if (xFile == null) {
|
|
return null;
|
|
}
|
|
final controller = MobileScannerController();
|
|
final capture = await controller.analyzeImage(xFile.path, formats: [
|
|
BarcodeFormat.qrCode,
|
|
]);
|
|
final result = capture?.barcodes.first.rawValue;
|
|
if (result == null || !result.isUrl) {
|
|
throw appLocalizations.pleaseUploadValidQrcode;
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
|
|
final picker = Picker();
|