这是_getImage方法,该方法从Firebase存储中检索图像的下载链接,然后从该下载字符串中检索。
Future<String> _getImage(String filePath) async {
var _urlImage = await FirebaseStorage.instance
.ref()
.child(filePath)
.getDownloadURL();
return _urlImage;
}
现在这是将来的构建器,它将检索图像。 blogs [index] .pic1包含Firebase存储pic文件路径的引用,它是正确的。
FutureBuilder<String>(
future: _getImage(blogs[index].pic1), // async work
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.waiting: return Text('Image Loading....',style: TextStyle(fontSize: 10),);
default:
if (snapshot.hasError)
return Text('Error: ${snapshot.error}');
else
return Image.network(snapshot.data.toString());
}
},
),
否,显示错误消息,但ConnectionState.waiting始终为true。 请帮忙。
这是控制台显示的内容
I/zygote64(20385): Background concurrent copying GC freed 546604(21MB) AllocSpace objects, 134(2MB) LOS objects, 24% free, 74MB/98MB, paused 70us total 509.383ms
答案 0 :(得分:0)
future
中的FutureBuilder
参数应该是一个存储的变量,以便在FutureBuilder
重建时不会每次都有新的未来。
将_getImage
的结果存储在有状态的小部件中(例如,在initState
中初始化),并将其传递给构建器。
答案 1 :(得分:0)
FutureBuilder<String>(
future: _getImage(blogs[index].pic1),
builder: (BuildContext context, AsyncSnapshot<Welcome> snapshot) {
if (snapshot.hasData) {
print("Success");
return Text("Success!!!")
} else if (!snapshot.hasData) {
return Container(
child: CircularProgressIndicator(),
);
} else if (snapshot.error) {
print("error");
} else {
return Container(
child: CircularProgressIndicator(),
);
}
});
使用此方法,伙计