我对dart /Flutter 翼还是个新手,对这种情况下的async-awaitFlutter 翼异常处理有点困惑.
所以基本上我有这个功能,从Flutter 数据文件夹加载一个.json设置文件. 它应该加载设置,并在无法找到文件的情况下抛出SettingsLoadingException异常,这样调用函数就知道何时创建新的文件.
这种机制是有效的,但在这种情况下,有两件事让我感到困惑.首先,它仍然打印一个未捕获的FileSystemException
到控制台,即使打印"没有设置文件!"说明它被抓到了.其次,"没有设置文件"和错误被打印了两次-那么它是否捕捉到了两个错误?
Future<Settings> loadSettings() async {
try {
String fileName = SettingsService.settingsFileName;
File file = File("${await _localPath}/${dbFolderName}/${fileName}");
String fileContent = await file.readAsString();
Map<String, dynamic> settingJsonMap = jsonDecode(fileContent);
Settings settings = Settings.fromJson(settingJsonMap);
return settings;
} catch (e) {
print("No settings file!");
throw SettingsLoadingException("Unable to load settings");
}
}
I/flutter (10533): No settings file!
I/flutter (10533): No settings file!
E/flutter (10533): \[ERROR:flutter/runtime/dart_vm_initializer.cc(41)\] Unhandled Exception: FileSystemException: Cannot open file, path = '/data/user/0/com.yapps.smartdart/app_flutter/db/settings.json' (OS Error: No such file or directory, errno = 2)
E/flutter (10533): #0 \_File.open.\<anonymous closure\> (dart:io/file_impl.dart:356:9)
E/flutter (10533): \<asynchronous suspension\>
E/flutter (10533):
E/flutter (10533): \[ERROR:flutter/runtime/dart_vm_initializer.cc(41)\] Unhandled Exception: FileSystemException: Cannot open file, path = '/data/user/0/com.yapps.smartdart/app_flutter/db/settings.json' (OS Error: No such file or directory, errno = 2)
E/flutter (10533): #0 \_File.open.\<anonymous closure\> (dart:io/file_impl.dart:356:9)
E/flutter (10533): \<asynchronous suspension\>
E/flutter (10533):
E/SurfaceSyncer(10533): Failed to find sync for id=0
W/Parcel (10533): Expecting binder but got null!
我已经try 使用.Then和.catchError API,但都不起作用,导致了一个完全不同的错误.