gpt4 book ai didi

flutter - 使用 NestedScrollView 并向 ListView 下游提供 ScrollController

转载 作者:IT老高 更新时间:2023-10-28 12:42:22 26 4
gpt4 key购买 nike

我有一个 NestedScrollView,当我使用 SliverAppBar 时,它可以很好地自动隐藏 AppBar(我想要的一个功能)。我遇到问题的地方是我使用 ListView.Builder 作为下游的主体组件之一,我需要将其自己的 ScrollController 应用到(或者似乎我需要应用它这里)。这与 NestedScrollView 冲突,我失去了由 NestedScrollViewSliverAppBar 方便处理的 appbar 的自动隐藏。

如果我在 NestedScrollView 上附加 ScrollController 那么它只跟踪滚动位置直到偏移 80.0 之后,使用更长的 ListView 我无法正确animateTo 我可以使用直接附加到 ListView.Builder 的 ScrollController。

这是我的实现的片段/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 表现得很好,因为我没有在那里创建 ScrollControllers,所以在滚动行为上自动隐藏了应用栏。但是,PageView1 行为不正确,并且 appbar 的 autoHide 中断。但是,我真的希望能够正确地进行动画处理,并且如果不将 Controller 直接放在 ListViewBuilder 上就无法这样做。

有什么想法可以帮助我实现这一目标吗?

更新:我已经更新了我的实现,以更紧密地遵循 NestedScrollView 文档。但是,没有运气。好像在 NestedScrollView 上添加 ScrollController 只跟踪 SliverAppBar 的位置,而 ScrollController.jumpTo 或 animateTo 只跳转到 AppBar 的最大值(偏移 80)

我解决了.. 这根本不是我所期望的。我将 SliverList 移到 headerSliv​​erBuilder 中,它按我想要的方式工作。我从这个 NestedScrollView 示例要点中得到了提示:https://gist.github.com/collinjackson/2bc6697d31e6b94ada330ef5e818a36f

最佳答案

关注NestedScrollViewExample :

将您的 ListView 更改为 SliverList 或 SliverFixedExtentList 并将其包裹在安全区域和 CustomScrollView 内:

return SafeArea(
top: false,
bottom: false,
child: Builder(builder: (BuildContext context) => CustomScrollView(
slivers: <Widget>[
return SliverFixedExtentList(
itemExtent: 100.0,
delegate: SliverChildBuilderDelegate(
(BuildContext context, int i) => ChildWidget(items[i]),
childCount: items.length,
),
),
],
)),
);

关于flutter - 使用 NestedScrollView 并向 ListView 下游提供 ScrollController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49889673/

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