检测SingleChildScrollview / Listview是否可以滚动

时间:2020-08-05 17:52:28

标签: flutter dart

因此,我有一个无限宽度(Row)的小部件。为了用项目填充小部件,我正在使用Axis水平的Lisview构建器。我还可以将SingleChildScrollview用作水平轴,并将Row作为子级。

如果有几个项目,那么屏幕的宽度不会被填满,那就太好了。但是,当有很多项目时,Listview变为“可滚动”,并且我可以向右滚动以显示项目。

我想知道列表是否可滚动(如果它溢出)。目的是显示一个小文字“滚动以显示更多>>”。

我知道我可以使用数学并通过屏幕宽度计算项目宽度。但是... Listview已经知道了,所以我想知道是否有一种方法可以访问该信息

2 个答案:

答案 0 :(得分:0)

在构建器中:

return NotificationListener(
            onNotification: (scrollNotification) {
              print("ScrollStartNotification");
              // add your logic here
            },
            child: SingleChildScrollView(...


     

我试图自己检测完全相同的东西,至少将SingleChildScrollView和NotificationListener包裹在一起,这给了我一个开始进行此工作的参考点。

答案 1 :(得分:0)

我有类似的问题。我在这里找到了此解决方案:Determine Scroll Widget height

如果有帮助,请问以下问题:How do you tell if scrolling is not needed in a SingleChildScrollView when the screen is first built?

解决方案:

  1. 导入调度程序Flutter库:
import 'package:flutter/scheduler.dart';
  1. 在状态对象内部但在build方法外部创建一个布尔标志,以跟踪是否已调用build
bool buildCalledYet = false;
  1. 在状态对象内部但在isScrollable方法外部创建一个布尔build变量:
bool isScrollable;
  1. build方法的开头添加以下内容:
if (!firstBuild) {
      firstBuild = true;
      SchedulerBinding.instance.addPostFrameCallback((_) {
        setState(() {
          isScrollable = !(_scrollController.position.maxScrollExtent > 0);
        });
      });
    }

buildCalledYet的目的是防止此代码导致一遍又一遍地调用build。)

  1. 如果isScrollabletrue,请显示您的文字。