Types 变量类型返回false,即使我将其强制转换为完全相同的类

Types 变量类型返回false,即使我将其强制转换为完全相同的类,types,casting,flutter,Types,Casting,Flutter,我不明白为什么行打印(项目是MyClass)line对于所有项都返回false 正如您所看到的,该列表是MyClass项的列表,当我获得索引项时,我将其转换为MyClass。打印行代码仍然返回false 这是小部件的代码: import ...; class _ListTheatreState extends State<ListTheatre> { List<MyClass> items = []; @override void initState()

我不明白为什么行<代码>打印(项目是MyClass)line对于所有项都返回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();
}
导入。。。;
类(扩展状态){
列表项=[];
@凌驾
void initState(){
super.initState();
_getEvents();
}
_getEvents()异步{
最终url='…';
试一试{
Response res=wait http.get(url);
最终数据=json.decode(res.body);
this.items=数据[“数据”];
}捕获(e){
印刷品(e);
}
}
@凌驾
小部件构建(构建上下文){
返回ListView.builder(
itemCount:items.length,
itemBuilder:(上下文,索引){
最终MyClass项目=项目[索引];
打印(项目为MyClass);//**u ListCharterEstate();
}

Json.decode不知道如何神奇地创建您的对象类型。如果没有Json,就不可能知道返回的是什么,但我假设一个Json对象,在dart中它将是一个
Map
。您将它强制转换到MyClass,这不会失败,因为dart假设如果您强制转换某个对象,您已经检查了该类型orehand.如果您随后使用
对象,我敢肯定它会引发某种异常。返回false是因为该对象的类型是Map而不是MyClass。请尝试打印item.runtimeType-这会让您有更好的了解


您需要做的是解析json并使用它来创建MyClass的实例。您可以手动执行此操作,也可以使用代码生成。请参阅Flatter。

问题中没有足够的代码来诊断问题。但我不知道为什么在item变量不是MyClass类型之后,如果我将item强制转换为MyClass。