[英]A dismissed Dismissible widget is still part of the tree
关于这个错误似乎有很多问题,但我还没有找到适合我的情况的答案。
我看到的行为是 Dismissible 工作,它触发并删除项目,但有一段时间它在 ListView 中显示错误。 我猜它正在等待树根据 Stream<List> 更新,这反过来又从 Firebase 中删除记录。
我的流构建器...
return StreamBuilder<List<Person>>(
stream: personBloc.personsByUserId(userId),
builder: (context, snapshot) {
...
}
我的 ListView.builder()
ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (context, index) {
var person = snapshot.data[index];
return GestureDetector(
onTap: () {
Navigator.of(context)
.pushNamed('/reading/${person.personId}');
},
child: Dismissible(
key: Key(person.personId),
direction: DismissDirection.endToStart,
onDismissed: (direction) {
personBloc.deletePerson(person.personId);
},
background: Container(
child: Padding(
padding: const EdgeInsets.all(15.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Icon(
FontAwesomeIcons.trash,
color: Colors.white,
),
Text(
'Delete',
style: TextStyle(color: Colors.white),
textAlign: TextAlign.right,
),
],
),
),
color: Colors.red,
),
child: AppCard(
//Bunch of properties get set here
),
),
);
},
我的删除人
deletePerson(String personId) async {
fetchPersonId(personId).then((value) {
if (value.imageUrl.isNotEmpty) {
removeImage();
}
db.deletePerson(personId);
});
}
我试过将 onDismissed 更改为 confirmDismiss ,但没有运气。
有什么建议?
当您使用Dismissible
小部件关闭但尚未从ListView.builder
使用的列表中删除项目时,就会发生这种情况。 如果您的列表存储在本地,延迟不是问题,您可能永远不会看到这个问题,但是因为您使用的是Firestore
(我假设,根据您提到的Firebase
),那么询问之间会有一些延迟要从DB
删除的项目和应用程序上更新的列表。 为避免此问题,您可以将本地列表与来自Stream
列表分开管理。 在流更改时更新状态,但允许您从本地列表中本地删除项目并避免此类视图错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.