pikapika/lib/basic/config/ChooserRoot.dart

79 lines
2.0 KiB
Dart
Raw Normal View History

2021-10-07 03:47:28 +00:00
/// 文件夹选择器的根路径
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
2021-10-07 03:47:28 +00:00
import '../Common.dart';
import '../Method.dart';
import 'Platform.dart';
2021-10-07 03:47:28 +00:00
const _propertyName = "chooserRoot";
late String _chooserRoot;
2021-11-04 05:56:25 +00:00
Future<dynamic> initChooserRoot() async {
2021-10-07 03:47:28 +00:00
_chooserRoot = await method.loadProperty(_propertyName, "");
}
String _currentChooserRoot() {
2021-10-07 03:47:28 +00:00
if (_chooserRoot == "") {
if (Platform.isWindows) {
return '/';
} else if (Platform.isMacOS) {
return '/Users';
} else if (Platform.isLinux) {
return '/';
} else if (Platform.isAndroid) {
2021-10-14 10:12:36 +00:00
return '/storage/emulated/0';
2021-10-07 03:47:28 +00:00
} else {
throw 'error';
}
}
return _chooserRoot;
}
Future<String> currentChooserRoot() async {
if (Platform.isAndroid) {
if (androidVersion >= 30) {
if (!(await Permission.manageExternalStorage.request()).isGranted) {
throw Exception("申请权限被拒绝");
}
} else {
if (!(await Permission.storage.request()).isGranted) {
throw Exception("申请权限被拒绝");
}
}
}
return _currentChooserRoot();
}
2021-11-04 05:56:25 +00:00
Future<dynamic> _inputChooserRoot(BuildContext context) async {
2021-10-07 03:47:28 +00:00
String? input = await displayTextInputDialog(
context,
2021-12-15 04:22:40 +00:00
src: _chooserRoot,
title: '文件夹选择器根路径',
hint: '请输入文件夹选择器根路径',
desc: "导出时选择目录的默认路径, 同时也是根路径, 不能正常导出时也可以尝试设置此选项。",
2021-10-07 03:47:28 +00:00
);
if (input != null) {
await method.saveProperty(_propertyName, input);
_chooserRoot = input;
}
}
2021-11-04 03:45:22 +00:00
Widget chooserRootSetting() {
return StatefulBuilder(
builder: (BuildContext context, void Function(void Function()) setState) {
return ListTile(
2022-03-19 04:12:27 +00:00
title: const Text("文件夹选择器默认路径"),
subtitle: Text(_currentChooserRoot()),
2021-11-04 03:45:22 +00:00
onTap: () async {
2021-11-04 05:56:25 +00:00
await _inputChooserRoot(context);
2021-11-04 03:45:22 +00:00
setState(() {});
},
);
},
);
}