I try to understand a behavior between 2 stateful widgets.
I have a simple listeView and each Item is an ItemTest. I created in the ItemTestState a property that is initialized with the widget.item in InitState().
With this code I got a "Dismissible widget is still part of the tree" when a try to remove an item, and I don't know why.
class DismissibleExample extends StatefulWidget {
const DismissibleExample({super.key});
@override
State<DismissibleExample> createState() => _DismissibleExampleState();
}
class _DismissibleExampleState extends State<DismissibleExample> {
List<int> items = List<int>.generate(100, (int index) => index);
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: items.length,
padding: const EdgeInsets.symmetric(vertical: 16),
itemBuilder: (BuildContext context, int index) {
return ItemTest(
item: items[index],
onDismissed: () {
setState(() {
items.removeAt(index);
});
},
);
},
);
}
}
class ItemTest extends StatefulWidget {
const ItemTest({
super.key,
required this.item,
required this.onDismissed,
});
final int item;
final Function() onDismissed;
@override
State<ItemTest> createState() => _ItemTestState();
}
class _ItemTestState extends State<ItemTest> {
int item = 0;
@override
void initState() {
item = widget.item;
super.initState();
}
@override
Widget build(BuildContext context) {
return Dismissible(
background: Container(
color: Colors.green,
),
key: ValueKey<int>(item),
onDismissed: (direction) {
widget.onDismissed();
},
child: ListTile(
title: Text(
'Item $item',
),
),
);
}
}
Thanks for your help

The issue you’re facing is due to the way you’re handling the
keyin yourDismissible widget.you’re initializing
itemwithwidget.itemin theinitState()method. This value is not updated when the widget rebuilds.