[英]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.