【问题标题】:The element type 'Iterable<Widget>' can't be assigned to the list type 'Widget'元素类型“Iterable<Widget>”不能分配给列表类型“Widget”
【发布时间】:2021-06-13 20:15:46
【问题描述】:

我正在使用 sqlite 制作应用程序,当我尝试将数据放入小部件时,我遇到了错误。 我正在关注一个教程,它给了我这个错误: 元素类型“Iterable”不能分配给列表类型“Widget”。

 FutureBuilder<List<Reminder>>(
          future: _reminders,
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              _currentReminders = snapshot.data!;
              return ListView(children: [
                snapshot.data!.map<Widget>((reminder) {
                  return ReminderCard(
                      name: reminder.name, details: reminder.details);
                }).toList(),
  • 新的错误信息: 不能将元素类型“List”分配给列表类型“Widget”.dartlist_element_type_not_assignable

元素类型'List'不能分配给列表类型'Widget'.dartlist_element_type_not_assignable 可迭代映射(T Function(Reminder) f) 飞镖:核心 返回一个新的惰性 [Iterable],其中包含通过按迭代顺序在此 Iterable 的每个元素上调用 f 创建的元素。 此方法返回映射元素的视图。只要返回的 [Iterable] 没有被迭代,提供的函数 [f] 就不会被调用。转换后的元素不会被缓存。对返回的 [Iterable] 进行多次迭代将在同一个元素上多次调用提供的函数 [f]。 返回的可迭代对象上的方法允许在不需要结果的任何元素上省略调用 f。例如,[elementAt] 可能只调用一次 f。 Reminder 是 DB 元素的类。

 Reminder(
      {this.id = 0,
      required this.name,
      required this.details,
      required this.save});

  factory Reminder.fromMap(Map<String, dynamic> json) => Reminder(
      id: json["id"],
      name: json["name"],
      details: json["details"],
      save: json["false"]);

  Map<String, dynamic> toMap() => {
        "id": id,
        "name": name,
        "details": details,
        "save": save,
      };
}

你能帮我解决这个问题吗?

【问题讨论】:

    标签: sql flutter sqlite dart


    【解决方案1】:
    1. snapshot.data!.map&lt;widget&gt; - 我不认为widget 是有效类型,它应该是Widget

    2. 如果您想在 ListView 子视图中使用 .map 函数,您应该将映射结果 - 可迭代 - 转换为列表并使用扩展运算符将此列表传播到子视图中:

      ListView(children: [
        ...snapshot.data!.map<widget>((reminder) {
          return ReminderCard(
            name: reminder.name, details: reminder.details);
        }).toList(),
      

    【讨论】:

    • 是的,它是小部件,但我尝试更改类型,所以我忘记了大写字母。
    • 您能分享一下错误和更改后的完整更新代码吗?
    • 好吧,我更新了你告诉我的代码,但这是github上的代码。 github.com/RarLasebai/reminder3
    • 我看到你还没有使用扩展运算符:...snapshot.data!.map&lt;Widget&gt;((reminder) { 在第 55 行,homeScreen.dart。
    • 那是一个不同的话题 :) 为此创建一个新问题并将其标记为已回答。
    猜你喜欢
    • 2018-10-27
    • 2019-11-29
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    相关资源
    最近更新 更多