Bu butonlardaki veriyi ekranda gösterecek olan child'a aktaramıyorum. Manuel olarak kod bölümünden değiştirince oluyor. Ama butonlarla değişmiyor.
Butondaki değişkeni başka sayfalara nasıl aktarabilirim?
İkiye bölünen ekranın üst kısmındaki butonların kodları aşağıdadır. Bu butonlardan gelen değeri bir fonksiyona atayıp, fonksiyonda gelen değişkene göre uygun sayfayı return edip, fonksiyonu ekranın alt kısmını gösterecek olan bölüme yazmam gerekiyor. Veriyi gönderemiyorum.
class ControlButtons extends StatefulWidget {
@override
_ControlButtonsState createState() => _ControlButtonsState();
}
class _ControlButtonsState extends State<ControlButtons> {
AltMenuData _altMenuData = AltMenuData();
@override
Widget build(BuildContext context) {
return Table(
children: [
TableRow(
children: [
GestureDetector(
onTap: () {
setState(() {
_altMenuData.indexAl(1);
});
},
child: ControlButtonCard(
icon: Icon(
Icons.add_circle_outline_rounded,
color: Colors.blue,
),
text: "Kütüphane",
),
),
GestureDetector(
onTap: () {
setState(() {
_altMenuData.indexAl(2);
});
},
child: ControlButtonCard(
icon: Icon(
Icons.search_rounded,
color: Colors.blue,
),
text: "Kitap Ara",
),
),
],
),
TableRow(
children: [
GestureDetector(
onTap: () {
setState(() {
_altMenuData.indexAl(3);
});
},
child: ControlButtonCard(
icon: Icon(
Icons.person_add,
color: Colors.blue,
),
text: "Talebe Ekle",
),
),
GestureDetector(
onTap: () {
setState(() {
_altMenuData.indexAl(4);
});
},
child: ControlButtonCard(
icon: Icon(
Icons.person_search,
color: Colors.blue,
),
text: "Talebe Ara",
),
),
],
),
],
);
}
}İndex alabilmek için başka sayfada class oluşturdum. Aşağıda:class AltMenuData {
int menuIndex;
indexAl(int index) {
this.menuIndex = index;
}
degisenMenu() {
switch (menuIndex) {
case 1:
return Kutuphane();
break;
case 2:
return KitapAra();
break;
case 3:
return TalebeEkle();
break;
case 4:
return TalebeAra();
break;
default:
return Container(
child: Center(
child: Text("Bir şeyler ters gitti!"),
),
);
}
}
}Bu da ekranda görüntüyü oluşturan kodlar. Parça parça olmasın diye tamamını atıyorum. İlgili yer 90. satırdaki child yazan yer.void main() {
runApp(
MaterialApp(
home: AdminHomePage(),
),
);
}
class AdminHomePage extends StatefulWidget {
@override
_AdminHomePageState createState() => _AdminHomePageState();
}
class _AdminHomePageState extends State<AdminHomePage> {
AltMenuData _altMenuData = AltMenuData();
final _scaffoldKey = GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
final screenHeight = MediaQuery.of(context).size.height;
return Scaffold(
key: _scaffoldKey,
body: Column(
children: <Widget>[
Expanded(
flex: 3,
child: Stack(
children: <Widget>[
OpaqueImage(
color: primaryColorOpacity.withOpacity(0.85),
imageUrl: "assets/images/kitap_arkaplan.jpg",
),
SafeArea(
child: Padding(
padding: const EdgeInsets.all(4),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Align(
alignment: Alignment.centerLeft,
child: IconButton(
icon: const Icon(Icons.star),
color: Colors.white,
onPressed: () {
Navigator.pushAndRemoveUntil(
context,
PageTransition(
type: PageTransitionType.fade,
child: UserHomePage()),
(Route<dynamic> route) => false);
},
),
),
Align(
alignment: Alignment.topCenter,
child: Text(
"Yönetici Sayfası",
textAlign: TextAlign.center,
style: headingTextStyle,
),
),
Align(
alignment: Alignment.centerRight,
child: IconButton(
icon: const Icon(
Icons.supervisor_account_rounded),
color: Colors.white,
onPressed: () {},
),
),
],
),
ControlButtons(),
],
),
),
),
],
),
),
Expanded(
flex: 5,
child: SingleChildScrollView(
child: Container(
height: screenHeight * (5 / 8),
padding: const EdgeInsets.only(top: 0),
color: Colors.white,
child: _altMenuData.degisenMenu(),
),
),
),
],
),
);
}
}