Flutter编辑清单项目

时间:2018-10-14 08:04:55

标签: dart flutter

我的飞镖脚本中有一个问题,这是我的脚本:

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'??

4 个答案:

答案 0 :(得分:4)

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

extension ListUpdate<T> on List {
    List update(int pos, T t) {
        List<T> list = new 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.."
    )
);

答案 1 :(得分:3)

这假设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');

答案 2 :(得分:0)

小部件应该是不可变的(带有final字段),并且不应由父级小部件操纵。

通常,您不应该存储小部件列表。每当调用build方法时,都应从头开始重建小部件。

相反,将显示的数据存储在具有可变字段的单独数据结构中(例如,创建类ReplyTileData)。该数据结构应存储在您的State类中。

build方法中,读取数据并使用当前数据实例化ReplyTile小部件。

要修改数据时,请用setState括住修改代码。这将触发完全重建(再次调用{build)。

答案 3 :(得分:0)

假设你有一个类似的列表

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