我尝试使用一些颤振示例,但现在颤振非常严格(零问题(,所以大多数颤振示例都必须修改。大多数都很简单(您只需要添加"?"(。但我不知道如何解决这个问题:
class Navigation {
static Future<T?> navigateTo<T>({
required BuildContext context,
required Widget screen,
required NavigationRouteStyle style,
}) async {
Route? route;
if (style == NavigationRouteStyle.cupertino) {
route = CupertinoPageRoute<T>(builder: (_) => screen);
} else if (style == NavigationRouteStyle.material) {
route = MaterialPageRoute<T>(builder: (_) => screen);
}
return await Navigator.push<T>(context, route);
}
}
并且线路CCD_ 1导致错误:参数类型"Route?"无法分配给参数类型"Route"。
我不能100%确定NavigationRouteStyle
是什么,因为它没有出现在flutter sdk中,而且你也没有为它提供定义。我假设它是一个只有cupertino
和material
的枚举,如下所示:
enum NavigationRouteStyle {
cupertino,
material
}
我建议将route
的类型从Route?
更改为Route<T>
,因为Navigator.push
需要Route<T>
。其次,我会将if-else转换为switch语句,因为switch语句可以对枚举进行穷尽性检查,这允许return await Navigator.push<T>(context, route)
0在所有情况下都是不可为null的,只要它是赋值的。
class Navigation {
static Future<T?> navigateTo<T>({
required BuildContext context,
required Widget screen,
required NavigationRouteStyle style,
}) async {
Route<T> route;
switch (style) {
case NavigationRouteStyle.cupertino:
route = CupertinoPageRoute<T>(builder: (_) => screen);
break;
case NavigationRouteStyle.material:
route = MaterialPageRoute<T>(builder: (_) => screen);
break;
}
return await Navigator.push<T>(context, route);
}
}