当前位置: 首页 > 知识库问答 >
问题:

如何使用Dart扩展函数?

司空祯
2023-03-14

Dart 2.6引入了一个新的语言特性,叫做“静态扩展成员”。
但是,我不太明白如何使用它。

我希望轻松获取ChildCount,即使用Row.ChildCount而不是Row.Children.Lengts:

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;

共有1个答案

和季
2023-03-14

现在有一个由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".
extension on num {}
print(FancyNum(1).plus(2));

通过扩展rowcolumn或更好的方法可以实现问题中所需的行为:您可以扩展flex,它是rowcolumn的超级类:

extension ExtendedFlex on Flex {
  int get childCount => this.children.length;
}

如果childCount的当前词法范围中未定义children.lengts也可以省略此.,这意味着=>children.lengts也是有效的。

通过导入flex的此静态扩展,您可以在任何flex上调用它,即也可以在每个调用它。
行(childr:const[Text('one'),Text('two')])。childCount将计算为2

 类似资料:
  • 在针对PHPCMS V9做二次开发的时候,您可以自定义一些全局函数且不影响以后官方升级 您自定义的文件请放置于该文件中 phpcms\libs\functions\extention.func.php或者以.func.php格式命名,放置于如下目录中 phpcms\libs\functions\autoload

  • 我已经创建了一个数据类 如何正确重写/扩展自定义DataClass的toString方法?

  • 函数参数的默认值 基本用法 在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法。 function log(x, y) { y = y || 'World'; console.log(x, y); } log('Hello') // Hello World log('Hello', 'China') // Hello China log('Hello', '') // He

  • 有没有一种简单的方法可以让用javascript编写的XSLT 1.0中的扩展函数返回一个节点集? 我可以为此创建一个新的java类,但我宁愿在脚本本身中放置一些代码。 当这可以在所有或大多数XSLT处理器(VB脚本?Groovy?C#?)支持的另一种脚本语言中完成时,当然也可以。 我有以下简单脚本: 它返回一个字符串,因此在Xpath表达式中调用函数没有问题<我想要的是一个节点集结果。但是当我把

  • 问题内容: 假设我们有以下代码: 当我们创建一个对象时,该对象最初称为父类构造函数。但是就像私人的一样- 我们收到一个错误。一个好的例子和解决这个问题的方法是多少? 问题答案: 没有出路。你必须创建一个可用的(,或默认)的超级构造函数能够延长。 这种表示法通常用于实用程序类或单例中,在这种情况下,您不希望用户通过扩展实例和实例化子类,或者只是通过调用类的构造函数来自己创建类的实例。 当您只有一个具

  • 问题内容: 我想在Firefox扩展中使用jQuery,我将库导入到xul文件中,如下所示: 但是xul文件中无法识别$()函数,jQuery()也无法识别。 我还尝试过将“ content.document”对象(该对象反映“ document”对象)作为上下文参数传递给jQuery函数,如下所示: 但仍然无法正常工作,以前有人遇到过这个问题吗? 问题答案: 我使用以下内容: 这是一个