我在Web应用程序中常见的事情是从服务器请求资源并将其作为dart中的Map处理。
import 'dart:convert';
const String sampleJSON = '''
{
"member": {
"meaningOfLife": 42
}
}
''';
Map<String, dynamic> getResource() {
// do some magic
return JSON.decode(sampleJSON);
}
我认为JSON解码Map中的所有键都是字符串,但显然我不知道值的类型。在检查模式下,这相当不错。
在强模式下对上述代码进行分析会告诉我:Unsound implicit cast from dynamic to Map<String, dynamic>
处理此类投射警告的好策略是什么?
Map getResource() {
// do some magic
return JSON.decode(sampleJSON);
}
稍后这可能是一个问题:Iterable<String> keys = getResource().keys
会发出警告。
Map<String, dynamic> getResource() {
// do some magic
return new Map<String, dynamic>.from(JSON.decode(sampleJSON));
}
它不会降低性能吗?我仍然会收到Map<String, dynamic> meaning = getResource()["member"];
感谢您的建议。
答案 0 :(得分:5)
如果您知道该类型,那么只需明确
return JSON.decode(sampleJSON) as Map<String,dynamic>;
Flutter团队禁止使用as
,因为它引入了运行时检查并且具有性能影响。如果相关,则取决于您的要求。
或者,您可以将警告静音(可能在您的Dart版本中无效)
// ignore: STRONG_MODE_DOWN_CAST_COMPOSITE
return JSON.decode(sampleJSON);