首页 > 解决方案 > 元素类型'Iterable'不能分配给列表类型'Widget'

问题描述

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

 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 Iterable map(T Function(Reminder) f) dart:core 返回一个新的惰性 [Iterable],其中包含通过在每个上调用 f 创建的元素此 Iterable 的元素按迭代顺序。此方法返回映射元素的视图。只要返回的 [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,
      };
}

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

标签: sqlfluttersqlitedart

解决方案


  1. snapshot.data!.map<widget>- 我不认为这widget是一个有效的类型,它应该是Widget.

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

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

推荐阅读