types - 即使我将其转换为完全相同的类,变量类型也会返回 false

标签 types casting flutter

我不明白为什么构建函数中的 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/

相关文章:

types - 将 &[u8] 转换为字符串

python - 有什么好的方法来探索Python数据类型吗?

C++:reinterpret_cast 的奇怪行为

python - NumPy 数据类型比较

c# - TypeDelegator 平等不一致?

c - &((struct name *)NULL -> b) 在 printf 语句中

c++ - 如果我将 double 转换为 int,但 double 的值超出范围会怎样?

firebase - 无法根据用户电子邮件设置文档名称

dart - 引发了另一个异常:找不到 Material 小部件

flutter 2 : Error connecting to the service protocol: failed to connect to http://127. 0.0.1:1039/#58588