Skip to content

Instantly share code, notes, and snippets.

@NiKoTron
Created March 30, 2020 21:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save NiKoTron/7cf35058fa220e493c9bc3dd8ed5f5bc to your computer and use it in GitHub Desktop.
Save NiKoTron/7cf35058fa220e493c9bc3dd8ed5f5bc to your computer and use it in GitHub Desktop.
named routes with args
// onGenerateRoute callback navigation
import 'package:flutter/material.dart';
void main() => runApp(App());
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Routing demo (onGenerateRoute)',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
initialRoute: '/',
onGenerateRoute: (RouteSettings settings) {
switch (settings?.name) {
case '/page_2':
return MaterialPageRoute(builder: (context) => PageTwo(settings?.arguments));
case '/page_3':
return MaterialPageRoute(builder: (context) => PageThree(settings?.arguments));
case '/':
default:
return MaterialPageRoute(builder: (context) => RootPage());
}
},
);
}
}
// Page 1
class RootPage extends StatefulWidget {
RootPage({Key key}) : super(key: key);
@override
_RootPageState createState() => _RootPageState();
}
class _RootPageState extends State<RootPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Root Page'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Root Page'),
RaisedButton(
child: Text('page 2'),
onPressed: () => Navigator.of(context).pushNamed('/page_2', arguments: {'from': 'root page'})),
RaisedButton(
child: Text('page 3'),
onPressed: () => Navigator.of(context).pushNamed('/page_3', arguments: {'from': 'root page'})),
],
),
),
);
}
}
// Page 2
class PageTwo extends StatefulWidget {
final args;
PageTwo(this.args, {Key key}) : super(key: key);
@override
_PageTwoState createState() => _PageTwoState();
}
class _PageTwoState extends State<PageTwo> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Page #2'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Page #2, navigated from: ${widget.args['from']}'),
RaisedButton(
child: Text('root page'),
onPressed: () => Navigator.of(context).pushNamed('/')),
RaisedButton(
child: Text('page 3'),
onPressed: () => Navigator.of(context).pushNamed('/page_3', arguments: {'from': 'page 2'})),
],
),
),
);
}
}
// Page 3
class PageThree extends StatefulWidget {
final args;
PageThree(this.args, {Key key}) : super(key: key);
@override
_PageThreeState createState() => _PageThreeState();
}
class _PageThreeState extends State<PageThree> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Page #3'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Page #3, navigated from: ${widget.args['from']}'),
RaisedButton(
child: Text('root page'),
onPressed: () => Navigator.of(context).pushNamed('/')),
RaisedButton(
child: Text('page 2'),
onPressed: () => Navigator.of(context).pushNamed('/page_2', arguments: {'from': 'page 3'})),
],
),
),
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment