我要尝试从Firestore数据库获取图像并将其放置在“字符串类型”列表中,并希望显示为滑块图像。 但是上述错误是在屏幕上发生的,但是在毫秒后,错误消失了,图像显示为滑块
已清除全局变量:
List<String> getSliderImages=[];
从Firestore获取图像的方法:
此方法正在initState()
方法内部调用
void getSliderImage(){
List<String> userId=[];
Firestore.instance.collection("Slider").getDocuments()
.then((QuerySnapshot snapshot) {
snapshot.documents.forEach((f){
setState(() {
userId.add(f.documentID);
});
});
for(int i=0;i<userId.length;i++){
setState(() {
print('snap.documentID_IF_userId :${userId[i]}');
Firestore.instance.collection('Slider').document(userId[i]).get().then((DocumentSnapshot document){
String image=document['Image'];
getSliderImages.add(image);
print('snap.documentID_IF_userId_IMAGE :$image');
print("getSliderImages:$getSliderImages");
});
});
}
}).catchError((onError){
print(onError);
setState(() {
Fluttertoast.showToast(msg: "$onError");
});
});
}
滑块小部件,我要在其中显示图像:
在这里,我将carousel_pro插件用于Slider
Container(
padding: const EdgeInsets.all(10.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(30.0)),
//color: Colors.black
),
height: MediaQuery.of(context).size.height/5,
width: MediaQuery.of(context).size.height/2,
child: Carousel(
images: [
new NetworkImage(getSliderImages[0]),
new NetworkImage(getSliderImages[1]),
new NetworkImage(getSliderImages[2]),
new NetworkImage(getSliderImages[3]),
],//getSliderUserId
showIndicator: true,
borderRadius: true,
moveIndicatorFromBottom: 100.0,
noRadiusForIndicator: false,
overlayShadow: false,
overlayShadowColors: Colors.white,
overlayShadowSize: 0.7,
)
),
答案 0 :(得分:0)
我自己解决了,
由于getSliderUserId[]
最初为空,因此发生了此错误。
因此,我在小部件上设置了条件。如果getSliderImages.isEmpty
,则显示进度指示器,否则显示“滑块图像”。
现在它可以正常工作而不会出现索引错误:)
此处已修改代码:
Container(
padding: const EdgeInsets.all(10.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(30.0)),
//color: Colors.black
),
height: MediaQuery.of(context).size.height/5,
width: MediaQuery.of(context).size.height/2,
child: getSliderImages.isEmpty?
CircularProgressIndicator()
:
Carousel(
images: [
new NetworkImage(getSliderImages[0]),
new NetworkImage(getSliderImages[1]),
new NetworkImage(getSliderImages[2]),
new NetworkImage(getSliderImages[3]),
],
showIndicator: true,
borderRadius: true,
moveIndicatorFromBottom: 100.0,
noRadiusForIndicator: false,
overlayShadow: false,
overlayShadowColors: Colors.transparent,
overlayShadowSize: 0.7,
)
),