在 TargetPlatform 枚举中添加“linux”和“windows”
摘要
#在 TargetPlatform
枚举中添加了两个新值,这可能需要在根据 TargetPlatform
进行切换且不包含 default:
情况的 switch 语句中添加额外的 case。
上下文
#在此更改之前,TargetPlatform
枚举仅包含四个值,定义如下:
enum TargetPlatform {
android,
fuchsia,
iOS,
macOS,
}
一个 switch
语句只需要处理这些情况,并且想要在 Linux 或 Windows 上运行的桌面应用程序通常在其 main()
方法中具有如下测试:
// Sets a platform override for desktop to avoid exceptions. See
// https://docs.flutterdart.cn/desktop#target-platform-override for more info.
void _enablePlatformOverrideForDesktop() {
if (!kIsWeb && (Platform.isWindows || Platform.isLinux)) {
debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia;
}
}
void main() {
_enablePlatformOverrideForDesktop();
runApp(MyApp());
}
更改说明
#TargetPlatform
枚举现在定义为:
enum TargetPlatform {
android,
fuchsia,
iOS,
linux, // new value
macOS,
windows, // new value
}
并且在 Linux 和 Windows 上不再需要 main()
中的平台测试设置 debugDefaultTargetPlatformOverride
。
这可能导致 Dart 分析器针对不包含 default
情况的 switch 语句发出 missing_enum_constant_in_switch
警告。编写不带 default:
情况的 switch 是处理枚举的推荐方法,因为分析器可以帮助您找到任何未处理的情况。
迁移指南
#为了迁移到新的枚举并避免分析器的 missing_enum_constant_in_switch
错误(如下所示):
warning: Missing case clause for 'linux'. (missing_enum_constant_in_switch at [package] path/to/file.dart:111)
或
warning: Missing case clause for 'windows'. (missing_enum_constant_in_switch at [package] path/to/file.dart:111)
请按如下方式修改您的代码:
迁移前的代码
void dance(TargetPlatform platform) {
switch (platform) {
case TargetPlatform.android:
// Do Android dance.
break;
case TargetPlatform.fuchsia:
// Do Fuchsia dance.
break;
case TargetPlatform.iOS:
// Do iOS dance.
break;
case TargetPlatform.macOS:
// Do macOS dance.
break;
}
}
迁移后的代码
void dance(TargetPlatform platform) {
switch (platform) {
case TargetPlatform.android:
// Do Android dance.
break;
case TargetPlatform.fuchsia:
// Do Fuchsia dance.
break;
case TargetPlatform.iOS:
// Do iOS dance.
break;
case TargetPlatform.linux: // new case
// Do Linux dance.
break;
case TargetPlatform.macOS:
// Do macOS dance.
break;
case TargetPlatform.windows: // new case
// Do Windows dance.
break;
}
}
在这样的 switch 语句中使用 default:
情况是不推荐的,因为这样分析器就无法帮助您找到所有需要处理的情况。
此外,上面提到的任何设置 debugDefaultTargetPlatformOverride
的测试对于 Linux 和 Windows 应用程序来说都不再需要。
时间线
#包含在版本中:1.15.4
稳定版本:1.17
参考
#API 文档
相关问题
相关 PR
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面最后更新时间:2024-04-04。 查看源代码 或 报告问题.