1-) FLUTTER - Stepper(adım adım) Widget Kullanımı
**** BASİT STEPPER KULLANIMI ****
BU LİNKE KESİN BAK : https://stackoverflow.com/questions/52828424/flutter-stepper-onstepcontinue-not-firing
import 'package:flutter/material.dart';
class StepperPageGelismis extends StatefulWidget {
const StepperPageGelismis({Key? key}) : super(key: key);
@override
_StepperPageState createState() => _StepperPageState();
}
class _StepperPageState extends State<StepperPageGelismis> {
int _aktifStep = 0;
String isim = "", mail = "", sifre = "";
late List<Step> tumStepler;
@override
void initState() {
// TODO: implement initState
super.initState();
tumStepler = tumSteplerGetir();
}
@override
Widget build(BuildContext context) {
return Container(
child: SingleChildScrollView(
child: Stepper(
physics: ClampingScrollPhysics(),
steps: tumStepler,
currentStep: _aktifStep,
onStepTapped: (tiklanilanStep) {
setState(() {
_aktifStep = tiklanilanStep;
});
},
onStepContinue: () {
if (_aktifStep < tumStepler.length - 1) {
setState(() {
_aktifStep++;
});
}
},
onStepCancel: () {
if (_aktifStep > 0) {
setState(() {
_aktifStep--;
});
}
},
)),
);
}
List<Step> tumSteplerGetir() {
List<Step> stepler = [
Step(
title: Text("username giriniz"),
subtitle: Text("Alt içerik"),
isActive: true,
// seçili olan
state: StepState.indexed,
// numara gözükür
content: Padding(
padding: EdgeInsets.only(top: 5),
child: TextFormField(
decoration: InputDecoration(
border: OutlineInputBorder(), labelText: "UsernameLabel"),
),
),
),
Step(
title: Text("mail giriniz"),
subtitle: Text("mail Alt içerik"),
isActive: true,
// seçili olan
state: StepState.indexed,
// numara gözükür
content: Padding(
padding: EdgeInsets.only(top: 5),
child: TextFormField(
decoration: InputDecoration(
border: OutlineInputBorder(), labelText: "UsernameLabel"),
),
),
),
Step(
title: Text("şifre giriniz"),
subtitle: Text("şifre içerik"),
isActive: true,
// seçili olan
state: StepState.indexed,
// numara gözükür
content: Padding(
padding: EdgeInsets.only(top: 5),
child: TextFormField(
decoration: InputDecoration(
border: OutlineInputBorder(), labelText: "UsernameLabel"),
),
),
),
];
return stepler;
}
}
**** GELİŞMİŞ STEPPER KULLANIMI ****
import 'package:flutter/material.dart';
class StepperPageGelismis extends StatefulWidget {
const StepperPageGelismis({Key? key}) : super(key: key);
@override
_StepperPageState createState() => _StepperPageState();
}
class _StepperPageState extends State<StepperPageGelismis> {
int _aktifStep = 0;
String username = "", mail = "", sifre = "";
late List<Step> tumStepler;
final key0 = GlobalKey<FormFieldState>();
final key1 = GlobalKey<FormFieldState>();
final key2 = GlobalKey<FormFieldState>();
bool hata = false;
@override
void initState() {
// TODO: implement initState
super.initState();
}
@override
Widget build(BuildContext context) {
tumStepler = tumSteplerGetir();
return Container(
child: SingleChildScrollView(
child: Stepper(
steps: tumStepler,
currentStep: _aktifStep,
// onStepTapped: (tiklanilanStep) {
// setState(() {
// _aktifStep = tiklanilanStep;
// });
// },
onStepContinue: () {
_ileriButtonKontrol();
},
onStepCancel: () {
if (_aktifStep > 0) {
setState(() {
_aktifStep--;
});
}
},
)),
);
}
List<Step> tumSteplerGetir() {
List<Step> stepler = [
Step(
title: Text("username giriniz"),
subtitle: Text("Alt içerik"),
isActive: true,
// seçili olan
state: _stateleriAyarla(0),
// numara gözükür
content: Padding(
padding: EdgeInsets.only(top: 5),
child: TextFormField(
key: key0,
decoration: InputDecoration(
border: OutlineInputBorder(), labelText: "UsernameLabel"),
validator: (girilenDeger) {
if (girilenDeger!.length < 6) {
return "En az 6 karakter giriniz";
}
},
onSaved: (girilenDeger) {
username = girilenDeger!;
},
),
),
),
Step(
title: Text("mail giriniz"),
subtitle: Text("mail Alt içerik"),
isActive: true,
// seçili olan
state: _stateleriAyarla(1),
// numara gözükür
content: Padding(
padding: EdgeInsets.only(top: 5),
child: TextFormField(
key: key1,
decoration: InputDecoration(
border: OutlineInputBorder(), labelText: "mail"),
validator: (girilenDeger) {
if (girilenDeger!.length < 6) {
return "En az 6 karakter giriniz";
}
},
onSaved: (girilenDeger) {
mail = girilenDeger!;
},
),
),
),
Step(
title: Text("şifre giriniz"),
subtitle: Text("şifre içerik"),
isActive: true,
// seçili olan
state: _stateleriAyarla(2),
// numara gözükür
content: Padding(
padding: EdgeInsets.only(top: 5),
child: TextFormField(
key: key2,
decoration: InputDecoration(
border: OutlineInputBorder(), labelText: "şifre"),
validator: (girilenDeger) {
if (girilenDeger!.length < 6) {
return "En az 6 karakter giriniz";
}
},
onSaved: (girilenDeger) {
sifre = girilenDeger!;
},
),
),
),
];
return stepler;
}
StepState _stateleriAyarla(int oankiStep) {
if (_aktifStep == oankiStep) {
if (hata) {
return StepState.error;
} else {
return StepState.editing;
}
} else {
return StepState.complete;
}
}
void _ileriButtonKontrol() {
setState(() {
switch(_aktifStep){
case 0:
if(key0.currentState!.validate()){
key0.currentState!.save();
hata=false;
_aktifStep=1;
}else{
hata=true;
}
break;
case 1:
if(key1.currentState!.validate()){
key1.currentState!.save();
hata=false;
_aktifStep=2;
}else{
hata=true;
}
break;
case 2:
if(key2.currentState!.validate()){
key2.currentState!.save();
hata=false;
_aktifStep=2;
formTamamlandi();
}else{
hata=true;
}
break;
}
});
}
void formTamamlandi() {
print("başarılı ad : $username mail : $mail şifre : $sifre");
}
}