ScrollController 附加时的事件

2024-01-06

一旦我获得有关最大滚动范围的信息,我就会尝试显示一个小部件。如果我分配一个实例,我可以找到该数字ScrollController to the controller可滚动小部件的属性。

我的问题是ScrollController在构建过程中附加到可滚动小部件,因此我无法在第一次构建之前使用最大滚动范围数。因此我想做的是显示一个空的Container在第一个构建中,然后将其切换为空Container与我真正想要的小部件。像这样的东西:

    _scrollController.positions.length == 0 ? new Container() : new Align(
      alignment: Alignment.center,
      child: new Container(
        width: constraints.maxWidth,
        height: 50.0,
        color: Colors.black,
      )
    )

现在这当然行不通了,因为_scrollController.positions.length一开始就是0,我无处可调用setState当该值更改时(当连接控制器时)。
所以我的问题是:有没有什么地方我可以在任何时候收到通知ScrollController附加到可滚动小部件?或者有更好的方法吗?


如果可滚动的是widget.child.

@override
Widget build(BuildContext context) {
  return new NotificationListener<ScrollNotification>(
    onNotification: _handleScrollNotification,
    child: widget.child,
  );
}

bool _handleScrollNotification(ScrollNotification notification) {
  if (notification is ScrollUpdateNotification || notification is OverscrollNotification) {
    widget.child.update(notification.metrics);
  }
return false;
}

@override
void initState() {
  super.initState();
  WidgetsBinding.instance.addPostFrameCallback((_) => afterFirstLayout(context));
}

void afterFirstLayout(BuildContext context) {
  applyInitialScrollPosition();
}

void applyInitialScrollPosition() {
  ScrollController scrollControler = widget.child.controller;
  ScrollPosition position = scrollControler.position;
  ScrollNotification notification = ScrollUpdateNotification(
      metrics: FixedScrollMetrics(
          minScrollExtent: position.minScrollExtent,
          maxScrollExtent: position.maxScrollExtent,
          pixels: position.pixels,
          viewportDimension: position.viewportDimension,
          axisDirection: position.axisDirection),
      context: null,
      scrollDelta: 0.0);
_handleScrollNotification(notification);
}

孩子必须extends ChangeNotifier并有一个update method:

void update(ScrollMetrics metrics) {
  assert(metrics != null);
  _lastMetrics = metrics; // Save the metrics.
  notifyListeners();
}

仅当已为可滚动(widget.child)显式定义滚动控制器时,所有这些才有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ScrollController 附加时的事件 的相关文章

