【发布时间】:2018-06-23 15:53:47
【问题描述】:
我有一个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.data 是 List<String>。我将这些作为key 提供,但是每当我有两个匹配的字符串并关闭一个时,我都会收到错误,因为Dismissible 没有从树中删除(可以理解)。
A dismissed Dismissible widget is still part of the tree.
那么对于一个字符串列表,即使实际字符串相等/匹配,我如何确保每个都有一个唯一的键?
【问题讨论】:
-
你是否在没有那个小部件的情况下重建树?
-
我相信是的。我遍历
widget.data(我的字符串)并返回Dismissible小部件的列表。所以当onDismissed被调用时,我更新widget.data并调用setState来重建。该错误仅在data字符串匹配时发生,因此我认为是key是问题所在。
标签: dart key flutter dismissible