[Flutter] 使用Dart Extension,帮你扩充常用类的功能

本文介绍了Flutter中Dart语言的Extension特性,通过示例展示了如何扩展String和Iterable的功能,提供更方便的函数。文章还推荐了几个实用的Extension包,如时间扩展、国际化扩展和Dartx库,以提升开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[Flutter] 使用Dart Extension,帮你扩充常用类的功能

Flutter 是基于Dart这个语言的。在Dart 2.7 版本中,新加入了一个重要的语法功能,叫做extension。Extension的主要功能给已经存在的类添加新的member function,往里面增加新的函数。通过extension, 我们可以向诸如 Iterable , String 这样的常用类里面增加一些方便的函数。

扩展 String 的功能

我们创建一个文件名为 “string_parser_extension.dart”,其中的内容如下。

extension ParseNumbers on String {
  int parseInt() {
    return int.parse(this);
  }
  double parseDouble() {
    return double.parse(this);
  }
}

需要注意的是,在extension函数中,我们可以通过this来访问string 中原有的其它方法。这里的this指的是当前的string instance。

要使用这两个extension函数,只需要 import ‘{文件路径}:string_parser_extension.dart’ , 然后我们就可以对代码中的 string 类型使用这两个函数了。

final d = '2';
print(d.parseInt());

另外如下的写法也都是可以的:

dynamic v = '1';
print(v.parseInt());
var v = '1';
print(v.parseInt());

也就是说,通过extension来为 String class 增加方便的功能,可以增加服用,简化代码。

扩展 Iterable 的功能

在Dart 与 Flutter 中,Iterable 是最常用的一个类。它里面已经有需要方便的功能。但有的常用功能需要联合使用多个方法,比较麻烦。我们可以通过extension来构造一些方便的方法。

extension IterableExtension<E> on Iterable<E> {
  /// 返回第一个元素。如果内容为空,返回null.
  E get firstOrNull => isEmpty ? null : first;

  /// 返回第一个符合条件的元素。如果不存在则返回null.
  E firstOrNullWhere(bool Function(E element) test) {
    return firstWhere(test, orElse: () => null);
  }

  /// 过滤掉所有的 null .
  Iterable<E> get excludingNulls => where((e) => e != null);
}

如上图所示,Iterable本身是包含类型E的,我们在extension的构造中,也可以知道当前的类型E。

同时,extension的构造中直接调用了Iterable 原本的 isEmpty , first , firstWhere 方法。这是省略了"this."的写法。extension 的构造中是可以调用 “on” 后面的类的所有方法的。

在使用IterableExtension 时,所有Iterable的子类也都会创建相应的 extension 方法,比如 List , Map , Set 等等。

下面的代码即是使用样例:

import 'iterable_extension.dart';

final list = [1, 2, 3, 4];
final excludedNullList = list.excludingNulls();

final emptyList = [];
final firstNull = emptyList.firstOrNull;

推荐的Extension包

社区里面有的大神做了一些很有用的 example包,比如 时间扩展(Time Extension) ,国际化扩展包 (i18n extension) ,大家可以拿来使用,提高自己团队的开发效率。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值