在我的应用程序中,我想在添加项目后滚动到 ListView 的底部。问题是它在添加项目之前向下滚动,因此隐藏了一个项目。有没有办法在项目渲染后调用滚动函数?
示例代码:
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
var _items = [];
var _counter = 0;
final _listViewController = ScrollController();
void _addItem() {
setState(() {
_items.add(++_counter);
});
_listViewController.jumpTo(_listViewController.position.maxScrollExtent);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Demo'),
),
body: ListView(
padding: const EdgeInsets.all(16.0),
controller: _listViewController,
children: [
..._items.map((i) => ListTile(title: Text(i.toString()))),
],
),
floatingActionButton: FloatingActionButton(
onPressed: _addItem,
child: Icon(Icons.add),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
经过一番搜索,我找到了答案:
void _addItem() {
setState(() {
_items.add(++_counter);
});
SchedulerBinding.instance.addPostFrameCallback((_) {
_listViewController.jumpTo(_listViewController.position.maxScrollExtent);
});
}
Run Code Online (Sandbox Code Playgroud)
来源: https ://stackoverflow.com/a/44142234/8722652
| 归档时间: |
|
| 查看次数: |
2988 次 |
| 最近记录: |