从 Dart 中的地图访问无效键时如何触发异常

Mag*_*s W 5 exception dart flutter

我正在使用 Dart/Flutter 解码 JSON 字符串,并且我想确保结果Map具有我期望的所有键。

    return MyRecord(
        id: jsonObj['id'],
        name: jsonObj['name'],
        description: jsonObj['description']
    );
Run Code Online (Sandbox Code Playgroud)

我以为如果我尝试访问地图中不存在的键,我会得到一个异常,但 Dart 却默默地返回null。我想我可以简单地使用类似的东西

    if( !(jsonObj.containsKey('id') 
       && jsonObj.containsKey('name') 
       && jsonObj.containsKey('description')) )
          throw new ArgumentError('Invalid JSON for converting to MyRecord: $jsonObj');
Run Code Online (Sandbox Code Playgroud)

但我希望有一种更方便的方法来实现我想要的?

Ski*_*Ski 9

仍然不是超级方便,但有可能:

MyRecord(
  id: jsonObj['id'] ?? (throw ArgumentError("id is required")),
Run Code Online (Sandbox Code Playgroud)

  • 如果使用这个,如何区分键缺失的情况和键存在且值为空的情况? (5认同)