gpt4 book ai didi

dart - Flutter 可忽略的唯一键

转载 作者:IT王子 更新时间:2023-10-29 06:55:06 27 4
gpt4 key购买 nike

我有一个 Dismissible 的列表小部件如下:

Dismissible(
direction: DismissDirection.endToStart,
key: Key(widget.data[i]),
onDismissed: (direction) {
widget.onRemoveRequest(i, widget.data[i]);
},
background: Container(
color: Colors.red,
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Padding(
padding: const EdgeInsets.only(right: 20.0),
child: Text(
"Delete",
textAlign: TextAlign.right,
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.w500,
fontSize: 16.0,
),
),
),
],
),
),
child: CustomTextField(
padding: const EdgeInsets.only(left: 30.0, right: 30.0),
hintText: widget.newEntryHint,
text: widget.data[i],
keyboardType: TextInputType.multiline,
onChanged: (val) {
widget.onChanged(i, val);
},
),
)

它按预期工作,除了删除匹配对象时。

注意:widget.onRemoveRequest从源数据中删除指定索引处的对象,widget.data .

widget.dataList<String> .我将这些作为 key 提供,但是每当我有两个匹配的字符串并忽略一个时,我就会收到一个错误,因为 Dismissible不会从树中移除(可以理解)。

A dismissed Dismissible widget is still part of the tree.

那么对于一个字符串列表,我如何才能确保每个字符串都有一个唯一的键,即使实际字符串相等/匹配?

最佳答案

您需要为每个数据分配一个唯一标识符。足够独特的东西不包含任何重复项。然后您可以将该唯一标识符与 Key 相关联。

这不能仅通过原始对象(例如 StringInt)来完成。您需要将数据映射到自定义对象。

下面的类就是一个很好的例子:

class Data {
final String id;
final String title;

Data({this.id, this.title});
}

这将允许您执行以下操作:

Dismissible(
key: Key(widget.data[i].id),
...
)

您可以使用 uuid 为您的数据生成自定义 ID包,或使用自定义算法(例如增量索引)。

但请确保您的 ID 对于每个项目都是唯一的,并且在该项目的整个生命周期内保持不变(即使在更新之后)。

关于dart - Flutter 可忽略的唯一键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51002775/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com