
Değerli ustalarım örneğin Test 1 girip soruları çözüyorum. Test bittiği zaman doğru ve yanlış sayısını kullanıcıya gösterebiliyorum ve 'Kabul Et' e basarak diğer testlerin olduğu sayfaya yöneldiğimde , ne yaparsam yapayım Doğru ve Yanlış sayısını güncelleyemiyorum. Hep sıfır olarak kalıyor. Bir çok yolu denedim olmuyor. Yapay zeka ile de denedim ÖmerAti hocam da uğraştı konteynerin işlevini yerine getirmediğini söyledi vs. yine yapamadım. Yardımcı olursanız çok sevinirim. Karşılığında yapılması gereken basit iş veya görevleriniz var ise elimden geleni yapabilirim.
Bu içinde Test 1, Test 2 gibi testlerin bulunduğu sayfa TestSayfasi kodu:
import 'package:flutter/material.dart';
import 'main.dart';
import 'soru_sayfasi.dart';
import 'test_veri.dart';
import 'test_veri2.dart';
import 'mykonteyner.dart';
class TestSayfasi extends StatelessWidget {
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text('Dilediğin Testi Seç'),
),
body: ListView(
children: <Widget>[
for (int i = 1; i <= 20; i++)
MyWidget(
child: GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SoruSayfasi(test_1: getTestVeri(i)),
),
);
},
child: Container(
height: 55,
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10),
),
child: Stack(
alignment: Alignment.center,
children: [
Center(
child: Text(
'Test $i',
style: BilgiTesti.yaldizliYazi,
),
),
Positioned(
top: 5,
right: 5,
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
'Doğru: ${getTestVeri(i).dogruSayisi}',
style: TextStyle(fontSize: 14, color: Colors.green),
),
Text(
'Yanlış: ${getTestVeri(i).yanlisSayisi}',
style: TextStyle(fontSize: 14, color: Colors.red),
),
],
),
),
],
),
),
),
),
],
),
),
);
}
TestVeri getTestVeri(int testNumber) {
switch (testNumber) {
case 1:
return TestVeri();
case 2:
return TestVeri2();
case 3:
return TestVeri();
// Diğer testler için de aynı şekilde case'ler ekleyebilirsiniz.
default:
return TestVeri(); // Varsayılan olarak bir TestVeri nesnesi döndürüyoruz.
}
}
}Bu da örneğin Test 1 butonuna tıklandığında karşımıza çıkan , Test bittiğinde AlertDialog içerisinde sonuçları gösterdiğim Soru Sayfası Kodu:import 'package:bilgi/Test_Sayfasi.dart';
import 'package:flutter/material.dart';
import 'constants.dart';
import 'test_veri.dart';
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()) {
int dogruSayisi = 0;
int yanlisSayisi = 0;
for (var secim in secimler) {
if (secim == kDogruIkonu) {
dogruSayisi++;
} else if (secim == kYanlisIkonu) {
yanlisSayisi++;
}
}
showDialog<void>(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return AlertDialog(
title: Center(
child: Text(
'Test Tamamlandı',
textAlign: TextAlign.center,
),
),
content: SingleChildScrollView(
child: ListBody(
children: <Widget>[
Center(
child: Text(
'Doğru Sayısı: $dogruSayisi',
style: TextStyle(fontSize: 22, color: Colors.green),
),
),
Center(
child: Text(
'Yanlış Sayısı: $yanlisSayisi',
style: TextStyle(fontSize: 22, color: Colors.red),
),
),
SizedBox(height: 20),
Center(
child: Text(
'Başka test çözmek ister misiniz?',
style: TextStyle(fontSize: 18, color: Colors.black),
),
),
],
),
),
actions: <Widget>[
TextButton(
child: const Text('Tekrar Dene'),
onPressed: () {
Navigator.of(context).pop();
// Burada testi başa döndüren kodu eklemelisiniz.
},
),
TextButton(
child: const Text('Kabul Et'),
onPressed: () {
Navigator.pop(context);
Navigator.pop(
context,
MaterialPageRoute(
builder: (context) => TestSayfasi(),
),
);
setState(() {
widget.test_1.testiSifirla();
secimler = [];
});
},
),
],
);
},
);
setState(() {
widget.test_1.testiSifirla();
secimler = [];
});
} else {
setState(() {
secilenButon == widget.test_1.getSoruYaniti()
? secimler.add(kDogruIkonu)
: secimler.add(kYanlisIkonu);
widget.test_1.sonrakiSoru();
});
}
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text('Test Devam Ediyor..'),
),
backgroundColor: Colors.teal[50],
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.black,
),
),
),
),
),
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: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
Icons.thumb_up,
size: 30.0,
color: Colors.white,
),
],
),
),
),
),
],
),
),
),
],
),
),
);
}
}Lazım olurmu bilmiyorum ancak bu da text halinde içine soruları yazdığım TestVeri Sayfası kodum:import 'soru.dart';
class TestVeri {
int dogruSayisi = 0;
int yanlisSayisi = 0;
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;
}
void dogruCevap() {
dogruSayisi++;
sonrakiSoru();
}
void yanlisCevap() {
yanlisSayisi++;
sonrakiSoru();
}
}