merhabalar. benim elimde ürün olarak 4 farklı okul projesi var. bunların her birinin kendi bilgileri var. ben bu projeleri listeledim. bunlara tıkladığımda da her birinin ayrı detay sayfasına gitmek istiyorum. hatta bir proje eklediğimde de onun otomatik olarak detay sayfasının oluşmasını istiyorum. detay sayfalarının şablonu hep aynı. o yüzden kopyala yapıştır ile her bir projenin ayrı ayrı detay sayfasını elle oluşturup onlara ayrı ayrı Navigator ile giderek uygulamanın boyutunu gereksiz büyütmek istemiyorum. anlattığım durumu e ticaret uygulaması şeklinde yapılmışı var ama onlar veri tabanı kullanmışlar. veri tabanı kullanmadan bunu yapmanın bir yolu var mı? ilgili kodları aşağıya bırakıyorum.
class ProjeDetaySayfasi extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return ProjeDetaySayfasiState();
}
}
enum Secenek { Sil, Guncelle }
class ProjeDetaySayfasiState extends State {
final _formKey = GlobalKey<FormState>();
String unvan;
File _secilenresim;
//final picker = ImagePicker();
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
leading: Icon(Icons.pageview),
title: Text("ŞEHİT BAYRAM YEŞİL ÇPAL"),
actions: <Widget>[
PopupMenuButton<Secenek>(
onSelected: islemSec,
itemBuilder: (BuildContext) => <PopupMenuEntry<Secenek>>[
PopupMenuItem(
value: Secenek.Guncelle,
child: Text("BİLGİLERİ GÜNCELLE")),
PopupMenuItem(
value: Secenek.Sil,
child: Text("BİLGİLERİ SİL"))
])
],
),
body: Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Container(
child: Align(
alignment: Alignment.topCenter,
child: SingleChildScrollView(
physics: ClampingScrollPhysics(),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Container(height: 150, width: double.maxFinite,
child: _secilenresim == null ? Image(
image: AssetImage("assets/okullogo.png"),
)
: Image.file(_secilenresim),
),
SizedBox(width: 380, height: 25,
child: RaisedButton(
child: Text("Galeriden Proje resmini değiştirmek için tıklayın"),
onPressed: () {
galeriden_yukleme();
}),
),
Divider(height: 10.0, color: Colors.white,)
],
),
),
),
),
Expanded(child: ListView.builder(
itemCount: AtaWidget.of(context).proje_BilgiTablosuBaslik.length,
itemBuilder: (context, index)=>ListTile(
leading: Icon(Icons.details),
title: Text(AtaWidget.of(context).proje_BilgiTablosuBaslik[index], style: TextStyle(
color: Colors.blueGrey, fontSize: 15, fontStyle: FontStyle.italic, fontWeight: FontWeight.w500),),
subtitle: Text(AtaWidget.of(context).proje_BilgiTablosuGiris[index],
style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold, color: Colors.black),),
onLongPress: (){
if(AtaWidget.of(context).kullaniciadi == "ömer kalfa"){
TextEditingController kontrol = TextEditingController();
showDialog(
context: context,
builder: (BuildContext context){
return Form(
key: _formKey,
child: Container(
padding: EdgeInsets.only(right: 10, left: 10, top: 0, bottom: 250),
child: Align(
alignment: Alignment.topCenter,
child: SingleChildScrollView(
physics: ClampingScrollPhysics(),
child: AlertDialog(
title: Text(AtaWidget.of(context).proje_BilgiTablasuGuncelle[index]),
content: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
ListTile(
leading: Icon(
Icons.announcement,
color: Colors.red,
),
title: Text("Güncellemelerinizi bitirdikten sonra lütfen sayfanın alt tarafındaki KAYDET"
"butonuna tıklayarak güncellemelerinizi kaydediniz. Aksi takdirde değişiklikler kaybolacaktır.",
style: TextStyle(fontSize: 15, fontWeight: FontWeight.w500)),
),
TextFormField(
controller: kontrol,
decoration: InputDecoration(
labelText: AtaWidget.of(context).proje_BilTabGunGiris[index],
labelStyle: TextStyle(color: Colors.purple),
),
style: TextStyle(fontStyle: FontStyle.italic, fontSize: 17,),
),
],
),
actions: <Widget>[
MaterialButton(
color: Colors.blue,
child: Text("Güncelle"),
onPressed: (){
_formKey.currentState.save();
print(kontrol.text);
setState(() {
AtaWidget.of(context).proje_BilgiTablosuGiris[index]=kontrol.text;
kontrol.clear();
Navigator.pop(context);
});
})
],
),
),
),
));
}
);
}
},
),
)
)
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
anasayfayaGit();
},
child: Icon(Icons.home),
tooltip: "Anasayfaya Dön",
),
);
}
void islemSec(Secenek secenek) async {
int sonuc;
switch (secenek) {
case Secenek.Guncelle:
if (AtaWidget.of(context).kullaniciadi == "ömer kalfa"){
AlertDialog alertDialog =
new AlertDialog(title: Text("Güncellenecek alana uzun basarak işleme devam edebilirsiniz."));
showDialog(context: context, builder: (_) => alertDialog);
} else {
AlertDialog alertDialog =
new AlertDialog(title: Text("Hata: "), content: Text(" İşlemi yapmaya yetkiniz yok"),);
showDialog(context: context, builder: (_) => alertDialog);
}
break;
default:
}
}
Future galeriden_yukleme() async {
if (AtaWidget.of(context).kullaniciadi == "ömer kalfa"){
var resim = await ImagePicker.pickImage(source: ImageSource.gallery);
setState(() {
_secilenresim = resim;
});
}else{AlertDialog alertDialog =
new AlertDialog(title: Text("Hata: "), content: Text(" İşlemi yapmaya yetkiniz yok"),);
showDialog(context: context, builder: (_) => alertDialog);}
}
void anasayfayaGit() async {
bool sonuc = await Navigator.push(
context, MaterialPageRoute(builder: (context) => Anasayfa()));
}
}