• 23-08-2023, 15:08:58
    #1
    Merhabalar basit bir konuda takıldım. Aşağıdaki kodun gerekli kısmını paylaştım. Soru sayfası diye bir sayfam var. Bu sayfa TestVeri adlı sayfadaki soruları çekiyor.
    class SoruSayfasi extends StatefulWidget {
    
    @override
      _SoruSayfasiState createState() => _SoruSayfasiState();
    }
    
    class _SoruSayfasiState extends State<SoruSayfasi> {
    List<Widget> secimler = [];
      TestVeri test_1=TestVeri();
    
    
      butonFonksiyonu (bool secilenButon){
    Bu soru sayfasının başı idi. Aşağıda ki de TestVeri sayfası.
    class TestVeri{
    int _soruIndex = 0;
      List<Soru> _soruBankasi=[
    Soru(soruMetni: ',,Hallo!’’ ist eine Begrüßung auf Deutsch.',soruYaniti: true),
        Soru(soruMetni: ',,Tschüss’’ ist eine Verabschiedung auf Deutsch.',soruYaniti: true),
    Şimdi benim sorum navigatör ile soru sayfasına yönlendirince hep TestVeri sayfasındaki aynı soruları getiriyor. Testveri2 sayfasındaki farklı soruları çağıramıyorum. bir çok test eklemek istiyorum. Her test için ayrı bir soru sayfası ve Testveri hazırlamak yerine. SoruSayfası aynı kalarak Testveri2 TestVeri3 gibi testleri ayrı sayfada tutacak şekilde düzenlemek istiyorum.
    Örnek olarak navigatör kullandığımda SoruSayfası na yönlendirip ancak onun TestVeri2 veya Testveri10 adlı clasa yönlendirmek istiyorum. Bunu nasıl yapabilirim. Yardımcı olursanız sevinirim.
  • 23-08-2023, 15:25:44
    #2
    butonFonksiyonu(bool secilenButon) {

    tamamını

    List<Soru> _soruBankasi=[

    tamamını paylaşırmısın kullanıcı cevap verdiğinde çağrılacak fonksiyon nasıl tahmin edelim daha fazla kod paylasimi yaparmısın ?
  • 23-08-2023, 15:42:43
    #3
    OmerAti adlı üyeden alıntı: mesajı görüntüle
    butonFonksiyonu(bool secilenButon) {

    tamamını

    List<Soru> _soruBankasi=[

    tamamını paylaşırmısın kullanıcı cevap verdiğinde çağrılacak fonksiyon nasıl tahmin edelim daha fazla kod paylasimi yaparmısın ?
    Tabi öncelikle sorumu cevapladığınız için teşekkür ederim. Bu Soru sayfasının tamamı

    class SoruSayfasi extends StatefulWidget {
    
    @override
    _SoruSayfasiState createState() => _SoruSayfasiState();
    }
    
    class _SoruSayfasiState extends State<SoruSayfasi> {
    List<Widget> secimler = [];
    TestVeri test_1=TestVeri();
    
    
    butonFonksiyonu (bool secilenButon){
    
    if(test_1.testBittiMi()==true){
    showDialog<void>(
    context: context,
    barrierDismissible: false, // user must tap button!
    builder: (BuildContext context) {
    return AlertDialog(
    title: const Text('Sorular Bitti'),
    content: const SingleChildScrollView(
    child: ListBody(
    children: <Widget>[
    Text('Doğru ve yanlış adedi burada yazacak'),
    Text('Bir sonraki teste geçiniz'),
    ],
    ),
    ),
    actions: <Widget>[
    TextButton(
    child: const Text('Kabul Et'),
    onPressed: () {
    Navigator.of(context).pop();
    setState(() {
    test_1.testiSifirla();
    secimler= [];
    });
    
    },
    ),
    ],
    );
    },
    );
    
    setState(() {
    test_1.testiSifirla();
    secimler= [];
    });
    
    }
    
    else {
    setState(() {
    test_1.getSoruYaniti() == secilenButon
    ? secimler.add(kDogruIkonu)
    : secimler.add(kYanlisIkonu);
    test_1.sonrakiSoru();
    });
    }
    }
    
    @override
    Widget build(BuildContext context) {
    return SafeArea(
    child: Scaffold(
    appBar: AppBar(centerTitle: true,
    title: Text('YDT'),
    ),
    backgroundColor: Colors.indigo[700],
    body: Column(
    mainAxisAlignment: MainAxisAlignment.spaceBetween,
    crossAxisAlignment: CrossAxisAlignment.stretch,
    children: <Widget>[
    Expanded(
    flex: 4,
    child: Padding(
    padding: EdgeInsets.all(10.0),
    child: Center(
    child: Text(
    test_1.getSoruMetni(),
    textAlign: TextAlign.center,
    style: TextStyle(
    fontSize: 20.0,
    color: Colors.white,
    ),
    ),
    ),
    ),
    ),
    Wrap(
    alignment: WrapAlignment.center,
    spacing: 3,
    runSpacing: 3,
    children: secimler,
    ),
    Expanded(
    flex: 1,
    child: Padding(
    padding: EdgeInsets.symmetric(horizontal: 6.0),
    child: Row(
    mainAxisAlignment: MainAxisAlignment.spaceEvenly,
    children: <Widget>[
    Expanded(
    child: Padding(
    padding: EdgeInsets.symmetric(horizontal: 6),
    child: ElevatedButton(
    style: ElevatedButton.styleFrom(
    padding: EdgeInsets.all(12),
    backgroundColor: Colors.red[400],
    ),
    onPressed: () {
    butonFonksiyonu(false);
    },
    child: Icon(
    Icons.thumb_down,
    size: 30.0,
    color: Colors.white,
    ),
    ),
    ),
    ),
    Expanded(
    child: Padding(
    padding: EdgeInsets.symmetric(horizontal: 6),
    child: ElevatedButton(
    style: ElevatedButton.styleFrom(
    padding: EdgeInsets.all(12),
    backgroundColor: Colors.green[400],
    ),
    onPressed: () {
    butonFonksiyonu(true);
    },
    child: Icon(
    Icons.thumb_up,
    size: 30.0,
    color: Colors.white,
    ),
    ),
    ),
    ),
    ],
    ),
    ),
    ),
    ],
    ),
    ),
    );
    }
    }
    Bu da TestVeri sayfamın tamamı

    class TestVeri{
    int _soruIndex = 0;
      List<Soru> _soruBankasi=[
    Soru(soruMetni: ',,Hallo!’’ ist eine Begrüßung auf Deutsch.',soruYaniti: true),
        Soru(soruMetni: ',,Tschüss’’ ist eine Verabschiedung auf Deutsch.',soruYaniti: true),
        Soru(soruMetni: ',,Guten Morgen’’ ist eine Verabschiedung auf Deutsch.',soruYaniti: false),
        Soru(soruMetni: ',,Guten Tag’’ ist eine Begrüßung auf Deutsch.',soruYaniti: true),
        Soru(soruMetni: ',,Auf Wiedersehen’’ ist eine Begrüßung auf Deutsch.',soruYaniti: false),
        Soru(soruMetni: ',,Bis später’’ ist eine Verabschiedung auf Deutsch.',soruYaniti: true),
        Soru(soruMetni: ',,Gute Nacht’’ ist eine Verabschiedung auf Deutsch.',soruYaniti: true),
        Soru(soruMetni: ',, :) ’’ Es geht mir gut!',soruYaniti: true),
        Soru(soruMetni: ',, :( ’’ Es geht mir nicht gut!',soruYaniti: true),
        Soru(soruMetni: ',, :/ ’’ Es geht so!',soruYaniti: true),
        Soru(soruMetni: ',, :) ’’ Es geht mir schlecht!',soruYaniti: false),
        Soru(soruMetni: ',, :( ’’ Es geht mir toll!',soruYaniti: false),
        Soru(soruMetni: ',, :) ’’ Es geht mir nicht so gut!',soruYaniti: false),
        Soru(soruMetni: ',, :/ ’’ Nicht schlecht!',soruYaniti: true),
        Soru(soruMetni: ',, :) ’’ Es geht mir super!',soruYaniti: true),
        Soru(soruMetni: ',, :) ’’ Es geht mir sehr gut!',soruYaniti: true),
    
      ];
    String getSoruMetni (){
    return _soruBankasi[_soruIndex].soruMetni;
    }
    bool getSoruYaniti (){
    return _soruBankasi[_soruIndex].soruYaniti;
      }
    void sonrakiSoru (){
    if(_soruIndex<_soruBankasi.length-1)
    _soruIndex++;
      }
    
    bool testBittiMi(){
    if(_soruIndex>=_soruBankasi.length-1){
    return true;
        }else{
    return false;
        }
    }
    void testiSifirla(){
    _soruIndex=0;
      }
    }
    Hocam benim sorum örneğin test1, test2 test3 gibi butonlarım var. Bunlara tıklandığında Testveri, Testveri1, Testveri2 gibi soruların olduğu sayfayı navigator ile çağırmak istiyorum. Navigatoru Soru sayfasına yönlendirip örneğin SoruSayfasının TestVeri2 adlı bölümünü çağırmak istiyorum.

    Örneğin şu şekilde çağırdığımda direk Soruların olduğu sayfa açılıyor.

    Navigator.push(
    context,
      MaterialPageRoute(builder: (context) => SoruSayfasi()),
    bu SoruSayfasi() parantezinin içine TestVeri, TestVeri1, Testveri2 gibi yazarak ben farklı testleri çağırabilir miyim
    Her test için ayrı bir SoruSayfası ve soruların içinde olduğu TestVeri sayfası yapmak istemiyorum. Bunun bir kısa yolu olmalı diye düşünüyorum
  • 23-08-2023, 16:57:05
    #4
    Örnek
    MyApp sınıfı
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Test Uygulaması',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: Scaffold(
            appBar: AppBar(
              title: Text('Ana Sayfa'),
            ),
            body: Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  ElevatedButton(
                    onPressed: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(
                          builder: (context) => SoruSayfasi(test_1: TestVeri()),
                        ),
                      );
                    },
                    child: Text('Test'),
                  ),
                  ElevatedButton(
                    onPressed: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(
                          builder: (context) => SoruSayfasi(test_1: TestVeri2()),
                        ),
                      );
                    },
                    child: Text('Test 2'),
                  ),
                  ElevatedButton(
                    onPressed: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(
                          builder: (context) => SoruSayfasi(test_1: TestVeri3()),
                        ),
                      );
                    },
                    child: Text('Test 3'),
                  ),
                ],
              ),
            ),
          ),
        );
      }
    }
    SoruSayfasi sınıfının içerisinde, TestVeri nesnelerini test_1 olarak almak

    class SoruSayfasi extends StatefulWidget {
      final TestVeri test_1;
    
      SoruSayfasi({required this.test_1});
    
      @override
      _SoruSayfasiState createState() => _SoruSayfasiState();
    }
    
    class _SoruSayfasiState extends State<SoruSayfasi> {
      List<Widget> secimler = [];
    
      void butonFonksiyonu(bool secilenButon) {
        if (widget.test_1.testBittiMi()) {
        } else {
        }
      }
    
      @override
      Widget build(BuildContext context) {
        return SafeArea(
          child: Scaffold(
            appBar: AppBar(
              centerTitle: true,
              title: Text('Soru Sayfası'),
            ),
            backgroundColor: Colors.indigo[700],
            body: Column(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              crossAxisAlignment: CrossAxisAlignment.stretch,
              children: <Widget>[
                Expanded(
                  flex: 4,
                  child: Padding(
                    padding: EdgeInsets.all(10.0),
                    child: Center(
                      child: Text(
                        widget.test_1.getSoruMetni(),
                        textAlign: TextAlign.center,
                        style: TextStyle(
                          fontSize: 20.0,
                          color: Colors.white,
                        ),
                      ),
                    ),
                  ),
                ),
              ],
            ),
          ),
        );
      }
    }
    MyApp sınıfında oluşturduğunuz TestVeri2 ve TestVeri3 sınıflarını aşağıdaki şekilde tanımla
    class TestVeri2 extends TestVeri {
      TestVeri2() {
        _soruBankasi = [
          Soru(soruMetni: 'Soru A', soruYaniti: true),
          Soru(soruMetni: 'Soru B', soruYaniti: false),
        ];
      }
    }
    
    class TestVeri3 extends TestVeri {
      TestVeri3() {
        _soruBankasi = [
          Soru(soruMetni: 'Soru X', soruYaniti: true),
          Soru(soruMetni: 'Soru Y', soruYaniti: false),
        ];
      }
    }
    her buton farklı bir TestVeri sınıfını kullanarak soruları gösterecek koduna göre uyarla
  • 23-08-2023, 18:26:57
    #5
    OmerAti adlı üyeden alıntı: mesajı görüntüle
    Örnek
    MyApp sınıfı
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Test Uygulaması',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: Scaffold(
            appBar: AppBar(
              title: Text('Ana Sayfa'),
            ),
            body: Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  ElevatedButton(
                    onPressed: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(
                          builder: (context) => SoruSayfasi(test_1: TestVeri()),
                        ),
                      );
                    },
                    child: Text('Test'),
                  ),
                  ElevatedButton(
                    onPressed: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(
                          builder: (context) => SoruSayfasi(test_1: TestVeri2()),
                        ),
                      );
                    },
                    child: Text('Test 2'),
                  ),
                  ElevatedButton(
                    onPressed: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(
                          builder: (context) => SoruSayfasi(test_1: TestVeri3()),
                        ),
                      );
                    },
                    child: Text('Test 3'),
                  ),
                ],
              ),
            ),
          ),
        );
      }
    }
    SoruSayfasi sınıfının içerisinde, TestVeri nesnelerini test_1 olarak almak

    class SoruSayfasi extends StatefulWidget {
      final TestVeri test_1;
    
      SoruSayfasi({required this.test_1});
    
      @override
      _SoruSayfasiState createState() => _SoruSayfasiState();
    }
    
    class _SoruSayfasiState extends State<SoruSayfasi> {
      List<Widget> secimler = [];
    
      void butonFonksiyonu(bool secilenButon) {
        if (widget.test_1.testBittiMi()) {
        } else {
        }
      }
    
      @override
      Widget build(BuildContext context) {
        return SafeArea(
          child: Scaffold(
            appBar: AppBar(
              centerTitle: true,
              title: Text('Soru Sayfası'),
            ),
            backgroundColor: Colors.indigo[700],
            body: Column(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              crossAxisAlignment: CrossAxisAlignment.stretch,
              children: <Widget>[
                Expanded(
                  flex: 4,
                  child: Padding(
                    padding: EdgeInsets.all(10.0),
                    child: Center(
                      child: Text(
                        widget.test_1.getSoruMetni(),
                        textAlign: TextAlign.center,
                        style: TextStyle(
                          fontSize: 20.0,
                          color: Colors.white,
                        ),
                      ),
                    ),
                  ),
                ),
              ],
            ),
          ),
        );
      }
    }
    MyApp sınıfında oluşturduğunuz TestVeri2 ve TestVeri3 sınıflarını aşağıdaki şekilde tanımla
    class TestVeri2 extends TestVeri {
      TestVeri2() {
        _soruBankasi = [
          Soru(soruMetni: 'Soru A', soruYaniti: true),
          Soru(soruMetni: 'Soru B', soruYaniti: false),
        ];
      }
    }
    
    class TestVeri3 extends TestVeri {
      TestVeri3() {
        _soruBankasi = [
          Soru(soruMetni: 'Soru X', soruYaniti: true),
          Soru(soruMetni: 'Soru Y', soruYaniti: false),
        ];
      }
    }
    her buton farklı bir TestVeri sınıfını kullanarak soruları gösterecek koduna göre uyarla
    Hocam çok teşekkür ederim işin gücün rast gelsin. Söylediklerinizin tamamını yaptım ve sadece şu eşitlik eklemek eksikti. TestVeri test_1 = TestVeri(); bunu da ekleyince tam oldu. Teşekkür ederim.