要避免在选项选择时重建ListView,可以使用StatefulWidgets和Keys。具体来说,我们可以将ListView及其所有孩子包装在一个StatefulWidget中,并在我们需要访问选项状态的地方使用一个Key。这将使Flutter知道哪些列表项需要重新构建,而不是重建整个列表。 下面是一个示例代码片段:
class MyListView extends StatefulWidget {
@override
_MyListViewState createState() => _MyListViewState();
}
class _MyListViewState extends State {
int _selectedIndex = -1;
final List _items = ["Item 1", "Item 2", "Item 3", "Item 4"];
final _itemKeys = List();
@override
void initState() {
super.initState();
for (var i = 0; i < _items.length; i++) {
_itemKeys.add(GlobalKey());
}
}
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: _items.length,
itemBuilder: (BuildContext context, int index) {
return GestureDetector(
onTap: () => setState(() {
_selectedIndex = index;
}),
child: Card(
key: _itemKeys[index], // Use key here
color: _selectedIndex == index ? Colors.blue : null,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Text(_items[index]),
),
),
);
},
);
}
}