随机推荐

  • 在 MATLAB 中交换两个元素的性能

    纯粹作为实验 我在 MATLAB 中编写排序函数 然后通过 MATLAB 分析器运行这些函数 我发现最令人困惑的方面是与交换元素有关 我发现交换矩阵中两个元素的 官方 方式 self Data i1 i2 self Data i2 i1 运
  • 对于 Electron 来说,结合 Node.js 和 Chromium 上下文意味着什么?

    In 一篇博文 http maxogden com electron fundamentals html作者提到 Electron 将 Node 和 Chromium 组合成一个 单一上下文 这意味着我们不必使用 Browserify 来转
  • SqlBulkCopy 和实体框架

    我当前的项目由 3 个标准层组成 数据 业务和表示 我想使用数据实体来满足我的所有数据访问需求 该应用程序的部分功能是需要将平面文件中的所有数据复制到数据库中 文件不是很大 所以我可以使用 SqlBulkCopy 我发现了几篇关于 NET
  • android 使用 .der 公钥验证文件签名

    我正在尝试验证文件的签名 我按照以下说明生成证书 generate a private key with size of 2048 bits openssl genrsa out private key pem 2048 derive a
  • 我如何通过 sql server 2008 中的 XP_CMDSHELL 通过网络访问文件/文件夹?

    我正在尝试使用 EXEC MASTER XP CMDSHELL 访问文件夹 目录 它适用于本地文件 文件夹 但它无法通过网络访问该文件夹 EXEC MASTER XP CMDSHELL c Images Works fine EXEC MA
  • 如何使用 9 切片在 WPF 中叠加两个图像?

    我将展示一些 脏 代码 我不完全理解这些代码 因为我是 C 新手 根据我的理解 任何要绘制的控件都会被分成9个矩形 然后通过设置来单独绘制每个矩形Fill矩形的属性 我将隐藏每个矩形的代码 以保持代码的可管理大小 但是 我希望您明白该函数试
  • Google Cloud Datastore JSON API 的 datasetId 是什么

    正如中提到的this https stackoverflow com questions 25097451 how do i find my datasetid for making google datastore queries ans
  • 以编程方式构建 msbuild 15 项目

    我正在尝试构建一个使用 VS2017 创建的简单 C 7 类库项目 框架程序集的 MSBuild 已经过时了 所以我引用Microsoft Build Microsoft Build Engine and Microsoft Build F
  • 当按下回车键时如何转到下一个文本框?

    大家好 我正在学习 Javascript 我想问你们 当我按下键盘上的 Enter 按钮输入文本后 如何才能转到下一个文本框 谢谢 您可以使用 keyup 跟踪用户何时完成字符输入并e keyCode获取按下了哪个键 如果是 13 意味着进
  • 如何提高这段代码的性能呢?

    我正在尝试学习一些 Julia 在阅读了几个小时的手册后 我编写了以下代码 ie 200 ez zeros ie 1 hy zeros ie fdtd1d steps for n in 1 steps for i in 2 ie ez i
  • Doxygen:是否可以控制依赖图的方向?

    Up until today I d been using an ancient version 1 4 7 of doxygen dot and it typically drew graphs with a vertical orien
  • 比较 Msbuild 中的日期时间戳

    我正在尝试比较 msbuild 中的两个日期时间戳 我做了以下事情
  • Visual C++ __forceinline 奇怪的行为

    我试图强制 Visual C 编译器内联特定函数 我知道inline or forceinline只是一个建议 根据MSDN https msdn microsoft com en us library bw1hbe6y aspx 如果编译
  • 如何正确使用MouseMotionListener来按下JButtons?

    我制作了一个小型康威生命游戏程序 我已经完成了大约 80 我用过一个网格JButtons作为细胞 现在我有一个ButtonListener在每个按钮上 因此您必须通过单击各个按钮来逐一绘制您想要的图案 我希望能够快速单击并拖动鼠标并选择按钮
  • request.is_ajax() == 点击后退按钮时为 True?

    我有一个 Django 应用程序 它根据页面请求是否为 Ajax 返回不同的响应 当我查看页面 导航到其他地方 然后单击后退按钮时 请求将被呈现为就像request is ajax 是真的 因此 JSON 输出显示在浏览器中 而不是生成的
  • python 获取 json 键作为完整路径

    我想解析一个 JSON 文件并获取包含访问密钥所需的所有路径的完整列表 如果我们使用keys方法 我们会得到单个键的列表 但不会得到访问数据所需的分层键的完整列表 所以如果给定数据这样 data glossary title example
  • Elm 与 ClojureScript 相比如何?

    我已经到了这样的地步 使用 Backbone js 面向对象的 MVC 模式进行 GUI 编码变得非常复杂 并且正在考虑其他范例 MDV https github com Polymer TemplateBinding FRP http e
  • 为什么通过weak_ptr调用这么慢?

    我已阅读问题weak ptr 的性能损失是什么 https stackoverflow com questions 2748091 whats the performance penalty of weak ptr但我自己的测试显示出不同的
  • 单击圆圈时启动一个功能 - 传单

    我在里面画了一些圈JS如下 L circle 46 765735535841024 23 58344078063965 5 color blue addTo map bindPopup Description This is my desc
  • ScrollController 附加时的事件

    一旦我获得有关最大滚动范围的信息 我就会尝试显示一个小部件 如果我分配一个实例 我可以找到该数字ScrollController to the controller可滚动小部件的属性 我的问题是ScrollController在构建过程中附