请参阅我的代码:在 dart 当我尝试分配 值(value)图 在 参数映射 cleintRequest 我遇到了这个异常,请任何人指导我
const Map<String, int> value = {"resourceExpiredHour": 24};
final Map<String, dynamic> params = {
"cname": '45',
"uid": '33232',
"clientRequest": value
};
最佳答案
您的问题是您误解了 Dart 中的类型系统。变量既有类型,也有你正在创建的对象本身的类型。
如果是 Map
起初这可能有点令人困惑。例如。:
const Map<String, int> value = {"resourceExpiredHour": 24};
print({
"cname": '45',
"uid": '33232',
"clientRequest": value
}.runtimeType); // _InternalLinkedHashMap<String, Object>
print(<String, dynamic>{
"cname": '45',
"uid": '33232',
"clientRequest": value
}.runtimeType); // _InternalLinkedHashMap<String, dynamic>
如您所见, Map 的类型可以自动确定,也可以通过显式指定类型来强制确定。在这种情况下,Dart 试图查看用作值的所有不同类型的共同点。在这种情况下,这是
Object
自从 String
和 Map<String, int>
除了它们都是对象之外没有任何共同点。您的问题是,如果您有 disabled implicit type casting,则以下代码不正确:
final Map<String, dynamic> params = {
"cname": '45',
"uid": '33232',
"clientRequest": value
};
这里定义的映射将被确定为Map<String, Object>
但是您将其强制转换为只能指向 Map<String, dynamic>
的变量这给了你的错误。一个可能的解决方法是在创建 map 时告诉您实际想要的类型,例如:
final Map<String, dynamic> params = <String, dynamic>{
"cname": '45',
"uid": '33232',
"clientRequest": value
};
或者用这个来简化它,因为 tr
将自动确定为 Map<String, dynamic>
类型的变量: final params = <String, dynamic>{
"cname": '45',
"uid": '33232',
"clientRequest": value
};
并修复您的示例:void main() {
const value = {"resourceExpiredHour": 24};
final params = <String, dynamic>{
"cname": '45',
"uid": '33232',
"clientRequest": value
};
print(params); // {cname: 45, uid: 33232, clientRequest: {resourceExpiredHour: 24}}
}
我还应该适本地补充一下 dynamic
这个特定示例实际上不需要,因为我们也可以这样做(因为 Map<String, Object>
是 params
的完全好类型):void main() {
const value = {"resourceExpiredHour": 24};
final params = {
"cname": '45',
"uid": '33232',
"clientRequest": value
};
print(params); // {cname: 45, uid: 33232, clientRequest: {resourceExpiredHour: 24}}
}
关于flutter - 未处理的异常 : InternalLinkedHashMap<String, Object>' 不是 Map<String, String> 类型的子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63188589/