Flutter 编辑列表项

Den*_*dan 8 dart flutter

我的 flutter dart 脚本中有一个问题,这是我的脚本:

List<ReplyTile> replytile = new List<ReplyTile>();

replytile.add(
    new ReplyTile(
        member_photo: "photo",
        member_id: "001",
        date: "01-01-2018",
        member_name: "Denis",
        id: "001",
        text: "hallo.."
    )
);
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何在 id = 001.. 的 List 上编辑项目“member_name”?

Jac*_*ips 16

这假设 aReplyTile是一个小部件,如果不是,则不需要setState调用。

如果您可以保证该项目在列表中,请使用:

final tile = replytile.firstWhere((item) => item.id == '001');
setState(() => tile.member_name = 'New name');
Run Code Online (Sandbox Code Playgroud)

如果未找到该项目,则会引发异常。为了防止这种情况,请使用:

final tile = replytile.firstWhere((item) => item.id == '001', orElse: () => null);
if (tile != null) setState(() => tile.member_name = 'New name');
Run Code Online (Sandbox Code Playgroud)


Sha*_*hmi 6

下面是使用索引更新单个列表项的代码。您可以简单地为其创建扩展功能。

extension ListUpdate<T> on List<T> {
  List<T> update(int pos, T t) {
    List<T> list = [];
    list.add(t);
    replaceRange(pos, pos + 1, list);
    return this;
  }
}
Run Code Online (Sandbox Code Playgroud)

并像下面一样使用它来替换项目。

replytile.update(
    5, new ReplyTile(
        member_photo: "photo",
        member_id: "001",
        date: "01-01-2018",
        member_name: "Denis",
        id: "001",
        text: "hallo.."
    )
);
Run Code Online (Sandbox Code Playgroud)