我正在制作一款支持网络的应用程序,在一个屏幕上,我有一个可以非常大的表格,所以我嵌套了两个SingleChildScrollView,使其可以在两种方式下滚动.现在我试图 for each SingleChildScrollView设置一个滚动条,但问题是嵌套的SingleChildScrollView只有在到达小部件的末尾时才显示滚动条,但我希望这两个滚动条始终可见,如何实现这一点?

代码:

Scrollbar(
              controller: _horizontalController,
              thumbVisibility: true,
              child: SingleChildScrollView(
                  scrollDirection: Axis.horizontal,
                  controller: _horizontalController,
                  child: Scrollbar( //! This scrollbar is only shown when the other reach the end
                    controller: _verticalController,
                    thumbVisibility: true,
                    child: SingleChildScrollView(
                      scrollDirection: Axis.vertical,
                      controller: _verticalController,
                      child: /*******************/,
                    ),
                  ),
                ),
            )

推荐答案

问题是,Scrollbar的默认notificationPredicate被定义为:

bool defaultScrollNotificationPredicate(ScrollNotification notification) {
  return notification.depth == 0;
}

因此,由于第二个Scrollbar的深度是1(因为它是嵌套的),而默认谓词只判断0,所以您看不到嵌套的Scrollbar‘S拇指.

解决方案:当深度大于0时也会收到通知.

请参阅 comments :

@override
Widget build(BuildContext context) {
  /// The default 'notificationPredicate
  return Scrollbar(
    controller: _horizontalController,
    thumbVisibility: true,
    /// Nest the vertical 'Scrollbar' right below the horizontal one.
    child: Scrollbar(
      controller: _verticalController,
      thumbVisibility: true,
      /// Notification.depth == 1 here,
      /// but the default predicate checks whether Notification.depth == 0.
      notificationPredicate: (notification) => notification.depth >= 0,
      child: SingleChildScrollView(
        scrollDirection: Axis.horizontal,
        controller: _horizontalController,
        child: SingleChildScrollView(
          scrollDirection: Axis.vertical,
          controller: _verticalController,
          child: Container(
            width: 800.0,
            height: 1200.0,
            color: Colors.red,
          ),
        ),
      ),
    ),
  );
}

Flutter相关问答推荐

为什么Flutter 翼扩展卡有上下边框?

遇到图像路径格式问题

为什么我的PUT请求不能正常工作?

Flex ListView用于可滚动和响应的页面

轻松本地化包翻译在底部导航栏项目标签Flutter 翼dart 中不起作用

Wired Firebase错误-[CLOUD_FIRESTORE/UNAvailable]该服务当前不可用

Firebase WHERE过滤器在日期字段中不起作用

在Flutter 中创建自定义形状

找不到任何与 com.google.firebase:firebase-sessions:[15.0.0, 16.0.0) 匹配的版本

Flutter - firebase_auth_web 5.4.0 依赖于 intl ^0.17.0 但我必须使用更高版本 (intl ^0.18.0)

如何正确地将 PageView 设置为 AppBar 的标题?

忽略异步函数上的 context.mounted 访问 linting 错误是否安全?

通过一个具体的例子理解Flutter约束的本质

如何将 chrome web 模拟器添加到 vs code

如何在向下滚动时隐藏顶部卡片并在向上滚动时出现?

如何建立最近的文件列表?

我可以使用 Future 来填充Text() 小部件而不是在 Flutter 中使用 FutureBuilder 吗?

如何在Flutter 中根据其父小部件高度设置图标按钮飞溅半径

使用 mocktail 包进行单元测试时,类型Null不是Future类型的子类型

带图像封面的 ElevatedButton