gpt4 book ai didi

Flutter:滚动到 ListView 中的小部件

转载 作者:IT老高 更新时间:2023-10-28 12:30:46 24 4
gpt4 key购买 nike

如何滚动到 ListView 中的特殊小部件?例如,如果我按下特定按钮,我想自动滚动到 ListView 中的某个 Container

ListView(children: <Widget>[
Container(...),
Container(...), #scroll for example to this container
Container(...)
]);

最佳答案

到目前为止,最简单的解决方案是使用 Scrollable.ensureVisible(context) .因为它为您做所有事情并适用于任何小部件尺寸。使用 GlobalKey 获取上下文。

问题是 ListView 不会呈现不可见的项目。这意味着您的目标很可能不会被构建。这意味着您的目标将没有 context ;阻止您在没有更多工作的情况下使用该方法。

最后,最简单的解决方案是将您的 ListView 替换为 SingleChildScrollView 并将您的 child 包装到 Column 中。示例:

class ScrollView extends StatelessWidget {
final dataKey = new GlobalKey();

@override
Widget build(BuildContext context) {
return new Scaffold(
primary: true,
appBar: new AppBar(
title: const Text('Home'),
),
body: new SingleChildScrollView(
child: new Column(
children: <Widget>[
new SizedBox(height: 160.0, width: double.infinity, child: new Card()),
new SizedBox(height: 160.0, width: double.infinity, child: new Card()),
new SizedBox(height: 160.0, width: double.infinity, child: new Card()),
// destination
new Card(
key: dataKey,
child: new Text("data\n\n\n\n\n\ndata"),
)
],
),
),
bottomNavigationBar: new RaisedButton(
onPressed: () => Scrollable.ensureVisible(dataKey.currentContext),
child: new Text("Scroll to data"),
),
);
}
}

注意:虽然这允许轻松滚动到所需的项目,但请考虑仅对小的预定义列表使用此方法。至于更大的列表,您会遇到性能问题。

但是可以使 Scrollable.ensureVisibleListView 一起工作;虽然这需要更多的工作。

关于Flutter:滚动到 ListView 中的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49153087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com