当前位置: 首页 > 面试题库 >

如何使用Dart扩展功能?

柯国安
2023-03-14
问题内容

Dart 2.6引入了一种新的语言功能,称为“ 静态扩展成员 ”。
但是,我不太了解如何使用它。

我想轻松获得childCounta RowColumn,即使用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;

问题答案:

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 {}

在其他文件中使用扩展名时, 必须 给它起一个名字。

上面的扩展将利用隐式扩展成员调用,因为您不必显式声明您num是a
FancyNum

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

print(FancyNum(1).plus(2));

弹性childCount

从问题所需的行为可以通过扩展实现RowColumn可以扩展:,甚至更好Flex,这是父类Row Column

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

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

有了这个 静态扩展Flex进口,你可以把它在任何Flex也,即在每一个RowColumn
Row(children: const [Text('one'), Text('two')]).childCount将评估为2



 类似资料:
  • Dart 2.6引入了一个新的语言特性,叫做“静态扩展成员”。 但是,我不太明白如何使用它。 我希望轻松获取或的,即使用而不是: 我试图执行以下操作,但这是一个语法错误:

  • Azure函数的缩放文档对Azure函数如何决定何时添加更多应用程序实例的详细信息有点了解。 例如,我有一个由Github网络钩子触发的函数。10,000人同时提交到Github repo(没有合并冲突;)),Github在很短的时间内调用我的函数10,000次。 我能期待发生什么?具体来说, Azure函数会限制webhook调用吗?i、 例如,如果我的函数应用程序处于高负载状态,Azure函数

  • SDK对外开放了一个可自定义的协议NtalkerChatDelegate,如果客户想进行自定义实现接口,必须遵守此协议,初始化小能类的时候设置其delagate为实现代理接口方法的类,然后实现相应的接口。其中提供了以下几个接口: 深度自定义控件接口,详细调用细节,请参照demo。 一、自定义消息发送 二、查询历史咨询列表 三、设置超媒体自定义参数 四、+号功能区的扩展功能 五、商品条自定义 六、设

  • 一、发送文本消息到聊窗内 二、返回按钮的点击监听 三、结束会话按钮的点击监听 四、超媒体点击事件的监听 五、+号功能区的扩展功能 六、商品条自定义 七、导航栏自定义

  • QueyList是完全模块化的设计,拥有强大的可扩展性。 使用bind()方法绑定一个功能函数到QueryList对象,实现轻量级的功能扩展。bind()方法的第一个参数是绑定的函数名,第二个参数是一个匿名的功能函数,这个功能函数的$this对象指向的是当前的QueryList实例对象,所以在这个功能函数中可以直接通过$this来调用QueryList的方法。 例子 注册一个自定义的http网络操

  • 自定义引擎各个阶段 可以在测试脚本中或者基类中重写 ActsTestBase 提供的 API。 重写 prepare,execute,check,clear 等。可以通过在 super.prepare() 之前或者之后进行某些操作。 重写 process 方法,在 super.process() 之前或之后进行操作。可将整个脚本重新编排,例如在现有的清理 -> 准备 -> 执行 -> 校验流程中增

  • 本文向大家介绍使用C++扩展Python的功能详解,包括了使用C++扩展Python的功能详解的使用技巧和注意事项,需要的朋友参考一下 本文主要研究的是使用C++扩展Python的功能的相关问题,具体如下。 环境 VS2005Python2.5.4Windows7(32位) 简介 长话短说,这里说的扩展Python功能与直接用其它语言写一个动态链接库,然后让Python来调用有点不一样(虽然本质是

  • 对Liferay来说相当陌生。我了解到可以使用包括JSF在内的不同框架UI创建插件。此外,我还了解到我可以使用钩子扩展现有插件的功能。现在我很好奇是否可以将新的JSF页面添加到现有插件中,该插件的接口是使用钩子使用JSP构建的? 假设我想扩展动态数据列表portlet,添加一些新功能,为此我需要添加新页面。 一般可以添加新页面吗? 我可以创建一个以JSF作为前端框架的新插件,实现我想在JSF页面内