如何检测 ListView 项目是否添加到屏幕外?
How can I detect if ListView item added off-screen?
如何检测是否在屏幕外添加了 ListView 项目?如果它是在屏幕外添加的,我想滚动到新添加的项目。
下面是一个最小的例子。如果您一直按 + 按钮,最终将在屏幕外添加一个项目。我想检测这种情况,然后滚动到新添加的项目。
class _MyHomePageState extends State<MyHomePage> {
List<String> _items = [];
void _addItem() {
final count = _items.length + 1;
setState(() {
_items.add('Item $count');
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: ListView.builder(
itemCount: _items.length,
itemBuilder: (_, index) {
return Container(
height: 50,
child: Card(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
Text(_items[index]),
],
),
),
);
}),
floatingActionButton: FloatingActionButton(
onPressed: _addItem,
tooltip: 'Add Item',
child: Icon(Icons.add),
),
);
}
}
https://dartpad.dev/81dcfd6e4255bde548751180c54a9ade
检查这个。
你需要使用滚动控制器
如何检测是否在屏幕外添加了 ListView 项目?如果它是在屏幕外添加的,我想滚动到新添加的项目。
下面是一个最小的例子。如果您一直按 + 按钮,最终将在屏幕外添加一个项目。我想检测这种情况,然后滚动到新添加的项目。
class _MyHomePageState extends State<MyHomePage> {
List<String> _items = [];
void _addItem() {
final count = _items.length + 1;
setState(() {
_items.add('Item $count');
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: ListView.builder(
itemCount: _items.length,
itemBuilder: (_, index) {
return Container(
height: 50,
child: Card(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
Text(_items[index]),
],
),
),
);
}),
floatingActionButton: FloatingActionButton(
onPressed: _addItem,
tooltip: 'Add Item',
child: Icon(Icons.add),
),
);
}
}
https://dartpad.dev/81dcfd6e4255bde548751180c54a9ade
检查这个。 你需要使用滚动控制器