diff --git a/android/android/app/src/main/AndroidManifest.xml b/android/android/app/src/main/AndroidManifest.xml
index abf6325..bfd9aaf 100644
--- a/android/android/app/src/main/AndroidManifest.xml
+++ b/android/android/app/src/main/AndroidManifest.xml
@@ -9,6 +9,7 @@
android:maxSdkVersion="32" />
+
{
@override
void initState() {
super.initState();
- _requestPermissions();
+ _initApp();
+ }
+
+ Future _initApp() async {
+ await _requestPermissions();
+ await _loadSavedModel();
}
Future _requestPermissions() async {
+ // 申请存储权限(传统文件访问)
await Permission.storage.request();
- if (await Permission.photos.request().isDenied) {
- // 低版本用 storage 已覆盖
+ // 申请管理所有文件权限 (Android 11+),这能解决 Directory.listSync() 无法访问外部目录的问题
+ if (await Permission.manageExternalStorage.request().isGranted) {
+ debugPrint("Manage External Storage granted");
}
}
+ Future _loadSavedModel() async {
+ final prefs = await SharedPreferences.getInstance();
+ final savedPath = prefs.getString('last_model_path');
+ if (savedPath != null && File(savedPath).existsSync()) {
+ setState(() {
+ _modelPath = savedPath;
+ _log = '已恢复上次使用的模型';
+ });
+ }
+ }
+
+ Future _saveModelPath(String path) async {
+ final prefs = await SharedPreferences.getInstance();
+ await prefs.setString('last_model_path', path);
+ }
+
ModelConfig get _currentConfig => modelConfigs[_engine]!;
Future _modelsDir() async {
@@ -82,6 +106,7 @@ class _HomePageState extends State {
_modelPath = path;
_log = '已选择本地模型: $path';
});
+ _saveModelPath(path);
}
Future _downloadModel() async {
@@ -109,6 +134,7 @@ class _HomePageState extends State {
_modelPath = savePath;
_log = '模型下载完成: $savePath';
});
+ _saveModelPath(savePath);
} catch (e) {
setState(() {
_log = '下载失败: $e';
@@ -208,8 +234,9 @@ class _HomePageState extends State {
Future _runBatch() async {
final files = Directory(_inputDir!)
- .listSync()
- .whereType()
+ .listSync(recursive: false, followLinks: false)
+ .where((entity) => entity is File)
+ .cast()
.where((f) {
final ext = f.path.toLowerCase();
return ext.endsWith('.png') ||
diff --git a/android/pubspec.yaml b/android/pubspec.yaml
index aa07b27..81c6b22 100644
--- a/android/pubspec.yaml
+++ b/android/pubspec.yaml
@@ -20,6 +20,7 @@ dependencies:
path_provider: ^2.0.15
# 存储/相册权限
permission_handler: ^9.2.0
+ shared_preferences: ^2.0.15
dev_dependencies:
flutter_test: