這段代碼有問題,
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
class HomePage extends StatefulWidget {
const HomePage({ Key? key }) : super(key: key);
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
FirebaseFirestore firestore = FirebaseFirestore.instance;
CollectionReference users = FirebaseFirestore.instance.collection('users');
Stream<QuerySnapshot<Map<String, dynamic>>> collectionStream = FirebaseFirestore.instance.collection('users').snapshots();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Home Page'),
),
body: StreamBuilder<QuerySnapshot<Map<String, dynamic>>>(
stream: collectionStream,
builder: (context, snapshot) {
return Container(
child: ListView.builder(
itemCount: snapshot.data!.docs.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(snapshot.data!.docs[index].data()['name']),
trailing: IconButton(
icon: const Icon(Icons.delete),
onPressed: () {
users.doc(snapshot.data!.docs[index].id).delete();
},
),
);
}
),
);
},
),
);
}
}
使此程式出錯的這一行,運算子 (!):
snapshot.data!.docs.length
snapshot.data!.docs[index].data()['name']
snapshot.data!.docs[index].id
最初這段代碼沒有錯誤,但是當我重新運行時它出現:Exception has occurred. _CastError (Null check operator used on a null value)。我試圖修復它,但仍然失敗。有沒有辦法解決這個問題?
uj5u.com熱心網友回復:
此錯誤意味著snapshot.data為空。
并且您在行中使用了空檢查運算子snapshot.data!。
解決方案:
您需要檢查資料是否為空并在應用程式等待snapshot.data具有如下值時顯示類似加載螢屏的內容:
body: StreamBuilder<QuerySnapshot<Map<String, dynamic>>>(
stream: collectionStream,
builder: (context, snapshot) {
if (snapshot.data == null) {
return Center(child: CircularProgressIndicator());
}
return Container(
child: ListView.builder(
itemCount: snapshot.data.docs.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(snapshot.data.docs[index].data()['name']),
trailing: IconButton(
icon: const Icon(Icons.delete),
onPressed: () {
users.doc(snapshot.data.docs[index].id).delete();
},
),
);
},
),
);
}
)
并且由于您正在檢查是否snapshot.data為空,因此您可以從其用法中洗掉空檢查運算子。
所以snapshot.data!insnapshot.data!.docs.length變得snapshot.data像snapshot.data.docs.length。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/342546.html
標籤:火力基地 扑 镖 谷歌云firestore
上一篇:FirebaseError:Firebase:NoFirebaseApp'[DEFAULT]'hasbeencreated-呼叫FirebaseApp.initializeApp(
