Dart中的字符串文字类型(如TypeScript)?

Dart中的字符串文字类型(如TypeScript)?,typescript,dart,Typescript,Dart,多亏了弗利特,我开始使用Dart,我非常喜欢这种语言 我以前使用的是TypeScript,它提供了一些我以前从未见过的非常酷的特性,我特别喜欢的一个是看起来像这样的 type Easing = "ease-in" | "ease-out" | "ease-in-out"; function doSomething(easing: Easing) { /* do something */} doSomething("ease-in"); // OK doSomething("easy"); /

多亏了弗利特,我开始使用Dart,我非常喜欢这种语言

我以前使用的是TypeScript,它提供了一些我以前从未见过的非常酷的特性,我特别喜欢的一个是看起来像这样的

type Easing = "ease-in" | "ease-out" | "ease-in-out";
function doSomething(easing: Easing) { /* do something */}
doSomething("ease-in");  // OK
doSomething("easy");  // ERROR
在Dart中,我发现使用
enum
s有时很不方便,尤其是在与特定于平台的插件实现交互时。每次我需要为Android的
静态字符串
s或
枚举
s添加Dart接口时,我都会错过字符串文本类型

其中一个可能来自插件(但发生的频率要高得多):

void\u createAlarm(){
最终雄激素意图=常量雄激素(
动作:“安卓.意图.动作.设置报警”,
论据:{
“android.intent.extra.alarm.DAYS':[2,3,4,5,6],
“android.intent.extra.alarm.HOUR”:21,
“android.intent.extra.alarm.MINUTES”:30,
'android.intent.extra.alarm.SKIP__UI':true,
“android.intent.extra.alarm.MESSAGE':“创建一个颤振应用程序”,
},
);
intent.launch();
}

Dart中有没有办法像TypeScript中的字符串文字类型那样使用这些“神奇字符串”?

每个
enum
常量创建一个实例,该实例具有一个
toString()
方法,该方法将返回一个带有
enum
类型名称和常量名称的字符串。例如,假设:

enum MyEnum {
  myConstant,
}
然后
MyEnum.myConstant.toString()
将返回
“MyEnum.myConstant”
。尽管这不会让您轻松创建任意字符串,但您可以执行以下操作:

enum alarm {
  DAYS,
  HOUR,
  MINUTES,
  SKIP_UI,
  MESSAGE,
}

void _createAlarm() {
  final arguments = <alarm, dynamic>{
    alarm.DAYS: <int>[2, 3, 4, 5, 6],
    alarm.HOUR: 21,
    alarm.MINUTES: 30,
    alarm.SKIP_UI: true,
    alarm.MESSAGE: 'Create a Flutter app',
  };

  final AndroidIntent intent = const AndroidIntent(
    action: 'android.intent.action.SET_ALARM',
    arguments: arguments.map((k, v) => MapEntry('android.intent.extra.$k', v)),
  );
  intent.launch();
}
enum报警{
天,
小时,
会议记录,
跳过UI,
消息
}
void _createAlarm(){
最终参数={
报警天数:[2,3,4,5,6],
闹铃时间:21,,
报警时间:30分钟,
alarm.SKIP_UI:true,
alarm.MESSAGE:“创建颤振应用程序”,
};
最终雄激素意图=常量雄激素(
动作:“安卓.意图.动作.设置报警”,
参数:arguments.map((k,v)=>MapEntry('android.intent.extra.$k',v)),
);
intent.launch();
}
enum alarm {
  DAYS,
  HOUR,
  MINUTES,
  SKIP_UI,
  MESSAGE,
}

void _createAlarm() {
  final arguments = <alarm, dynamic>{
    alarm.DAYS: <int>[2, 3, 4, 5, 6],
    alarm.HOUR: 21,
    alarm.MINUTES: 30,
    alarm.SKIP_UI: true,
    alarm.MESSAGE: 'Create a Flutter app',
  };

  final AndroidIntent intent = const AndroidIntent(
    action: 'android.intent.action.SET_ALARM',
    arguments: arguments.map((k, v) => MapEntry('android.intent.extra.$k', v)),
  );
  intent.launch();
}