aslında geçersiz bir argümanım yok gibi geliyor bana. hatanın sebebini anlayamadım. sayfayı da görüntüleyebiliyorum ama bu hatadan kurtulmak istiyorum çünkü bir kaç yerde alıyorum. sayfamın kodları:
//ÖĞRENCİLERİN SINAV-SORULARA VERDİKLERİ CEVAPLAR VE GÖNDERDİKLERİ ÖDEVLERİN SIRALANDIĞI SAYFA
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:flutter/material.dart';
import 'package:sby_cpal_demo/Helpers/AtaWidget.dart';
import 'package:sby_cpal_demo/main.dart';
import 'package:url_launcher/url_launcher.dart';
class OgrencilerinCevaplariPage extends StatefulWidget {
final mapGorsel; final idGorsel;
OgrencilerinCevaplariPage({Key key, this.mapGorsel, this.idGorsel}) : super(key: key);
@override
State<StatefulWidget> createState() {
return OgrencilerinCevaplariPageState(this.mapGorsel, this.idGorsel);
}
}
class OgrencilerinCevaplariPageState extends State{
final mapGorsel; final idGorsel;
OgrencilerinCevaplariPageState(this.mapGorsel, this.idGorsel);
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
QuerySnapshot querySnapshot;
final FirebaseAuth _auth = FirebaseAuth.instance;
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
appBar: AppBar(
title: Text("${mapGorsel["baslik"]}' ni yapanlar"),
actions: [
IconButton(
icon: Icon(Icons.home),
onPressed: () {Navigator.push(context, MaterialPageRoute(builder: (context) => MyHomePage()));
}),
Builder(
builder: (context) => IconButton(
icon: Icon(Icons.login),
onPressed: () async {
AtaWidget.of(context).kullaniciadi = " ";
AtaWidget.of(context).kullanicimail = " ";
AtaWidget.of(context).personelGiris = false;
AtaWidget.of(context).ogrenciGiris = false;
await _auth.signOut();
if (await GoogleSignIn().isSignedIn()) {
print("google user");
await GoogleSignIn().disconnect();
await GoogleSignIn().signOut();
}
Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => MyHomePage()));
Scaffold.of(context).showSnackBar(SnackBar(
content: Text("Başarıyla çıkış yapıldı"),
));
},
),
)
],
),
body: StreamBuilder(
stream: AtaWidget.of(context).olusturulan_sinav_ogrenciCevaplari == true ? FirebaseFirestore.instance.collection("ders_sinavlari_olusturulanlar")
.doc(idGorsel).collection("ogrencilerin_cevaplari").orderBy("tarih").snapshots()
: AtaWidget.of(context).gorsel_sinav_ogrenciCevaplari == true ? FirebaseFirestore.instance.collection("ders_sinavlari_gorseller")
.doc(idGorsel).collection("ogrencilerin_cevaplari").orderBy("tarih").snapshots()
: AtaWidget.of(context).gorsel_odevler_ogrenciGonderdikleri == true ? FirebaseFirestore.instance.collection("ders_odevleri_gorseller")
.doc(idGorsel).collection("ogrencilerin_gonderdikleri").orderBy("tarih").snapshots()
: FirebaseFirestore.instance.collection("ders_odevleri_metinseller").doc(idGorsel).collection("ogrencilerin_gonderdikleri").orderBy("tarih").snapshots(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: CircularProgressIndicator(),
);
} else if (snapshot.hasError) {
return Center(child: Icon(Icons.error, size: 80),
);
}
else if (snapshot.data == null) {
return Center(child: CircularProgressIndicator(),
);
}
final querySnapshot = snapshot.data;
return Column(children: [
SizedBox(height: 10,),
Visibility(visible: AtaWidget.of(context).ogrenciGiris ==true ? true : false,
child: Text("*Her öğrenci sadece kendi gönderisini görebilir yada silebilir.*",
style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold, fontStyle: FontStyle.italic, color: Colors.orange),
textAlign: TextAlign.center,
),
),
SizedBox(height: 5,),
Divider(height: 1.5, color: Colors.blueGrey,),
Flexible(
child: ListView.builder(
itemCount: querySnapshot.size,
itemBuilder: (context, index) {
final map = querySnapshot.docs[index].data();
final id = querySnapshot.docs[index].id;
return Builder(
builder: (context) => Dismissible(
key: Key(querySnapshot.docs[index].id),
onDismissed: (direction) async {
if (AtaWidget.of(context).kullaniciadi == map["ogrenci"] ){
await querySnapshot.docs[index].reference.delete();
_scaffoldKey.currentState.showSnackBar(SnackBar(
content: Text("Gönderi başarıyla silindi"),
));
} else{
AlertDialog alertDialog = new AlertDialog(
title: Text("Hata: "), content: Text("Gönderi sadece gönderen öğrenci tarafından silinebilir."),
);
showDialog(context: context, builder: (_) => alertDialog);
}
},
child: Column(children: [
ListTile(
leading: CircleAvatar(
backgroundColor: Colors.white,
child: Text("${index+1}"),
),
title: Text(map["ogrenci"], style: TextStyle(color: Colors.indigo),
),
subtitle: Text("tarih: "+map["tarih"]),
onTap: () async {
if (AtaWidget.of(context).kullaniciadi == AtaWidget.of(context).derslerOgretmen
|| AtaWidget.of(context).kullaniciadi == map["ogrenci"] ) {
gonderiGor(map["gorsel"], map["baslik"], map["aciklama"]);
} else {
AlertDialog alertDialog = new AlertDialog(
title: Text("Hata: "),
content: Text("Gönderi sadece öğretmen veya cevabı gönderen öğrenci tarafından görülebilir."),
);showDialog(context: context, builder: (_) => alertDialog);
}
},
),
Divider(height: 1.5, color: Colors.blueGrey,),
]),
),
);
},
),
),
Visibility(visible: AtaWidget.of(context).personelGiris ==true && AtaWidget.of(context).kullaniciadi != " " ? true : false,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text("**Öğrencilerin gönderilerini ismin üzerine tıklayarak görebilirsiniz. Liste ilk gönderimden sona doğru sıralanmıştır.**",
style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold, fontStyle: FontStyle.italic, color: Colors.orange),
textAlign: TextAlign.center,
),
),
),
]);
},
),
);
}
void gonderiGor ( String gorsel, String baslik, String aciklama ) async {
Widget SetUpAlertDialogContainer() {
return Container(height: 500, width: 500,
child: gorsel != "" ? Image.network(gorsel, fit: BoxFit.fill,
errorBuilder: (BuildContext context, Object exception, StackTrace stackTrace) {
return Center(
child: Image.asset("assets/okullogo.png", fit: BoxFit.contain,
),
);
},
)
: Center(child: Text(aciklama, style: TextStyle(color: Colors.white),), ),
);
}
showDialog(context: context, builder: (_) {
return AlertDialog(
backgroundColor: Color(0xAA304030),
title: Center(
child: RichText(textAlign: TextAlign.center,
text: TextSpan(style: TextStyle(),
children: <TextSpan>[
TextSpan(text: "Başlık: "),
TextSpan(text: baslik, style: TextStyle(color: Colors.orange, fontWeight: FontWeight.bold,
fontStyle: FontStyle.italic, fontSize: 15),
)
]
))
),
content: SetUpAlertDialogContainer(),
actions: [
Visibility(visible: gorsel != "" ? true: false,
child: Center(child:
RichText(textAlign: TextAlign.center,
text: TextSpan(style: TextStyle(),
children: <TextSpan>[
TextSpan(text: "Açıklama: "),
TextSpan(text: aciklama, style: TextStyle(color: Colors.orange, fontWeight: FontWeight.bold,
fontStyle: FontStyle.italic, fontSize: 15),
)
]
)),
),
),
Visibility(visible: gorsel != "" ? true: false,
child: RaisedButton(
color: Colors.blueAccent,
child: Text("Tarayıcıda Aç"),
onPressed: () {
_launchIt(gorsel);
Navigator.of(context, rootNavigator: true).pop('dialog');
}),
),
],
);
});
}
void _launchIt(command) async {
if (await canLaunch(command)) {
await launch(command);
} else {
print("link açılmıyor");
}
}
}
kodum çok uzun biliyorum bakabilen olursa çok sevinirim. terminal hata mesajım ise:
════════ Exception caught by image resource service ════════════════════════════════════════════════
The following ArgumentError was thrown resolving an image codec:
Invalid argument(s): No host specified in URI file:///
When the exception was thrown, this was the stack:
#0 _HttpClient._openUrl (dart:_http/http_impl.dart:2407:9)
#1 _HttpClient.getUrl (dart:_http/http_impl.dart:2328:48)
#2 NetworkImage._loadAsync (package:flutter/src/painting/_network_image_io.dart:89:59)
#3 NetworkImage.load (package:flutter/src/painting/_network_image_io.dart:50:14)
#4 ImageProvider.resolveStreamForKey.<anonymous closure> (package:flutter/src/painting/image_provider.dart:504:13)
...
Image provider: NetworkImage("", scale: 1.0)
Image key: NetworkImage("", scale: 1.0)
sayfa açılır açılmaz bu hatayı alıyorum.