我正在嘗試從 Firestore 資料庫中獲取資料,這段代碼運行良好。但現在它不起作用,我收到此錯誤
getter 'length' 被呼叫為 null。
接收器:空
嘗試呼叫:長度”
這是獲取錯誤的代碼。
class MiddleHelpers extends ChangeNotifier {
Widget datafav(BuildContext context, String collection) {
return Container(
height: 280.0,
child: FutureBuilder(
future: Provider.of<ManageData>(context, listen: false)
.fetchData(collection),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(
child: CircularProgressIndicator(),
);
} else {
return ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index) {
return GestureDetector(
onTap: () {
Navigator.push(
context,
PageTransition(
child: DetailScreen(
queryDocumentSnapshot: snapshot.data[index]),
type: PageTransitionType.bottomToTop),
);
},
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
decoration: const BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(20.0),
),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colors.black26,
blurRadius: 5,
// spreadRadius: 3,
offset: Offset(3, 3),
),
],
),
),
),
);
},
);
}
},
),
);
}
}
獲取資料方法
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/cupertino.dart';
class ManageData extends ChangeNotifier {
FirebaseFirestore firebaseFirestore = FirebaseFirestore.instance;
Future fetchData(String collection) async {
QuerySnapshot querySnapshot =
await firebaseFirestore.collection(collection).get();
return querySnapshot.docs;
}
}
設備錯誤

uj5u.com熱心網友回復:
我猜你的 snapshot.data 為 null 可能有錯誤。嘗試添加
if (snapshot.hasError){ return Text('Something went wrong'); }
內部建造者
更多資訊在這里 https://firebase.flutter.dev/docs/firestore/usage
uj5u.com熱心網友回復:
似乎您沒有收到來自未來的資料,這就是為什么您不能使用.length. 此外,有必要確保資料存在,然后使用.length.
最好將程序FutureBuilder中可能發生的所有狀態都引入。
查看
snapshot.connectionState如果是waiting或done。然后- 如果
snapshot.hasError, 最后else或hasData - 如果
snapshot.hasData,您也可以檢查資料長度> 0 或snapshot.data!.exist然后回傳ListView.builder
我更喜歡firestore 的這個例子。
if (snapshot.hasError) {
return Text("Something went wrong");
}
if (snapshot.hasData && !snapshot.data!.exists) {
return Text("Document does not exist");
}
if (snapshot.connectionState == ConnectionState.done) {
return ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: snapshot.data!.length,
///.............
}
return const Center(
child: CircularProgressIndicator(),
更多關于
- 未來建設者
- Firestore 使用
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/335688.html
