带控制器的 SingleChildScrollView 第一次不滚动
SingleChildScrollView with controller does not scroll first time
我有一个要求,当用户向上滚动页面时,应显示应用栏标题。当它滚动到最小标题时应该隐藏。
这是因为页面内容也有标题。
我已经实现了带有控制器的 SingleChildScrollView 来执行此操作。
void initState() {
_controller = ScrollController();
_controller.addListener(_scrollListener);
super.initState();
}
_scrollListener() {
if (_controller.offset <= _controller.position.minScrollExtent &&
!_controller.position.outOfRange) {
setState(() {
_reachedTop = true;
});
} else {
setState(() {
_reachedTop = false;
});
}
}
_buildContent(BuildContext context) {
return SafeArea(
child: SingleChildScrollView(
controller: _controller,
child: widget.content,
));
}
_reachedTop 变量用于切换应用栏中的标题。
当我第一次尝试向上滚动时,它根本没有滚动,但显示了应用栏的标题。
我假设变量 _reachedTop 设置为 false。
然后当我第二次尝试滚动时它允许我滚动。
我认为这是由我用来设置变量的 setState 造成的。
我该如何解决这个问题?
还有其他方法吗?
使用 slivers
这里是 flutter 文档 link https://flutter.dev/docs/development/ui/advanced/slivers 了解更多关于 slivers
我有一个要求,当用户向上滚动页面时,应显示应用栏标题。当它滚动到最小标题时应该隐藏。 这是因为页面内容也有标题。
我已经实现了带有控制器的 SingleChildScrollView 来执行此操作。
void initState() {
_controller = ScrollController();
_controller.addListener(_scrollListener);
super.initState();
}
_scrollListener() {
if (_controller.offset <= _controller.position.minScrollExtent &&
!_controller.position.outOfRange) {
setState(() {
_reachedTop = true;
});
} else {
setState(() {
_reachedTop = false;
});
}
}
_buildContent(BuildContext context) {
return SafeArea(
child: SingleChildScrollView(
controller: _controller,
child: widget.content,
));
}
_reachedTop 变量用于切换应用栏中的标题。
当我第一次尝试向上滚动时,它根本没有滚动,但显示了应用栏的标题。 我假设变量 _reachedTop 设置为 false。
然后当我第二次尝试滚动时它允许我滚动。
我认为这是由我用来设置变量的 setState 造成的。
我该如何解决这个问题? 还有其他方法吗?
使用 slivers
这里是 flutter 文档 link https://flutter.dev/docs/development/ui/advanced/slivers 了解更多关于 slivers