Hi Guys, Welcome to Proto Coders Point.
Sometime, you not only want to navigate user to next screen page, but also want to pass data from screen 1 to screen 2.
For Example: A Screen 1 in your flutter app has a TextField & user enter the data, same data you want on screen 2 for further action.
In this flutter tutorial example, we will learn how to pass data between screens – In other words flutter send data to another page.
Flutter pass data between screens – Complete Video tutorial
Here we will have 2 Screens.
1. main.dart(Screen 1): Has TextField ( Name, Email, Phone ) where user can enter data & a button when pressed sends data from screen 1 to screen 2 using Navigator.push() to screen 2 with data passed through a constructor.
2. WelcomePage.dart(Screen 2): Will have a constructor that received data from screen 1 and then display the data in Text Widget in Screen 2.
So let’s begin with Code
1. Create a dart file – WelcomePage.dart
In Welcome page, we will just show the data received from main.dart page in a Text Widget.
As i said above, WelcomePage.dart will have a Constructor that accepts some Required data String parameter such as Name, Email, Phone.
#constructor Snippet Code
String name,email,phone;
WelcomePage({Key? key,required this.name,required this.email,required this.phone}) : super(key: key);
Then use the String data to print in Text Widget.
Text('Name: $name'),
Note: If you are using Stateful Widget, then you cannot directly use the data, for that you need to use widget.data as below.
Text('Name: ${widget.name}'),
WelcomePage.dart Complete Code
import 'package:flutter/material.dart';
class WelcomePage extends StatelessWidget {
String name,email,phone;
WelcomePage({Key? key,required this.name,required this.email,required this.phone}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Name: $name'),
Text('Email: $email'),
Text('Phone: $phone'),
],
),
),
),
);
}
}

2. main.dart – Where user will Enter The Data in TextField.
In main.dart, we will have 3 TextField where user can enter his Name, Email & Phone No and a button when pressed will send the entered data to Page 2(WelcomePage.dart) using Navigator.push() & pass the data through WelcomePage Constructor.
In each TextField we have attached TextEditingController that will hold the data entered by the user in textField.
Navigator to pass data to screen 2 ( Welcomepage)
Navigator.of(context).push(MaterialPageRoute(
builder: (context) => WelcomePage(
name: _name.text,
email: _email.text,
phone: _phone.text)
)
);
main.dart complete code
import 'package:flutter/material.dart';
import 'package:passing_data/ToDoDetail.dart';
import 'package:passing_data/Todo.dart';
import 'package:passing_data/WelcomePage.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Form(),
);
}
}
class Form extends StatefulWidget {
const Form({Key? key}) : super(key: key);
@override
_FormState createState() => _FormState();
}
class _FormState extends State<Form> {
TextEditingController _name = TextEditingController();
TextEditingController _email = TextEditingController();
TextEditingController _phone = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: TextField(
controller: _name,
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Enter your Name'
),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: TextField(
controller: _email,
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Enter your Email'
),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: TextField(
controller: _phone,
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Enter your Phone No'
),
),
),
ElevatedButton(onPressed: (){
Navigator.of(context).push(MaterialPageRoute(builder: (context)=>WelcomePage(name: _name.text, email: _email.text, phone: _phone.text)));
}, child: Text('Go Next Page'))
],
),
),
);
}
}






