Dart 2.6引入了一个新的语言特性,称为“static extension members”。
但是,我不太明白如何使用它。
我想很容易地得到Row
或Column
的childCount
,即使用row.childCount
代替row.children.length
:
void main() {
final row = Row(children: const [Text('one'), Text('two')]),
column = Column(children: const [Text('one'), Text('two'), Text('three')]);
print(row.childCount); // Should print "2".
print(column.childCount); // Should print "3".
}
我尝试了以下操作,但这是一个语法错误:
Row.childCount() => this.children.length;
Column.childCount() => this.children.length;
3条答案
按热度按时间cu6pst1q1#
现在有一个关于扩展方法的official video by the Flutter team。
静态扩展成员
下面是一个直观的例子来说明扩展方法是如何工作的:
我只是在这里扩展了
num
并向类中添加了方法。可以这样使用:请注意,名称
FancyNum
是可选的,以下内容也是有效的:当你在另一个文件中使用你的扩展名时,你必须给予它一个名字。
上面的扩展将使用隐式扩展成员调用,因为您不必显式地将
num
声明为FancyNum
。你也可以显式声明你的扩展,但在大多数情况下不需要这样做:
Flex childCount
通过扩展
Row
或Column
,甚至更好地实现问题中的期望行为:你可以扩展Flex
,它是Row
* 和 *Column
的超类:如果
children
未在childCount
的当前词法作用域中定义,则this.
也可以省略,这意味着=> children.length
也是有效的。导入
Flex
的这个 *static扩展名 * 后,您可以在任何Flex
上调用它,即也在每个Row
和Column
上。Row(children: const [Text('one'), Text('two')]).childCount
将计算为2
。zte4gxcn2#
Dart 2.7引入了新的扩展方法概念。
https://dart.dev/guides/language/extension-methods
cqoc49vn3#
对于省道延伸功能,您需要执行以下操作:
定义扩展名:
使用扩展名: