【问题标题】:Dart Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Iterable<Map<dynamic, dynamic>>' in type castDart 未处理的异常:类型 'List<dynamic>' 不是类型转换中类型 'Iterable<Map<dynamic, dynamic>>' 的子类型
【发布时间】:2022-01-04 10:18:08
【问题描述】:

我正在开发一个 Flutter 应用程序,当我将它升级到 Flutter 2.0 时,开始出现一个新错误。 这是关于类型转换的错误,但我不确定为什么会发生,因为旧版本没有问题。 错误如下:

Dart Unhandled Exception: type 'List<dynamic>' is not a subtype of 

type 'Iterable<Map<dynamic, dynamic>>' in type cast, stack trace: #0      UserModel._convertCartItems (package:test_app/model/user.dart:67:31)
E/flutter (30545): #1      new UserModel.fromSnapshot (package:test_app/model/user.dart:58:12)
E/flutter (30545): #2      UserServices.getUserById.<anonymous closure> (package:test_app/services/user.dart:33:26)
E/flutter (30545): <asynchronous suspension>
E/flutter (30545): #3      UserProvider._onStateChanged (package:test_app/provider/user.dart:125:20)
E/flutter (30545): <asynchronous suspension>
E/flutter (30545): 

与之相关的代码是:

    List<CartItemModel> _convertCartItems(List cart) {
    List<CartItemModel> convertedCart = [];
    for (Map cartItem in cart as Iterable<Map<dynamic, dynamic>>) {
      convertedCart.add(CartItemModel.fromMap(cartItem));
    }
    return convertedCart;
  }

我试图删除as Iterable&lt;&gt;,但应用程序只是渲染了一次并开始了一个新的错误。

【问题讨论】:

  • 你不能在一个简单的 List&lt;dynamic&gt; 上投射一个 'Iterable>`。您完全将编译器与一半推断和一半声明的类型混淆了。我的意思是,您的 Parameter 是 List 类型,稍后您尝试将其转换(而不是解析!)它为完整的其他结构。你应该尽量精确地使用类型,或者让 Dart 自己推断类型(尽可能地)。否则,您可能会遇到严重的问题。

标签: firebase flutter iterable typecast-operator


【解决方案1】:

你可以在没有 for 循环的情况下试试这个:

  List<CartItemModel> _convertCartItems(List cart) {

    List<CartItemModel> convertedCart = [];

    convertedCart = cart.map((e) => CartItemModel.fromJson(e)).toList();

    return convertedCart;

  }

【讨论】:

    【解决方案2】:

    您的cart 变量是一个列表,而不是一个地图。您需要将迭代过程更改为:

    for (final rawCartItem in cart) {
      convertedCart.add(CartItemModel.fromMap(rawCartItem));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      • 2021-02-11
      • 2021-09-20
      • 2021-12-29
      • 2020-05-24
      • 2020-06-28
      • 2019-09-26
      相关资源
      最近更新 更多