dart Flutter编辑列表项

iezvtpos  于 2022-12-16  发布在  Flutter
关注(0)|答案(5)|浏览(139)

我在我的 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.."
    )
);

我的问题是:如何编辑ID = 001的列表中的项目“member_name”..?

ttisahbt

ttisahbt1#

这里假设ReplyTile是一个小部件,如果不是,就不需要setState调用。
如果可以保证项目在列表中,请用途:

final tile = replytile.firstWhere((item) => item.id == '001');
setState(() => tile.member_name = 'New name');

如果未找到该项,则会引发异常。要防止出现这种情况,请用途:

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

nxowjjhe2#

下面是使用索引更新列表中单个项目的代码。您可以简单地创建一个相同的扩展函数。

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;
  }
}

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

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

i1icjdpr3#

小部件应该是不可变的(带有final字段),并且不应该由父小部件操纵。
通常你不需要存储一个小部件列表,只要调用build方法,就应该从头开始重新构建小部件。
相反,将显示的数据存储在一个单独的数据结构中(例如创建一个类ReplyTileData),该数据结构应该存储在State类中。
build方法中,读取数据并使用当前数据示例化ReplyTile小部件。
当你想修改数据时,用setState包围修改代码,这将触发一个完整的重建(再次调用build)。

yzuktlbb

yzuktlbb4#

假设你有一个列表

List list =[{id=11,name=aaaa},{id=12,name=bbbb},{id=13,name=ccc}];

现在,您只需要更新索引数据假设

var data ={id=12,name=bbbb};
int index = list.indexof(data);

现在将列表更新为

list.insert(index,{id=12,name=fffffff});

现在输出为

print(list);
// [{id=11,name=aaaa},{id=12,name=fffffff},{id=13,name=ccc}];
bttbmeg0

bttbmeg05#

假设你有一个列表

List list =[{id=11,name=aaaa},{id=12,name=bbbb},{id=13,name=ccc}];

我们必须从列表中找到该对象的索引。

var data ={id=12,name=bbbb};
int index = list.indexof(data);

现在,您可以更新列表

list[index] = {id=12,name=fffffff}

相关问题