我不明白为什么构建函数中的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();
}
答案 0 :(得分:1)
Json.decode不知道如何神奇地创建对象类型。没有json,就无法确定确切返回了什么,但是我假设是一个json对象,在dart中,它将是Map<dynamic, dynamic>
。您将其强制转换为MyClass,这不会失败,因为dart假定如果您正在强制转换某些内容,则需要事先检查类型。如果随后要使用item
对象,则可以肯定它会引发某种异常。由于对象是Map类型而不是MyClass类型,因此返回false。尝试打印item.runtimeType-应该会给您一个更好的主意。
您需要做的是解析json并使用它创建MyClass实例。您可以手动执行此操作,也可以使用代码生成。参见flutter的json docs。