import 'package:flutter/material.dart'; void main() { runApp(MaterialApp( title: 'Flutter', home: FirstScreen(), )); } class FirstScreen extends StatefulWidget { @override _FirstScreenState createState() { return _FirstScreenState(); } } class _FirstScreenState extends State{ // this allows us to access the TextField text TextEditingController textFieldController = TextEditingController(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('First Screen')), body: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Padding( padding: const EdgeInsets.all(32.0), child: TextField( controller: textFieldController, style: TextStyle( fontSize: 24, color: Colors.black, ), ), ), RaisedButton( child: Text( 'Go to second screen', style: TextStyle(fontSize: 24), ), onPressed: () { _sendDataToSecondScreen(context); }, ) ], ), ); } // get the text in the TextField and start the Second Screen void _sendDataToSecondScreen(BuildContext context) { String textToSend = textFieldController.text; Navigator.push( context, MaterialPageRoute( builder: (context) => SecondScreen(text: textToSend,), )); } } class SecondScreen extends StatelessWidget { final String text; // receive data from the FirstScreen as a parameter SecondScreen({Key key, @required this.text}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Second screen')), body: Center( child: Text( text, style: TextStyle(fontSize: 24), ), ), ); } }
Passing Data Back to First Screen
import 'package:flutter/material.dart'; void main() { runApp(MaterialApp( title: 'Flutter', home: FirstScreen(), )); } class FirstScreen extends StatefulWidget { @override _FirstScreenState createState() { return _FirstScreenState(); } } class _FirstScreenState extends State{ String text = 'Text'; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('First screen')), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Padding( padding: const EdgeInsets.all(32.0), child: Text( text, style: TextStyle(fontSize: 24), ), ), RaisedButton( child: Text( 'Go to second screen', style: TextStyle(fontSize: 24), ), onPressed: () { _awaitReturnValueFromSecondScreen(context); }, ) ], ), ), ); } void _awaitReturnValueFromSecondScreen(BuildContext context) async { // start the SecondScreen and wait for it to finish with a result final result = await Navigator.push( context, MaterialPageRoute( builder: (context) => SecondScreen(), )); // after the SecondScreen result comes back update the Text widget with it setState(() { text = result; }); } } class SecondScreen extends StatefulWidget { @override _SecondScreenState createState() { return _SecondScreenState(); } } class _SecondScreenState extends State { // this allows us to access the TextField text TextEditingController textFieldController = TextEditingController(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Second screen')), body: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Padding( padding: const EdgeInsets.all(32.0), child: TextField( controller: textFieldController, style: TextStyle( fontSize: 24, color: Colors.black, ), ), ), RaisedButton( child: Text( 'Send text back', style: TextStyle(fontSize: 24), ), onPressed: () { _sendDataBack(context); }, ) ], ), ); } // get the text in the TextField and send it back to the FirstScreen void _sendDataBack(BuildContext context) { String textToSendBack = textFieldController.text; Navigator.pop(context, textToSendBack); } }
Reference:
https://stackoverflow.com/questions/53861302/passing-data-between-screens-in-flutter
There are 0 comments