import 'package:flutter/material.dart' ;
import 'package:provider/provider.dart' ; // .yaml file provider: ^3.1.0+1
void main( ) {
runApp( MaterialApp(
title: 'Navigation Basics' ,
home: FirstRoute( ) ,
) ) ;
}
class FirstRoute extends StatelessWidget {
@override
Widget build( BuildContext context) {
return ChangeNotifierProvider(
builder: ( context) => Data( ) ,
child: Scaffold(
appBar: AppBar(
title: Text( 'First Route' ) ,
) ,
body: Column(
children: < Widget> [
Container(
width: 256 ,
margin: const EdgeInsets.only ( bottom: 8 ) ,
child: TextField(
decoration: InputDecoration(
hintText: 'Enter user name' , labelText: 'User Name' ) ,
onChanged: ( String newUserName) {
Provider.of < Data> ( context) .changePassword ( newUserName) ;
print( newUserName) ;
} ,
) ,
) ,
Container(
width: 256 ,
margin: const EdgeInsets.only ( bottom: 8 ) ,
child: TextField(
obscureText: true ,
decoration: InputDecoration(
hintText: 'Enter password' , labelText: 'Password' ) ,
onChanged: ( String newPassword) {
Provider.of < Data> ( context) .changePassword ( newPassword) ;
print( newPassword) ;
} ,
) ,
) ,
Center(
child: RaisedButton(
child: Text( 'Open route' ) ,
onPressed: ( ) {
Navigator.push (
context,
MaterialPageRoute( builder: ( context) => SecondRoute( ) ) ,
) ;
} ,
) ,
) ,
] ,
) ,
) ,
) ;
}
}
class SecondRoute extends StatelessWidget {
@override
Widget build( BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text( "Second Route" ) ,
) ,
body: Column(
children: < Widget> [
Center(
child: RaisedButton(
onPressed: ( ) {
Navigator.pop ( context) ;
} ,
child: Text( 'Go back!' ) ,
) ,
) ,
Text(
Provider.of < Data> ( context) .userName ,
// Provider.of<String>(context),
style: TextStyle(
color: Colors.blue ,
fontSize: 20.0
) ,
) ,
Text(
Provider.of < Data> ( context) .password ,
// Provider.of<String>(context),
style: TextStyle(
color: Colors.green ,
fontSize: 20.0
) ,
) ,
] ,
) ,
) ;
}
}
CgppbXBvcnQgJ3BhY2thZ2U6Zmx1dHRlci9tYXRlcmlhbC5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOnByb3ZpZGVyL3Byb3ZpZGVyLmRhcnQnOyAvLyAueWFtbCBmaWxlIHByb3ZpZGVyOiBeMy4xLjArMQoKdm9pZCBtYWluKCkgewogIHJ1bkFwcChNYXRlcmlhbEFwcCgKICAgIHRpdGxlOiAnTmF2aWdhdGlvbiBCYXNpY3MnLAogICAgaG9tZTogRmlyc3RSb3V0ZSgpLAogICkpOwp9CgoKY2xhc3MgRmlyc3RSb3V0ZSBleHRlbmRzIFN0YXRlbGVzc1dpZGdldCB7CiAgQG92ZXJyaWRlCiAgV2lkZ2V0IGJ1aWxkKEJ1aWxkQ29udGV4dCBjb250ZXh0KSB7CiAgICByZXR1cm4gQ2hhbmdlTm90aWZpZXJQcm92aWRlcigKICAgICAgYnVpbGRlcjogKGNvbnRleHQpID0+IERhdGEoKSwKICAgICAgY2hpbGQ6IFNjYWZmb2xkKAogICAgICAgIGFwcEJhcjogQXBwQmFyKAogICAgICAgICAgdGl0bGU6IFRleHQoJ0ZpcnN0IFJvdXRlJyksCiAgICAgICAgKSwKICAgICAgICBib2R5OiBDb2x1bW4oCiAgICAgICAgICBjaGlsZHJlbjogPFdpZGdldD5bCiAgICAgICAgICAgIENvbnRhaW5lcigKICAgICAgICAgICAgICB3aWR0aDogMjU2LAogICAgICAgICAgICAgIG1hcmdpbjogY29uc3QgRWRnZUluc2V0cy5vbmx5KGJvdHRvbTogOCksCiAgICAgICAgICAgICAgY2hpbGQ6IFRleHRGaWVsZCgKICAgICAgICAgICAgICAgIGRlY29yYXRpb246IElucHV0RGVjb3JhdGlvbigKICAgICAgICAgICAgICAgICAgICBoaW50VGV4dDogJ0VudGVyIHVzZXIgbmFtZScsIGxhYmVsVGV4dDogJ1VzZXIgTmFtZScpLAogICAgICAgICAgICAgICAgb25DaGFuZ2VkOiAoU3RyaW5nIG5ld1VzZXJOYW1lKXsKICAgICAgICAgICAgICAgICAgUHJvdmlkZXIub2Y8RGF0YT4oY29udGV4dCkuY2hhbmdlUGFzc3dvcmQobmV3VXNlck5hbWUpOwogICAgICAgICAgICAgICAgICBwcmludChuZXdVc2VyTmFtZSk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIENvbnRhaW5lcigKICAgICAgICAgICAgICB3aWR0aDogMjU2LAogICAgICAgICAgICAgIG1hcmdpbjogY29uc3QgRWRnZUluc2V0cy5vbmx5KGJvdHRvbTogOCksCiAgICAgICAgICAgICAgY2hpbGQ6IFRleHRGaWVsZCgKICAgICAgICAgICAgICAgIG9ic2N1cmVUZXh0OiB0cnVlLAogICAgICAgICAgICAgICAgZGVjb3JhdGlvbjogSW5wdXREZWNvcmF0aW9uKAogICAgICAgICAgICAgICAgICAgIGhpbnRUZXh0OiAnRW50ZXIgcGFzc3dvcmQnLCBsYWJlbFRleHQ6ICdQYXNzd29yZCcpLAogICAgICAgICAgICAgICAgb25DaGFuZ2VkOiAoU3RyaW5nIG5ld1Bhc3N3b3JkKXsKICAgICAgICAgICAgICAgICAgUHJvdmlkZXIub2Y8RGF0YT4oY29udGV4dCkuY2hhbmdlUGFzc3dvcmQobmV3UGFzc3dvcmQpOwogICAgICAgICAgICAgICAgICBwcmludChuZXdQYXNzd29yZCk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIENlbnRlcigKICAgICAgICAgICAgICBjaGlsZDogUmFpc2VkQnV0dG9uKAogICAgICAgICAgICAgICAgY2hpbGQ6IFRleHQoJ09wZW4gcm91dGUnKSwKICAgICAgICAgICAgICAgIG9uUHJlc3NlZDogKCkgewogICAgICAgICAgICAgICAgICBOYXZpZ2F0b3IucHVzaCgKICAgICAgICAgICAgICAgICAgICBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgIE1hdGVyaWFsUGFnZVJvdXRlKGJ1aWxkZXI6IChjb250ZXh0KSA9PiBTZWNvbmRSb3V0ZSgpKSwKICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgKSwKICAgICAgICAgIF0sCiAgICAgICAgKSwKICAgICAgKSwKICAgICk7CiAgfQp9CgpjbGFzcyBTZWNvbmRSb3V0ZSBleHRlbmRzIFN0YXRlbGVzc1dpZGdldCB7CiAgQG92ZXJyaWRlCiAgV2lkZ2V0IGJ1aWxkKEJ1aWxkQ29udGV4dCBjb250ZXh0KSB7CiAgICByZXR1cm4gU2NhZmZvbGQoCiAgICAgIGFwcEJhcjogQXBwQmFyKAogICAgICAgIHRpdGxlOiBUZXh0KCJTZWNvbmQgUm91dGUiKSwKICAgICAgKSwKICAgICAgYm9keTogQ29sdW1uKAogICAgICAgIGNoaWxkcmVuOiA8V2lkZ2V0PlsKICAgICAgICAgIENlbnRlcigKICAgICAgICAgICAgY2hpbGQ6IFJhaXNlZEJ1dHRvbigKICAgICAgICAgICAgICBvblByZXNzZWQ6ICgpIHsKICAgICAgICAgICAgICAgIE5hdmlnYXRvci5wb3AoY29udGV4dCk7CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBjaGlsZDogVGV4dCgnR28gYmFjayEnKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICksCiAgICAgICAgICBUZXh0KAogICAgICAgICAgICBQcm92aWRlci5vZjxEYXRhPihjb250ZXh0KS51c2VyTmFtZSwKLy8gICAgICAgICAgICBQcm92aWRlci5vZjxTdHJpbmc+KGNvbnRleHQpLAogICAgICAgICAgICBzdHlsZTogVGV4dFN0eWxlKAogICAgICAgICAgICAgICAgY29sb3I6IENvbG9ycy5ibHVlLAogICAgICAgICAgICAgICAgZm9udFNpemU6IDIwLjAKICAgICAgICAgICAgKSwKICAgICAgICAgICksCiAgICAgICAgICBUZXh0KAogICAgICAgICAgICBQcm92aWRlci5vZjxEYXRhPihjb250ZXh0KS5wYXNzd29yZCwKLy8gICAgICAgICAgICBQcm92aWRlci5vZjxTdHJpbmc+KGNvbnRleHQpLAogICAgICAgICAgICBzdHlsZTogVGV4dFN0eWxlKAogICAgICAgICAgICAgICAgY29sb3I6IENvbG9ycy5ncmVlbiwKICAgICAgICAgICAgICAgIGZvbnRTaXplOiAyMC4wCiAgICAgICAgICAgICksCiAgICAgICAgICApLAogICAgICAgIF0sCiAgICAgICksCiAgICApOwogIH0KfQ==