Flutter 如何在Dart中使用类型别名/类型定义(也是非函数)?

Flutter 如何在Dart中使用类型别名/类型定义(也是非函数)?,flutter,dart,Flutter,Dart,我早就知道Dart中的函数typedefs。对这些问题的回答也作了解释 现在,我听说非函数类型别名(或非函数类型别名)将出现在Dart中 我想知道两件事: Dart中的(非功能)typedef是什么 我如何使用它们(在我的颤振项目中) Dart中的通用类型别名/typedef 您可以查看完整设计文档的 我想先指出Dart过去只支持函数的typedefs。新的广义功能支持任何类型的typedef typedef JsonMap=Map; JsonMap parseJsonMap(字符串输入)=

我早就知道Dart中的函数typedefs。对这些问题的回答也作了解释

现在,我听说非函数类型别名(或非函数类型别名)将出现在Dart中


我想知道两件事:

  • Dart中的(非功能)typedef是什么
  • 我如何使用它们(在我的颤振项目中)
Dart中的通用类型别名/typedef 您可以查看完整设计文档的

我想先指出Dart过去只支持函数的typedefs新的广义功能支持任何类型的typedef

typedef JsonMap=Map;
JsonMap parseJsonMap(字符串输入)=>json.decode(输入)为JsonMap;
当您有多个泛型类型(类型参数)导致键入冗长的类型名时,这尤其有用,例如
Map
。现在可以使用类型别名简化此操作:

typedef ScaffoldSnackBarMap=Map;
语法 如果上面的示例不清楚,这是alisases/typedefs类型的语法:

'typedef' identifier typeParameters? '=' type ';'
这意味着您始终需要以
typedef
关键字开头,后跟所需的标识符,例如
FooTypeDef
。之后,您可以添加类型参数,例如
Foo
。最后一步是添加
=
符号,后跟要为其创建别名的实际类型。这可以是任何类型,即类、基元类型、函数类型或w/e。不要忘记
在末尾;)

//typedef中的类型参数/泛型类型。
typedef Foo=Map;
//常规类型的类型别名。
typedef-Bar=Widget;
//以及基本类型。
typedef Baz=int;
//还支持函数类型。
typedef FooFunction=R函数(T参数);
弃用名称 此外,您可以对任何类名使用
typedef
s。假设您想将类从
Provider
重命名为
Pod
,因为您认为前者过于冗长。如果您正在维护一个包,这将是一个突破性的更改。使用新的通用类型别名,您可以简单地重命名类并创建一个不推荐使用的类型别名:

类NewClassName{}
@不推荐(“改用NewClassName”)
typedef OldClassName=NewClassName;
请注意,此示例和上面的示例取自该功能的

如何使用它们 默认情况下,该功能将随Dart 2.13一起提供,但目前仍处于试验阶段。我将介绍如何以两种方式使用它;实验方法可以在以后删除

飞镖2.13 如前所述,该功能将从Dart 2.13开始默认启用。如果您当前已经安装了Dart 2.13(例如,您可以使用
Dart--version
来检查它),您可以使用此方法。否则,您应该参考下面的实验支持部分

在您的
publispec.yaml
中,您需要将Dart SDK约束的下限定义为大于或等于
2.13.0

环境:

dart:'>=2.13.0您可以在此处跟踪实施进度:
flutter run --enable-experiment=nonfunction-type-aliases