我有一个NestedScrollView
当我使用时,它可以很好地自动隐藏AppBar(我想要的一项功能)SliverAppBar
。我遇到问题的地方是我使用ListView.Builder
作为下游的身体组件之一,我需要应用自己的ScrollController
到(或者似乎我需要在这里应用它)。这与NestedScrollView
我失去了应用程序栏的自动隐藏功能,该功能可以由NestedScrollView
and SliverAppBar
.
如果我附上ScrollController
on the NestedScrollView
然后它只跟踪滚动位置最大偏移量为 80.0,之后,使用更长的 ListView,我无法正确设置 animateTo,因为我可以将 ScrollController 直接附加到ListView.Builder
.
这是我的实现的片段/sudo 代码:
new Scaffold(
drawer: ...,
body: new NestedScrollView(
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
return [
new SliverAppBar(
title: new Text('Title'),
floating: true,
snap: true
)
]
}
body: new Stack(
children: <Widget>[
new PageView(
children: <Widget>[
new PageView1(implements ListViewBuilder),
new PageView2(implements ListView),
new PageView3(implements ListView),
]
controller: _pageController,
),
new FloatingActionButton
]
)
)
)
class PageView1 extends StateFulWidget {
...//Builder return scrollable with max offset of 2000.0
return new ListView.builder(
itemBuilder: itemBuilder,
itemCount: objects.length,
controller: _scrollController,
);
...
@override
void initState{
scrollController = new scrollController();
scrollController.animateTo(800.0, ....);
}
}
最好的部分是 PageView2 和 3 表现良好,在滚动行为上自动隐藏应用程序栏,因为我没有在那里创建 ScrollController。但是,PageView1 的行为不正确,并且应用栏的自动隐藏会中断。但是,我真的希望能够正确设置 animateTo,但如果不将控制器直接放置在 ListViewBuilder 上,我就无法做到这一点。
关于更好的实施可以帮助我实现这一目标有什么想法吗?
更新:我已经更新了我的实现,以更紧密地遵循 NestedScrollView 文档。但是,没有运气。看来在 NestedScrollView 上添加 ScrollController 仅跟踪 SliverAppBar 的位置,而 ScrollController.jumpTo 或 animateTo 仅跳转到 AppBar 的最大值(偏移 80)
我解决了..这根本不是我期望的工作方式。我将 SliverList 移至 headerSliverBuilder 中,它按照我想要的方式工作。我从这个 NestedScrollView 示例要点中得到了这样做的提示:https://gist.github.com/collinjackson/2bc6697d31e6b94ada330ef5e818a36f https://gist.github.com/collinjackson/2bc6697d31e6b94ada330ef5e818a36f