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: