dart - 一个控制器用于两个滚动视图
问题描述
我有两个滚动视图。一个嵌套的有一个 SliverAppBar,然后是一个 SingleChildScrollView 用于我的其余内容(如下面的代码所示)。然后我有一个控制器来控制浮动操作按钮的不透明度,当向上和向下滚动时。
但是,控制器仅在我将它放在 NestedScroll 上时才起作用,然后它仅在滚动实际标题时起作用,而不是在滚动浏览其余内容时起作用。
如果我将相同的控制器添加到 SingleChildScrollView 它会使两个视图分别滚动。任何人的想法来修复?
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
resizeToAvoidBottomPadding: false,
body: NestedScrollView(
controller: _controller,
headerSliverBuilder: (BuildContext context, bool innerBoxScrolled){
return <Widget>[
SliverAppBar(
},
body:SingleChildScrollView(
),
我已缩短代码以仅显示两个视图。
这是我更改 FAB 不透明度的方法:
void _scrollListener() {
if(_controller.position.userScrollDirection == ScrollDirection.reverse){
setState(() {
_hideFAB = true;
});
}
if(_controller.position.userScrollDirection == ScrollDirection.forward){
setState((){
_hideFAB = false;
});
}
}
这是一个 GIF,显示 FAB 仅在 SliverAppBar 内滚动时发生变化:GIPHY
解决方案
使用ListView而不是SingleChildScrollView
,将其余内容放入 ListView
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
resizeToAvoidBottomPadding: false,
body: NestedScrollView(
controller: _controller,
headerSliverBuilder: (BuildContext context, bool innerBoxScrolled){
return <Widget>[
SliverAppBar(
},
body:ListView(
),
推荐阅读
- javascript - 为什么我的计算器连接而不是执行操作?
- javascript - document.querySelectorAll 在使用 chrome 80 运行的赛普拉斯中不起作用
- c# - 如何在 T-SQL 中将日期时间字段与字符串连接起来
- javascript - 打字稿:如何从两组不同的对象中获取具有相同属性值但不同键的对象
- angular - 合并两个 obervable,但在第一个完成之前不触发第二个
- python - 双重直接整合
- javascript - 当试图阻止玩家在击中某些最近的物体(块)后停止移动时,物体不起作用
- javascript - 通过 Ajax 加载页面时处理脚本加载
- python - 函数 foldByKey :使用元组内的整数进行计算,给出“int object not subscriptable”
- asp.net-core - 无法向特定用户发送消息。connection.on 未到达