我在Web应用程序中常见的事情是从服务器请求资源并将其作为dart中的Map处理.
import 'dart:convert';
const String sampleJSON = '''
{
"member": {
"meaningOfLife": 42
}
}
''';
Map<String, dynamic> getResource() {
// do some magic
return JSON.decode(sampleJSON);
}
Run Code Online (Sandbox Code Playgroud)
我假设JSON解码Map中的所有键都是字符串,但显然我不知道值的类型.在检查模式下,这工作得相当好.
以强模式分析上面的代码将告诉我: Unsound implicit cast from dynamic to Map<String, dynamic>
处理此类投射警告的好策略是什么?
Map getResource() {
// do some magic
return JSON.decode(sampleJSON);
}
Run Code Online (Sandbox Code Playgroud)
以后这可能是个问题:Iterable<String> keys = getResource().keys会发出警告.
Map<String, dynamic> getResource() {
// do some magic
return new Map<String, dynamic>.from(JSON.decode(sampleJSON));
}
Run Code Online (Sandbox Code Playgroud)
它不会降低性能吗?我仍然会收到警告Map<String, dynamic> meaning = getResource()["member"];
感谢您的建议.
如果您知道该类型,那么只需明确它
return JSON.decode(sampleJSON) as Map<String,dynamic>;
Run Code Online (Sandbox Code Playgroud)
Flutter团队禁止使用,as因为它引入了运行时检查并具有性能影响.如果相关,取决于您的要求.
或者,您可以将警告静音(可能在您的Dart版本中无效)
// ignore: STRONG_MODE_DOWN_CAST_COMPOSITE
return JSON.decode(sampleJSON);
Run Code Online (Sandbox Code Playgroud)
另请参阅抑制有关使用受保护成员的提示
| 归档时间: |
|
| 查看次数: |
589 次 |
| 最近记录: |