- 24 Nis 2021
- 43
- 0
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});
[USER=931120]Override[/USER]
_ProfilEkraniState createState() => _ProfilEkraniState();
}
class _ProfilEkraniState extends State<ProfilEkrani> {
cikisYap() {
Navigator.pop(context);
}
[USER=931120]Override[/USER]
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Column(
children: <Widget>[
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 {
[USER=931120]Override[/USER]
Widget build(BuildContext context) {
return MaterialApp(
home: GirisEkrani(),
);
}
}
class GirisEkrani extends StatefulWidget {
[USER=931120]Override[/USER]
_GirisEkraniState createState() => _GirisEkraniState();
}
class _GirisEkraniState extends State<GirisEkrani> {
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: <Widget>[
new FlatButton(
child: new Text("Kapat"),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
}
[USER=931120]Override[/USER]
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Giriş Ekrani")),
body: Container(
margin: EdgeInsets.all(100),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
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});
[USER=931120]Override[/USER]
_ProfilEkraniState createState() => _ProfilEkraniState();
}
class _ProfilEkraniState extends State<ProfilEkrani> {
cikisYap() {
Navigator.pop(context);
}
[USER=931120]Override[/USER]
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Column(
children: <Widget>[
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.
Son düzenleme: