我对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,但都不起作用,导致了一个完全不同的错误.

推荐答案

你首先会感到困惑的是,FileSystemException是你正在使用的插件的本机错误.所以别担心这一点.错误只是在插件端被捕获,打印的错误消息也是如此.

第二件事是信息被打印两次,不应该与FileSystemException有任何关系.我的猜测是您将调用该方法两次.如果是,您可以通过在调试模式下运行此代码并使用断点来确认这一点

Flutter相关问答推荐

Flutter bloc -如何使用BlocBuilder?

Flutter 导致底部溢出

当MyChangeNotifier更改时如何计算函数,而无需在构建方法中进行不必要的调用- Flutter

如何从外部控制有状态窗口小部件本身?

无法在主屏幕视图中设置当前日期容器'

在Android Studio的新用户界面中未找到热重新加载

有没有方法可以从当前时间轻松计算TimeStamp?

在创建显示此错误的Flutter 深度链接时

DART:如何判断有时可以为空的泛型类型?

为什么FloatingActionButton未显示

使用现有Map方法对子类克隆方法的逻辑进行Dart标准化

请求已在 flutter 中发送到 django 服务器,并且已返回响应,但条件仍然为 false

如何在flutter中更改showModalBottomSheet小部件中CheckboxListTile小部件的值?

Firestore 不会取代 map

为什么我的图标的一半在定位小部件中消失了?

「Flutter」错误:没有名为'kind'的命名参数

Flutter canvas 绘制不同 colored颜色 的原始点

如何将金钱格式化为数以百万计的Flutter 动?

Flutter 如何要求用户在应用程序中设置电话密码?

有没有办法帮助我修复类型 null 不是 Map 类型的子类型?