gpt4 book ai didi

flutter - 为什么我的 Dart 构造函数返回动态对象而不是类型化对象?

转载 作者:IT王子 更新时间:2023-10-29 07:10:26 31 4
gpt4 key购买 nike

我正在解析一些 JSON 以将存储的数据读入自定义对象。我只是使用 jsonDecode 实现了这个来自 dart:convert 并写一个 fromJson()我的每个自定义对象的构造函数方法。它们是嵌套的 - 所以 TopicList对象有一个属性是 List<Topic> .我写了 fromJson() TopicList 上的构造函数和 Topic ,我正在尝试使用 map获取解码后的 JSON 字符串并从中创建一个对象。但它失败了,因为 map 返回的列表类型错误,尽管它是从构造函数方法创建的。

class TopicList {
List<Topic> topics;

TopicList() {}

TopicList.fromJson(String jsonTopicList) {
Map decoded = jsonDecode(jsonTopicList);

// this *doesn't* work
topics = decoded['topics'].map((t) => Topic.fromJson(t)).toList();

// this does work
topics = [];
for (Map<String,dynamic> t in decoded['topics']) {
Topic newT = Topic.fromJson(t);
topics.add(newT);
}
}
}

class Topic {
String topic;

Topic({this.topic});

Topic.fromJson(Map<String, dynamic> t) {
this.topic = t['topic'];
}
}

当我尝试/捕获 map 时它告诉我 map().toList() 的方法调用返回 List<dynamic>而不是 List<Topic> .

现实情况比这更复杂,具有更高级别(属于 List 的其他对象的另一个 Topic)和其他属性。但这是正在发生的事情的核心。

我对变通办法不感兴趣 - 我有其中之一,它在上面的代码中有效。但我想了解为什么看似一个对象的构造函数 - 在这个例子中,它是 Topic.fromJson() - 正在返回动态对象而不是 Topic .

最佳答案

.map() 一个类型参数。

topics = decoded['topics'].map<Topic>((t) => Topic.fromJson(t)).toList();

关于flutter - 为什么我的 Dart 构造函数返回动态对象而不是类型化对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57696678/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com