-
-
Save HansMuller/0e76c54b1f2d4423efbdc2c185e761ef to your computer and use it in GitHub Desktop.
import 'package:flutter/material.dart'; | |
class NavigatorPage extends StatefulWidget { | |
const NavigatorPage({ Key key, this.child }) : super(key: key); | |
final Widget child; | |
@override | |
_NavigatorPageState createState() => _NavigatorPageState(); | |
} | |
class _NavigatorPageState extends State<NavigatorPage> { | |
TextEditingController _textController; | |
@override | |
void initState() { | |
super.initState(); | |
_textController = TextEditingController( | |
text: 'sample text: ${widget.child}', | |
); | |
} | |
@override | |
Widget build(BuildContext context) { | |
return Navigator( | |
onGenerateRoute: (RouteSettings settings) { | |
return new MaterialPageRoute( | |
settings: settings, | |
builder: (BuildContext context) { | |
return Center( | |
child: Column( | |
mainAxisSize: MainAxisSize.min, | |
children: <Widget>[ | |
widget.child, | |
SizedBox(height: 16.0), | |
RaisedButton( | |
child: Text('push a route'), | |
onPressed: () { | |
Navigator.of(context).push(MaterialPageRoute( | |
builder: (BuildContext context) { | |
return Scaffold( | |
appBar: AppBar(title: Text('Route for ${widget.child}')), | |
body: Container( | |
padding: const EdgeInsets.all(16.0), | |
alignment: Alignment.center, | |
child: TextField(controller: _textController), | |
), | |
); | |
}, | |
)); | |
}, | |
), | |
], | |
), | |
); | |
}, | |
); | |
}, | |
); | |
} | |
} | |
class HomePage extends StatefulWidget { | |
@override | |
_HomePageState createState() => _HomePageState(); | |
} | |
class _HomePageState extends State<HomePage> { | |
int _pageIndex = 0; | |
@override | |
Widget build(BuildContext context) { | |
return Scaffold( | |
body: SafeArea( | |
child: IndexedStack( | |
index: _pageIndex, | |
children: const <Widget>[ | |
NavigatorPage(child: Text('Home')), | |
NavigatorPage(child: Text('Business')), | |
NavigatorPage(child: Text('School')), | |
], | |
), | |
), | |
bottomNavigationBar: BottomNavigationBar( | |
items: const <BottomNavigationBarItem>[ | |
BottomNavigationBarItem(icon: Icon(Icons.home), title: Text('Home')), | |
BottomNavigationBarItem(icon: Icon(Icons.business), title: Text('Business')), | |
BottomNavigationBarItem(icon: Icon(Icons.school), title: Text('School')), | |
], | |
currentIndex: _pageIndex, | |
onTap: (int index) { | |
setState(() { _pageIndex = index; }); | |
}, | |
), | |
); | |
} | |
} | |
void main() { | |
runApp(MaterialApp(home: HomePage())); | |
} |
There's some additional information and a version of the example that integrates with the back button here: flutter/flutter#18740 (comment)
ok thanks for responding, I'll look into it.
Actually my question is this; I have seen the gist and what I seek to achieve is popping the stack once I click on the bottom navigation Item once I'm deep in the navigation stack. Say I move two levels deeper on the home bottom Item, once I click on the home Icon , I should return to the home screen.
Hi ! Thanks for this ! Is there a way to control one navigator from somwhere else ? For example, when clicking the home button, the inner home navigator goes to the 1st page ?
Hello,
Thanks for the code.
With this solution I can't pass arguments over the road with pushNamed, you have a solution ?
How do you popstack with this implementation?