clo*_*ker 1 flutter flutter-layout
我在 Flutter 中有一个ListView允许用户动态添加项目的项目。添加项目后,我希望列表滚动到已添加的项目。我已将 a 附加ScrollController到,ListView以便我可以用来animateTo滚动,但我不确定如何确定向下滚动到的偏移量。我有这样的事情:
_scrollController.animateTo(
addedIndex.toDouble() * 100,
curve: Curves.easeOut,
duration: const Duration(milliseconds: 300),
);
Run Code Online (Sandbox Code Playgroud)
其中addedIndex是项目添加到列表的顺序。但这并不完全有效,而且似乎只有当我能够计算出列表中每个项目的高度时它才有效,我不知道该怎么做。有没有更好的方法来确定滚动到的确切位置?
首先,创建一个新的全局密钥。
\n\nfinal GlobalKey globalKey = GlobalKey();\nRun Code Online (Sandbox Code Playgroud)\n\n其次,将 globalKey 添加到要移动到的小部件中。
\n\n然后,根据globalKey获取widget位置。
\n\nRenderBox box = globalKey.currentContext.findRenderObject();\nOffset offset = box.localToGlobal(Offset.zero);\nRun Code Online (Sandbox Code Playgroud)\n\n获取的widget位置是相对于当前页面显示状态而言的,widget高度包括状态栏和AppBar高度。
\n\n状态栏高度
\n\nimport 'dart:ui\xe2\x80\x99; \nMediaQueryData.fromWindow(window).padding.top\nRun Code Online (Sandbox Code Playgroud)\n\n应用栏高度 56.0
\n\n需要添加scrollView的偏移量
\n\ndouble animationHeight = _controller.offset + offset.dy - MediaQueryData.fromWindow(window).padding.top - 56.0;\n_controller.animateTo(animationHeight, duration: Duration(milliseconds: 500), curve: Curves.decelerate);\nRun Code Online (Sandbox Code Playgroud)\n\n希望它能帮助你。
\n| 归档时间: |
|
| 查看次数: |
2781 次 |
| 最近记录: |