我不明白为什么构建函数中的 print(item is MyClass);
行对所有项都返回 false。
如您所见,列表包含 MyClass 项,当我获得索引项时,我将其转换为 MyClass。打印行代码仍然返回 false。
这是小部件的代码:
import ...;
class _ListTheatreState extends State<ListTheatre> {
List<MyClass> items = [];
@override
void initState() {
super.initState();
_getEvents();
}
_getEvents() async {
final url = '...';
try {
http.Response res = await http.get(url);
final data = json.decode(res.body);
this.items = data["data"];
} catch(e) {
print(e);
}
}
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: items.length,
itemBuilder: (context, index) {
final MyClass item = items[index];
print(item is MyClass); // **<-- RETURNS FALSE**
...
},
);
}
}
class ListTheatre extends StatefulWidget {
ListTheatre({Key key}) : super(key: key);
@override
_ListTheatreState createState() => _ListTheatreState();
}
最佳答案
Json.decode 不知道如何神奇地创建您的对象类型。没有 json 就不可能知道到底返回了什么,但我假设是一个 json 对象,在 dart 中它是一个 Map<dynamic, dynamic>
。 .您正在将其转换为 MyClass,这不会失败,因为 dart 假定如果您正在转换某些内容,您已经事先检查了类型。如果您要使用 item
对象,我相当确定它会抛出某种异常。它返回 false,因为该对象的类型是 Map 而不是 MyClass。尝试打印 item.runtimeType - 它应该会给你一个更好的主意。
您需要做的是解析 json 并使用它来创建 MyClass 的实例。您可以手动执行此操作或使用代码生成。参见 flutter 的 json docs .
关于types - 即使我将其转换为完全相同的类,变量类型也会返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54298404/