在Flutter提供的大多数Dismissible示例中,它们都是在ListView中关闭项目。例如,this。
我目前正在做的是这样的:
Widget build(BuildContext context) {
return new Scaffold(
key: _scaffoldKey,
appBar: new AppBar(
title: new Text(widget.title),
),
body: new Center(
child: new ListView(
children: <Widget>[
new Dismissible(
key: personKey,
child: new Text('Dismiss Me'),
onDismissed: (DismissDirection direction) {}
)
],
) // end ListView
) // end Center
); // end return
} // end build()
Run Code Online (Sandbox Code Playgroud)
关闭文本框后,出现错误:
被驳回的“可驳回”小部件仍是树的一部分。
确保实现onDismissed处理程序,并在该处理程序启动后立即从应用程序中删除Dismissible小部件。
浏览位于的Dismissible 源,我看到它检查了的状态_resizeAnimation,但是我不确定它是否适合Dismissible构造函数或onDismissed处理程序的总体方案。
Sal*_*ley 15
请尝试这个。我提供了UniqueKey作为Dismissible小部件的键,它工作得很好。
key: UniqueKey(),
Run Code Online (Sandbox Code Playgroud)
当小部件被关闭但未从树中删除时,由于状态仍包含被关闭的对象,因此会出现错误。onDismissed的理想实现应删除该项目并设置新状态
因此,在您的示例中,您将执行以下操作
onDismissed: (DismissDirection direction) { dismissPerson(person); }
Run Code Online (Sandbox Code Playgroud)
并在dismissPerson函数中删除该人并设置新状态。
dismissPerson(person) {
if (_personList.contains(person)) {
//_personList is list of person shown in ListView
setState(() {
_personList.remove(person);
});
}
}
Run Code Online (Sandbox Code Playgroud)
如果您引用问题中发布的相同链接,则该链接现在包含可实现的正确实现。为了方便起见,从链接中添加相关的代码片段
final Widget card = new Dismissible(
key: new ObjectKey(cardModel),
direction: _dismissDirection,
onDismissed: (DismissDirection direction) { dismissCard(cardModel); },
....
);
void dismissCard(CardModel card) {
if (_cardModels.contains(card)) {
setState(() {
_cardModels.remove(card);
});
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
最简单的方法1->为列表的每个项目设置唯一ID
var uuid = new Uuid();
new MyItem(title: "Sanjay Singh Bisht",color:"#123ab",uniqueId:uuid.v1()));
Run Code Online (Sandbox Code Playgroud)
如上文所述,“可禁用”窗口小部件需要唯一ID
2->现在删除项目很简单
if (items.contains(deletedItem)) {
setState(() {
items.remove(deletedItem);
});
}
Run Code Online (Sandbox Code Playgroud)
3-撤消删除项目只需更新该项目ID,以便Dismissible小部件始终具有唯一ID
setState(() {
deletedItem.uniqueId=uuid.v1();
});
Run Code Online (Sandbox Code Playgroud)
错误信息非常清楚。
确保实现 onDismissed 处理程序,并在该处理程序触发后立即从应用程序中删除 Dismissible 小部件。
空函数是不够的。一旦某个项目被消除,该小部件就必须从小部件树中删除。这意味着您必须从Dismissible您的ListView.
| 归档时间: |
|
| 查看次数: |
8141 次 |
| 最近记录: |