pushNamed页面跳转

Posted by アライさん on 2020年09月30日

main.dart

1
2
3
4
5
6
7
8
9
10
return MaterialApp(
initialRoute: IndexPage.routeName,
onGenerateRoute: Routes.generateRoute,
builder: (BuildContext context, Widget child) {
return Material(
child: FlutterEasyLoading(
child: child,
));
},
);

routes.dart

1
2
3
4
5
6
7
8
9
10
11
class Routes {
static Route<dynamic> generateRoute(settings) {
switch (settings.name) {
case CameraPage.routeName:
return MaterialPageRoute(
builder: (context) => CameraPage(arguments: settings.arguments));
default:
return MaterialPageRoute(builder: (context) => EmptyPage());
}
}
}

camear.dart

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class CameraPage extends StatefulWidget {
static const routeName = '/camera';

final CameraPageArguments arguments;

const CameraPage({
Key key,
@required this.arguments,
}) : super(key: key);

@override
_CameraPageState createState() => _CameraPageState();
}

class CameraPageArguments {
final String param;
CameraPageArguments({
this.param = '测试参数',
});
}

跳转代码

1
2
3
4
Navigator.pushNamed(context, CameraPage.routeName,
arguments: CameraPageArguments(
param: '参数',
));

注意

如果需要回传数据

1
await Navigator.pushNamed(context,CameraPage.routeName)

可能报错:

type ‘MaterialPageRoute‘ is not a subtype of type ‘Route‘ in type cast

可以改为使用:

1
await Navigator.of(context).pushNamed(CameraPage.routeName);