有一个Flutter 团队的官方视频现在关于扩展方法。
静态扩展成员
这是扩展方法如何工作的直观示例:
extension FancyNum on num {
num plus(num other) => this + other;
num times(num other) => this * other;
}
我只是简单地扩展num
在这里并向类添加方法。可以这样使用:
print(5.plus(3)); // Equal to "5 + 3".
print(5.times(8)); // Equal to "5 * 8".
print(2.plus(1).times(3)); // Equal to "(2 + 1) * 3".
注意名字FancyNum
是可选的,以下内容也是有效的:
extension on num {}
当您在另一个文件中使用扩展名时,您must给它一个名字。
上面的扩展将利用隐式扩展成员调用因为您不必明确声明您的num
成为一个FancyNum
.
您还可以显式声明您的扩展,但在大多数情况下不需要这样做:
print(FancyNum(1).plus(2));
Flex子计数
问题中所需的行为可以通过扩展来实现Row
or Column
,甚至更好:你可以扩展Flex,这是超类Row
and Column
:
extension ExtendedFlex on Flex {
int get childCount => this.children.length;
}
this.
也可以省略,如果children
未在当前词法范围内定义childCount
, 意思就是=> children.length
也是有效的。
有了这个静态扩展 of Flex
导入后,您可以在任何地方调用它Flex
,即也在每个Row
and Column
.
Row(children: const [Text('one'), Text('two')]).childCount
将评估为2
.