Flutter:如何检查 Widget 是否为可滚动 Widget

3

ListViewGridViewSingleChildScrollView等小部件是可滚动的小部件,而ContainerSizedBoxColumn则不是。

有没有办法检查Widget是否可滚动,例如使用

Widget widget = SomeWidget();
bool scrollable = widget.isScrollable(): // any property like this?
1个回答

1

When you write something like this:

Widget widget = SomeWidget();

那么你基本上是将你的小部件Downcasting转换为所有类的父类Widget类。如果你查看文档中的 Widget 类,你应该只会看到三个公开的方法。它们是:

  1. createElement
  2. debugFillProperties
  3. toStringShort

bool scrollable = widget.isScrollable(): // 是否有任何类似这样的属性?

所以不,这是不可能的。

然而,你知道小部件必须是ScrollView的子类或者是类型为SingleChildScrollView,这样你就可以为自己编写一个实用程序方法。比如

bool isScrollable(Widget widget) => widget is ScrollView || widget is SingleChildScrollView;

谢谢,我已经知道ListViewGridView扩展了ScrollView,而SingleChildScrollView本身是一个StatelessWidget。这些都是一些常见的小部件。但如果我正在创建的库传递了另一个小部件,比如说AbcWidget,它也像SingleChildScrollView一样扩展了StatelessWidget,那么我该怎么找出来呢? - user6274128
我认为没有办法以你所说的方式进行检测。并没有通用接口可以检测这种情况。但是从软件设计的角度来看,如果我要构建自定义滚动视图,我肯定会从ScrollView进行扩展而不是从头开始构建它。 - Shababb Karim
你能否使用反射并检查小部件是否包含任何类型为 ScrollController 的成员? - Vineet
Flutter 禁用了 Dart 反射包 dart:mirror详见此处。虽然您可以进行代码生成,但我不知道它会有什么帮助。 - Shababb Karim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接