使用 NestedScrollView 并向 ListView 下游提供 ScrollController

2024-02-04

我有一个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 移至 headerSliv​​erBuilder 中,它按照我想要的方式工作。我从这个 NestedScrollView 示例要点中得到了这样做的提示:https://gist.github.com/collinjackson/2bc6697d31e6b94ada330ef5e818a36f https://gist.github.com/collinjackson/2bc6697d31e6b94ada330ef5e818a36f


跟着嵌套滚动视图示例 https://docs.flutter.io/flutter/widgets/NestedScrollView-class.html:

将列表视图更改为 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,
        ),
      ),
    ],
  )),
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 NestedScrollView 并向 ListView 下游提供 ScrollController 的相关文章

随机推荐

  • 将 RGB 图像数组乘以标量后,使用 plt.imshow 获取黑色图

    所以我有点困惑为什么会发生这种情况 I have a binary image 现在我想将此二进制图像转换为 RGB 空间 因此我使用dstack连接第三轴的函数 Everything works fine so far but now I
  • 从数组中删除 JSON 对象会创建“未定义”对象

    我在使用 JSON 和数组时遇到一些问题 我已经摆弄 JSON 一段时间了 并尝试通过重构旧的实现来在生产中使用一些 JSON 我有两个隐藏的文本字段 一个以 1 2 3 等格式存储 id 另一个名称 name1 name2 name3 所
  • 如何在git上共享Xcode性能测试基线?

    I have performance tests on Xcode with a baseline set as shown below 这些基线似乎是本地保存的 如断点 因此我对它们的更改不会通过 git 传输 当除了我之外的任何人运行我
  • dropzone.js 使用 content-type 直接上传到 S3

    我目前正在使用 dropzone js 通过预先签名的 URL 将图像上传到 S3 一切正常 除了我无法设置正在上传的文件的内容类型 默认情况下 它们都是通过以下方式上传的binary octet stream我无法直接在浏览器中查看它们
  • 从 github 安装/运行 gradle 插件(特别是 arquilian 插件)的正确方法?

    我想在这里使用 arquillian 插件来运行 jetty 8 https github com aslakknutsen arquillian gradle plugin https github com aslakknutsen ar
  • 詹金斯即将关闭

    有时会发生奇怪的事情 詹金斯开始显示 詹金斯将关闭 即使没有人打开此消息并重新启动詹金斯 截屏 我有一个 精简备份 插件 该插件被配置为在备份后关闭 更改了此设置 现在工作正常 找到它有点棘手 因为这个插件不在配置系统下 而是在管理詹金斯下
  • 将字典列表转换为单独的列 pandas

    我想要一个有 1 列字典列表的 df 示例 df testData 1 MLB 2 NBA 3 NFL 分为以下内容 Number Sport 1 MLB 2 NBA 3 NFL 我尝试过以下方法 pd DataFrame df testD
  • Objective C:Posing 可以在 ios 上使用吗?

    我正在尝试为一个 ios 项目实现摆姿势 场景 在运行时定义控制器类 https stackoverflow com questions 29424934 defining class of controller at run time 我
  • PHP、SQL通过php变量限制查询

    PHP代码定义变量sqlshowvalue sqlshowvalue 5 if isset POST showmore sqlshowvalue 5 所以我连接到我的数据库 然后当我使用上面刚刚定义的变量运行下面的 SQL 查询时 resu
  • 跟踪类实例中的状态

    我想创建一个具有某些内部状态 可能是加载 错误或成功 的类 我还想在类上有一些可以检查此类状态的方法 理想的API function f x LoadingError
  • 如何使用.net更改Word文档的字体大小

    我正在使用 C 和 Spire Doc 开发一个应用程序 它将 Word 文档保存为指定的格式 其中包括标题处的徽标以及指定的字体大小和样式 现在我可以使用 spire doc 在标题处粘贴徽标 但我无法更改font风格和size整个文件的
  • iPhone 表格单元格标签未对齐

    如同上一个问题 https stackoverflow com questions 1770872 text misalignment on tableview cells on iphone device 我的表格单元格中的文本对齐有问题
  • JWT 令牌与 AJAX、非 AJAX、JQuery

    我对在登录 提交和重定向期间管理 JWT 令牌感到有点沮丧 在开始之前 先介绍一下我的技术堆栈 以防万一 JQuery Html gt Node Js gt Java Restful Services gt MySQL 我的 java Re
  • 有什么方法可以触发 RDTSC 的传统模式吗?

    我重写了整个问题 人们显然不理解 RDTSC 用于计算 CPU 周期 它随 CPU 限制而变化 目前 RDTSC 不随 CPU 限制而变化 一些旧的应用程序期望 RDTSC 随 CPU 限制而变化 我如何让 RDTSC 满足他们的期望 我不
  • 如何在Session Beans中使用自定义异常?

    EJB 3 1 会话 Bean import javax ejb public class FooException extends EJBException Stateless Local public class Foo public
  • 使用 PHPExcel 下载 xls 文件时出现损坏

    在我当前的项目中 我使用 PHPExcel 1 7 8 将数据导出到 Excel 按照建议 我在项目中成功配置了它 并成功生成了 xls 文件并存储了它 但是当我尝试下载 xls 文件时 我损坏了 xls 文件 而没有收到任何错误消息 我有
  • 如何从Google Form中提取数据并在提交前显示结果?

    假设我这里有一个谷歌表单 https docs google com forms d 1HnATawk6ioE7 EVKrtszxvScjmUSF7 ma0 9XhBZ hw viewform https docs google com f
  • 在 R 中循环读取多个文件

    我一直想知道是否有人知道如何创建一个在 R 中加载文件 数据库的循环 假设我有一些这样的文件 data1 csv data2 csv data100 csv 在某些编程语言中 您可以执行类似 data x csv 的操作 系统会像 data
  • 从另一个类调用扩展 Thread 的类的方法

    我知道这是一个有点幼稚的问题 但我想了解java中多线程背后的基本工作原理 考虑下面的代码 假设 A 在主线程中执行 并开始执行在类 B 中定义的另一个工作线程 我想知道从 A 调用的 B func1 和 B 的 run 方法是否可以并行执
  • 使用 NestedScrollView 并向 ListView 下游提供 ScrollController

    我有一个NestedScrollView当我使用时 它可以很好地自动隐藏AppBar 我想要的一项功能 SliverAppBar 我遇到问题的地方是我使用ListView Builder作为下游的身体组件之一 我需要应用自己的ScrollC