
Merhaba değerli TürkHackTeam ailesi, bugün ki konumda sizlere MaterialApp ile sayfalar arası veri aktarımından bahsedeceğim hemen konuya geçelim

MaterialApp içinde rota tanımlamadığımızda, navigator.push ile sayfalar arasında veri aktarımı yapmak istediğimizde aşağıdaki yolu izleyeceğiz.
1)Stateful widget ile iki ekran oluşturduk.

2)İkinci ekranımızda (ProfilEkrani) iki değişken tanımladık. Değişkenlerimizi bu kez ilk class'ın içine, ilk @Override ifadesinin üstüne yazıyoruz. Bir de constructor oluşturduk. Böylece birinci ekrandan (GirisEkrani), ProfilEkrani'na parametre göndererek, değerlerin buraya aktarılmasını sağlacağız.

3)Buraya gelen değerlere de;
Kod:
widget.kullaniciAdi
widget.sifre
diyerek erişiyoruz ve Text widget içerisinde gösteriyoruz.
İkinci ekranımız:
Kod:
class ProfilEkrani extends StatefulWidget {
String kullaniciAdi, sifre;
ProfilEkrani({this.kullaniciAdi, this.sifre});
@Override
_ProfilEkraniState createState() => _ProfilEkraniState();
}
class _ProfilEkraniState extends State {
cikisYap() {
Navigator.pop(context);
}
@Override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Column(
children: [
RaisedButton(
onPressed: cikisYap,
child: Text("Çıkış Yap"),
),
Text("Kullanıcı Adınız: ${widget.kullaniciAdi}"),
Text("Şifreniz: ${widget.sifre}"),
],
),
),
);
}
}
Giriş ekranımızda kullandığımız navigator.push için de aşağıdaki değişikliği yapmamız yeterli. ProfilEkrani'ni verdiğimizde, ProfilEkrani içerisinde tanımladığımız değişkenlere burada değer veriyoruz.
Kod:
girisYap() {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ProfilEkrani(
kullaniciAdi: t1.text,
sifre: t2.text,
),
),
);
}
Kodun tamamı:

Kod:
import 'package:flutter/material.dart';
v o i d main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@Override
Widget build(BuildContext context) {
return MaterialApp(
home: GirisEkrani(),
);
}
}
class GirisEkrani extends StatefulWidget {
@Override
_GirisEkraniState createState() => _GirisEkraniState();
}
class _GirisEkraniState extends State {
TextEditingController t1 = TextEditingController();
TextEditingController t2 = TextEditingController();
girisYap() {
if (t1.text == "admin" && t2.text == "1234") {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ProfilEkrani(
kullaniciAdi: t1.text,
sifre: t2.text,
),
),
);
} else {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: new Text("Yanlış kullanıcı adı veya şifre"),
content: new Text("Lütfen giriş bilgilerinizi gözden geçirin."),
actions: [
new FlatButton(
child: new Text("Kapat"),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
}
@Override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Giriş Ekrani")),
body: Container(
margin: EdgeInsets.all(100),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextFormField(
decoration: InputDecoration(hintText: "Kullanıcı Adı"),
controller: t1,
),
TextFormField(
decoration: InputDecoration(hintText: "Şifre"),
controller: t2,
),
RaisedButton(
onPressed: () {
girisYap();
},
child: Text("Giriş Yap")),
],
),
),
);
}
}
class ProfilEkrani extends StatefulWidget {
String kullaniciAdi, sifre;
ProfilEkrani({this.kullaniciAdi, this.sifre});
@Override
_ProfilEkraniState createState() => _ProfilEkraniState();
}
class _ProfilEkraniState extends State {
cikisYap() {
Navigator.pop(context);
}
@Override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Column(
children: [
RaisedButton(
onPressed: cikisYap,
child: Text("Çıkış Yap"),
),
Text("Kullanıcı Adınız: ${widget.kullaniciAdi}"),
Text("Şifreniz: ${widget.sifre}"),
],
),
),
);
}
}
Bir konunun daha sonuna geldik. Okuduğunuz için teşekkürler.