如何解决NoSuchMethodError: 在 null 上调用了方法“[]”接收器:空尝试调用:[](“duyuru”)
//我的duyuru控制器
class DuyuruController extends GetxController {
FirebaseFirestore _firebaseFirestore = FirebaseFirestore.instance;
TextEditingController duyuru = TextEditingController();
Rx<List<DuyuruModel>> duyurumodel = Rx<List<DuyuruModel>>([]);
List<DuyuruModel> get newsModelList => duyurumodel.value;
@override
void onInit() {
duyurumodel.bindStream(todoStream(uid));
super.onInit();
}
var uid;
String collection = "duyuru";
firestoreduyuruekle(String id) {
uid = new Uuid().v4().toString();
_firebaseFirestore.collection(collection).doc(uid).set({
"kullaniciid": id,"duyuruid": uid,"duyuru": duyuru.text,});
duyuru.clear();
}
Stream<List<DuyuruModel>> todoStream(String uid) {
return _firebaseFirestore
.collection(collection)
.doc(uid)
.snapshots()
.map((query) {
var data = query.data();
List veriler = data['duyuru'];
List<DuyuruModel> retVal = [];
veriler.forEach((element) {
retVal.add(DuyuruModel.fromMap(element));
});
return retVal;
});
}
}
// 我的模型
class DuyuruModel {
static const ID = "duyuruid";
static const NAME = "duyuru";
String id;
String duyuru;
DuyuruModel({
this.id,this.duyuru,});
DuyuruModel.fromMap(DocumentSnapshot documentSnapshot) {
id = (documentSnapshot.data() as Map)[ID];
duyuru = (documentSnapshot.data() as Map)[NAME];
}
}
// 我的用户界面
class DuyuruWidget extends StatefulWidget {
@override
_DuyuruWidgetState createState() => _DuyuruWidgetState();
}
class _DuyuruWidgetState extends State<DuyuruWidget> {
var deger2 = Get.put<AuthController>(AuthController());
var deger1 = Get.put<DuyuruController>(DuyuruController());
@override
Widget build(BuildContext context) {
return Obx(() {
if (deger1.newsModelList == null) {
return Text('Loading');
} else if (deger1.newsModelList.isEmpty) {
return Text('Empty List');
} else {
return ListView.builder(
itemCount: deger1.newsModelList.length,itemBuilder: (context,index) {
return Text(deger1.newsModelList[index].duyuru);
},);
}
});
}
}
// addDuyuru
class DuyuruEklemeSayfasi extends StatelessWidget {
var deger = Get.put(DuyuruController());
var kontrol = Get.put(AuthController());
final GlobalKey<FormState> control = GlobalKey<FormState>();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Duyuru Ekle"),),body: Container(
child: Form(
key: control,child: Column(
children: [
TextFormField(
validator: (value) {
if (value == null && value.isEmpty) {
Get.snackbar("Hata","Lütfen Duyuru giriniz");
}
return;
},controller: deger.duyuru,decoration: Inputdecoration(
hintText: "Duyuru Ekle",ElevatedButton(
onpressed: () {
deger.firestoreduyuruekle(kontrol.usermodel.value.id);
Get.to(HomeScreen());
},child: Text("Duyuruyu Ekle"),],);
}
}
// Duyuruwidget
class DuyuruWidget extends StatefulWidget {
@override
_DuyuruWidgetState createState() => _DuyuruWidgetState();
}
class _DuyuruWidgetState extends State<DuyuruWidget> {
var deger2 = Get.put<AuthController>(AuthController());
var deger1 = Get.put<DuyuruController>(DuyuruController());
@override
Widget build(BuildContext context) {
return Obx(() {
if (deger1.newsModelList == null) {
return Text('Loading');
} else if (deger1.newsModelList.isEmpty) {
return Text('Empty List');
} else {
return ListView.builder(
itemCount: deger1.newsModelList.length,index) {
return Text(
deger1.newsModelList[index].duyuru,style: TextStyle(color: Colors.black),);
},);
}
});
}
}
// 用户控制器
class AuthController extends GetxController {
FirebaseAuth auth = FirebaseAuth.instance;
FirebaseFirestore _firebaseFirestore = FirebaseFirestore.instance;
TextEditingController emailtext = TextEditingController();
TextEditingController password = TextEditingController();
Rx<User> user;
Rx<usermodel> usermodel = usermodel().obs;
String usercollection = "users";
String duyurucollection = "duyuru";
@override
void onReady() {
user = Rx<User>(auth.currentUser);
user.bindStream(auth.userChanges());
ever(user,setscreen);
super.onReady();
}
setscreen(User user) {
if (user == null) {
Get.to(AuthenScreen());
} else {
usermodel.bindStream(listentouser());
Get.to(HomeScreen());
}
}
void signIn() async {
try {
await auth
.signInWithEmailAndPassword(
email: emailtext.text.trim(),password: password.text.trim())
.then((result) {
_clearControllers();
});
} catch (e) {
debugPrint(e.toString());
Get.snackbar("Sign In Failed","Try again");
}
}
void signUp() async {
try {
await auth
.createuserWithEmailAndPassword(
email: emailtext.text.trim(),password: password.text.trim())
.then((result) {
String _userId = result.user.uid;
_addUserToFirestore(_userId);
_clearControllers();
});
} catch (e) {
debugPrint(e.toString());
Get.snackbar("Sign In Failed","Try again");
}
}
void signOut() async {
await auth.signOut();
}
void _addUserToFirestore(String userId) {
_firebaseFirestore.collection(usercollection).doc(userId).set({
"password": password.text.trim(),"id": userId,"email": emailtext.text.trim(),});
}
Stream<usermodel> listentouser() {
return _firebaseFirestore
.collection(usercollection)
.doc(user.value.uid)
.snapshots()
.map((event) => usermodel.fromSnapshot(event));
}
void _clearControllers() {
emailtext.clear();
password.clear();
}
}
我的错误:未处理的异常:NoSuchMethodError:方法“[]”被调用为空值。接收器:空。尝试调用:。即使我检查为空,列表也是空的,你能帮我吗?我无法解决。
我的 firestore duyuru 数据库
我收到列表空检查错误,但我的数据库中有公告数据,我正在提取它们,但在屏幕上看不到数据
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。