如何在Flutter中设置WidgetsApp的属性pageRouteBuilder
How to set the property pageRouteBuilder of WidgetsApp in Flutter
我试图了解 Flutter 中的导航如何在基本层面上工作,超越 Material 设计便利小部件,以实现非标准导航方案。
我一直在研究答案 中的代码,并将该代码的构建方法编辑如下,将 routes
和 pageRouteBuilder
属性设置为非空。
@override
Widget build(BuildContext context) {
return new WidgetsApp(
onGenerateRoute: generate,
pageRouteBuilder: (RouteSettings settings, WidgetBuilder builder) {
return MaterialPageRoute(builder: (context) => Container(color: Colors.blue,));
},
onUnknownRoute: unKnownRoute,
textStyle: const TextStyle(),
initialRoute: "/",
routes: <String, WidgetBuilder> {
'/test': (BuildContext context) => Container(
child: Text('test'),
color: Colors.green,
),
},
color: Colors.red);
}
这会引发错误
Error: The argument type 'MaterialPageRoute
Function(RouteSettings, Widget Function(BuildContext))' can't be
assigned to the parameter type 'PageRoute
Function(RouteSettings, Widget Function(BuildContext))'
(我原来用PageRoute widget代替了MaterialPageRoute widget,后来也收到abstract 类无法实例化的错误,所以改用Material PageRoute为了方便*,想象一下就是PageRoute的一个实现。
*而不是为这个玩具示例编写新的 PageRoute 实现。)
我不知道如何解决这个问题,据我所知,参数和参数类型是等价的,而且我找不到任何关于如何设置 pageRouteBuilder
属性在线。非常感谢解释为什么会发生此错误或修复此玩具示例。
在 material/app.dart
中查找如何设置 pageRouteBuilder
之后(如果使用 Android Studio,在任何地方写入 MaterialApp() ,悬停并在出现下划线时按 Ctrl + 单击,然后在打开的文件中搜索 'pageRouteBuilder'),我发现这可以通过
修复
@override
Widget build(BuildContext context) {
final MaterialPageRoute test = MaterialPageRoute<int>(builder: (context) {
return Container();
});
return new WidgetsApp(
onGenerateRoute: generate,
pageRouteBuilder: <T>(RouteSettings settings, WidgetBuilder builder) {
return MaterialPageRoute(builder: builder, settings: settings);
},
onUnknownRoute: unKnownRoute,
textStyle: const TextStyle(),
initialRoute: "/",
routes: <String, WidgetBuilder>{
'/test': (BuildContext context) => Container(
child: Text('test'),
color: Colors.green,
),
},
color: Colors.red);
}
如果我知道为什么 <T>
将来在这种情况下有意义,我将编辑它并在此处进行尽可能多的解释。
我试图了解 Flutter 中的导航如何在基本层面上工作,超越 Material 设计便利小部件,以实现非标准导航方案。
我一直在研究答案 routes
和 pageRouteBuilder
属性设置为非空。
@override
Widget build(BuildContext context) {
return new WidgetsApp(
onGenerateRoute: generate,
pageRouteBuilder: (RouteSettings settings, WidgetBuilder builder) {
return MaterialPageRoute(builder: (context) => Container(color: Colors.blue,));
},
onUnknownRoute: unKnownRoute,
textStyle: const TextStyle(),
initialRoute: "/",
routes: <String, WidgetBuilder> {
'/test': (BuildContext context) => Container(
child: Text('test'),
color: Colors.green,
),
},
color: Colors.red);
}
这会引发错误
Error: The argument type 'MaterialPageRoute Function(RouteSettings, Widget Function(BuildContext))' can't be assigned to the parameter type 'PageRoute Function(RouteSettings, Widget Function(BuildContext))'
(我原来用PageRoute widget代替了MaterialPageRoute widget,后来也收到abstract 类无法实例化的错误,所以改用Material PageRoute为了方便*,想象一下就是PageRoute的一个实现。
*而不是为这个玩具示例编写新的 PageRoute 实现。)
我不知道如何解决这个问题,据我所知,参数和参数类型是等价的,而且我找不到任何关于如何设置 pageRouteBuilder
属性在线。非常感谢解释为什么会发生此错误或修复此玩具示例。
在 material/app.dart
中查找如何设置 pageRouteBuilder
之后(如果使用 Android Studio,在任何地方写入 MaterialApp() ,悬停并在出现下划线时按 Ctrl + 单击,然后在打开的文件中搜索 'pageRouteBuilder'),我发现这可以通过
@override
Widget build(BuildContext context) {
final MaterialPageRoute test = MaterialPageRoute<int>(builder: (context) {
return Container();
});
return new WidgetsApp(
onGenerateRoute: generate,
pageRouteBuilder: <T>(RouteSettings settings, WidgetBuilder builder) {
return MaterialPageRoute(builder: builder, settings: settings);
},
onUnknownRoute: unKnownRoute,
textStyle: const TextStyle(),
initialRoute: "/",
routes: <String, WidgetBuilder>{
'/test': (BuildContext context) => Container(
child: Text('test'),
color: Colors.green,
),
},
color: Colors.red);
}
如果我知道为什么 <T>
将来在这种情况下有意义,我将编辑它并在此处进行尽可能多的解释。