Flutter 如何使用省道扩展功能?

Flutter 如何使用省道扩展功能?,flutter,dart,Flutter,Dart,Dart 2.6引入了一种新的语言功能,称为“” 然而,我不太明白如何使用它 我想轻松获得行或列的childCount,即使用行.childCount而不是行.childrength: void main(){ 最后一行=行(子项:const[Text('one')、Text('two')), column=column(子项:const[Text('one')、Text('two')、Text('three')); 打印(row.childCount);//应打印“2”。 打印(column.

Dart 2.6引入了一种新的语言功能,称为“
然而,我不太明白如何使用它

我想轻松获得
childCount
,即使用
行.childCount
而不是
行.childrength

void main(){
最后一行=行(子项:const[Text('one')、Text('two')),
column=column(子项:const[Text('one')、Text('two')、Text('three'));
打印(row.childCount);//应打印“2”。
打印(column.childCount);//应打印“3”。
}
我尝试执行以下操作,但这是一个语法错误:

Row.childCount()=>this.childrence.length;
Column.childCount()=>this.childrence.length;
现在有一个关于扩展方法的问题

静态扩展成员 以下是扩展方法工作原理的直观示例:

num上的扩展FancyNum{ num plus(num other)=>this+other; num次(num other)=>此*其他; } 我只是在这里扩展
num
,并向类中添加方法。可以这样使用:

打印(5.plus(3));//等于“5+3”。
打印(5次(8));//等于“5*8”。
打印(2.加(1).次(3));//等于“(2+1)*3”。
请注意,名称
FancyNum
是可选的,以下内容也有效:

num{}上的扩展名 当您在另一个文件中使用扩展名时,必须为其命名


上面的扩展将使用,因为您不必显式地将
num
声明为
FancyNum

您还可以显式声明扩展,但在大多数情况下不需要这样做:

print(FancyNum(1.plus(2));
灵活儿童计数 通过扩展
,可以实现问题中所需的行为,甚至更好:您可以扩展,这是
的超类:

Flex上的扩展ExtendedFlex{ int get childCount=>this.childrence.length; }
如果
childCount
的当前词法范围中未定义
children
,也可以省略此。
,这意味着
=>children.length
也有效


导入此
Flex
静态扩展后,您可以在任何
Flex
上调用它,即在每个


行(子项:const[Text('one')、Text('two'))。childCount
将评估为
2

Dart 2.7引入了新的扩展方法概念


扩展可以具有泛型类型参数。对于以下示例,当有多个适用的扩展可用时,将显示隐式扩展解析

extension SmartIterable<T> on Iterable<T> {
  void doTheSmartThing(void Function(T) smart) {
    for (var e in this) smart(e);
  }
}
extension SmartList<T> on List<T> {
  void doTheSmartThing(void Function(T) smart) {
    for (int i = 0; i < length; i++) smart(this[i]);
  }
}
...
  List<int> x = ....;
  x.doTheSmartThing(print);
Iterable上的扩展SmartIterable{ void dothesmart(void函数(T)smart){ 对于(本协议中的var e)smart(e); } } 列表上的扩展智能列表{ void dothesmart(void函数(T)smart){ 对于(inti=0;i
这里两个扩展名都适用,但是
SmartList
扩展名比
SmartIterable
扩展名更具体,因为列出这一行“当您在另一个文件中使用扩展名时,必须给它一个名称。”谢谢这是完美的解释。我印象深刻。
extension SmartIterable<T> on Iterable<T> {
  void doTheSmartThing(void Function(T) smart) {
    for (var e in this) smart(e);
  }
}
extension SmartList<T> on List<T> {
  void doTheSmartThing(void Function(T) smart) {
    for (int i = 0; i < length; i++) smart(this[i]);
  }
}
...
  List<int> x = ....;
  x.doTheSmartThing(print);