如何使用 Dart 扩展函数?

2023-12-14

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

我想轻松获得childCount of a Row or Column,即使用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 {}

当您在另一个文件中使用扩展名时,您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.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Dart 扩展函数? 的相关文章

  • Flutter 图像选择器明确请求许可

    图像选择器包说 无需配置 该插件应该开箱即用 不再需要添加 android requestLegacyExternalStorage true 作为属性 AndroidManifest xml 中的标记 如 image picker 所示
  • 在 flutter 中创建图像蒙版

    Flutter 提供了多种基于路径 即剪辑路径 的遮罩方法 我正在尝试找出一种方法 可以拍摄具有透明层的图像 如下例所示 并使用该图像来掩盖另一个图像 视图或作为通用蒙版 我的第一直觉是看自定义Paint类 https api flutte
  • Android minSdkVersion 与 Flutter(v2.8.1)

    我已经安装了 firebase 包 据我们所知minSdkVersion 19被推荐 所以 我想做这个过程 但是 我看到这一行包含在android app build gradle file minSdkVersion flutter mi
  • Dart,无法调用Generic的方法

    我正在尝试创建一个抽象数据模型 在其中传递数据并输入 a 然后返回列表 但是当我无法调用时T fromJson 方法 注意传递类型有方法fromJson class DataList
  • Flutter 的 %1 安装错误不是有效的 win32 应用程序

    我是颤振的新手 并尝试通过以下步骤安装它 1 下载并解压到驱动器中 2 在环境变量中设置路径 现在我正在尝试运行 flutter doctor 它向我显示以下错误 请检查是否有人遇到同样的问题 谢谢 Flutter Channel beta
  • 运行 flutter doctor 吐出错误:标准错误:致命:坏对象 HEAD

    我已经从官方网站安装了 Flutter 和 Android Studio 我是 Git GitHub 移动开发和 Android 开发的新手 我试图在命令提示符 Windows 10 中运行 flutter doctor 命令 但是 它会以
  • 在桌面应用程序中将发票打印到 USB 打印机

    我正在开发 flutter 桌面应用程序 我需要将发票打印到 USB 打印机 https pub flutter io cn packages printing https pub flutter io cn packages printi
  • 在应用程序开发中缩放字体大小的理想方法是什么?

    我知道这个问题可能听起来有点奇怪 我是 Flutter 开发的新手 在使我的应用程序响应时 我在缩放文本时总是遇到问题 如果我保持字体大小不变 例如 10 或 20 有时在高分辨率设备上看起来太小 在小手机上看起来太大 然后我尝试根据屏幕尺
  • Flutter Firebase 身份验证:启动延迟

    我在应用程序中使用 Provider 和流 FirebaseAuth instance onAuthStateChanged 来决定启动时重定向到哪里 但是尽管用户已经登录 从之前的启动 但应用程序在登录屏幕上启动 几乎 1 秒后重定向到主
  • 在 Dartlang 中下载大文件

    我需要使用 dartlang 从浏览器下载较大的文件 我一直在使用 data uri 来下载 但已经达到了该方法的大小限制 想知道最好的方法是什么 我研究了使用 HTML5 文件系统 API 但它已被弃用 显然在大多数浏览器中从未真正实现过
  • Dart/Flutter 如何编译到 Android?

    我找不到任何具体的资源 Dart 是否被编译到 JVM 或者 Google 的团队是否编译了 Dart VM 以在 JVM 上运行 然后在 JVM 内的 Dart VM 中运行 Dart 前者更有意义 并且符合 无桥 的口号 但后者似乎更符
  • 当我们可以使用广播流时,为什么要使用 InheritedWidget | StreamBuilder 和静态变量 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 当我们可以使用广播流时 为什么要使用 InheritedWidget StreamBuilder 和静态变量 当我们可以拥有一个简单干净的架构时
  • 使用 flutter 构建 iOS 项目时出现的问题

    升级 Xcode 15 beta 5 后 无法构建项目 显示错误 Firebase 1 问题 DT TOOLCHAIN DIR 不能用于评估 LIBRARY SEARCH PATHS 请改用 TOOLCHAIN DIR FirebaseAn
  • logcat 信息出现在 Android Studio 的“运行”选项卡中

    我的 android studio 运行选项卡很简单 然后它变得更难并给我更多信息 例如 logcat 中的信息 如何禁用或删除第二张图片中出现的更多信息并返回到第一张图片中的第一个外观 我只需要正在运行的 flutter 应用程序的日志输
  • 所有侧面的 ElevatedButton 填充不会修改

    我有一个具有以下属性的 ElevatedButton 我在这里附上一张照片 https i stack imgur com oH3pO png https i stack imgur com oH3pO png ElevatedButton
  • Flutter android 风味生成 apk

    我正在尝试使用 flutter 设置 Android 风格 我有两个入口点 lib main prod dart lib main dev dart 我还在我的 gradle 文件中添加了以下内容 flavorDimensions vers
  • 在flutter中跟踪背景位置时使用background_locator插件时出现问题

    我正在尝试使用 flutter 跟踪后台位置 为此我正在使用背景定位器 https pub dev packages background locator插入 它的实现方式是注册某些静态回调函数 我声明了一个 File 类型的类变量来在后台
  • Flutter - 如何在 ListView 构建器中列出 forEach() 值?

    您好 我正在尝试将数据从 JSON 列出到 Listview Builder 但 Flutter 给了我这个错误 Column s children must not contain any null values but a null v
  • 在 Firebase 重置密码表单中自定义验证和文本?

    我在我的 flutter 应用程序中使用 Firebase 身份验证 我使用 PIN 代替普通密码 这是我严格定义的 6 位数字 如果我的用户忘记了 PIN 码 我唯一的选择 或不是 是致电sendPasswordResetEmail me
  • Flutter - 将未来列表传递给 SearchDelegate

    我一直在关注 Flutter Search 教程 我一直在尝试使用从未来列表派生的列表来实现相同的功能 其中数据来自 api 在本例中是 Aqueduct 服务器 目前我的屏幕列出了 api 中的所有联系人 我现在想搜索该联系人列表 我假设

随机推荐