🙂 İNSANLARIN EN HAYIRLISI INSANLARA FAYDALI OLANDIR 🙂

Ramazan HABER / FLUTTER / Stepper Widget Kullanımı

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");
  }

}

 2022 Mart 21 Pazartesi
 498