Flutter Error| A dismissed Dimissible widget is still part of the tree
FlutterでDismissible Widgetで、スワイプによる削除を実装したところ、
A dismissed Dismissible widget is still part of the tree. Make sure to implement the onDismissed handler and to immediately remove the Dismissible widget from the application once that handler has fired. Se also: https://flutter.dev/docs/testing/errors
というエラーが発生した。
Dismissible WidgetのonDismissedで、
onDismissed: (direction) {
if (direction == DismissDirection.endToStart) {
history.delete();
}
},
のように削除できるようにする。historyは次のようにHiveObjectをextendsしたクラスインスタンス。
class HistoryHive extends HiveObject {
// 省略
}
どうやら、
Widget build(BuildContext context, WidgetRef ref) {
return ValueListenableBuilder<Box<HistoryHive>>(
valueListenable: Boxes.getHistories().listenable(),
builder: (context, box, _) {
final histories = box.values.toList().cast<HistoryHive>();
if (histories.isEmpty) {
return const Text("History is empty");
} else {
return ListView.builder(
itemCount: histories.length,
itemBuilder: (context, i) {
final history = histories[i];
return Dismissible(
key: Key(i.toString()),
child: Container()
:
省略
のように、KeyをKey(i.toString())
としていたが、削除後、同じキーが他のWidgetに使われてしまい、キーが消せない。そのため、"still part of the tree"というエラーが発生していた模様。
Dismissible(
key: UniqueKey(),
と、UniqueKey()を割り当てることで同じキーが使いまわされることはなくなり、エラーは消えた。
参考
- FlutterのListViewでリストを削除した際のA dismissed Dismissible widget is still part of the tree
- How to fix "A dismissed Dismissible widget is still part of the tree." error in flutter
Author And Source
この問題について(Flutter Error| A dismissed Dimissible widget is still part of the tree), 我々は、より多くの情報をここで見つけました https://zenn.dev/tardigrader/articles/d9245879bd4f43著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol