流中是否可以包含.getDownloadURL()字符串,以便可以在小部件树中的多个位置访问它,并且只要更改它就可以始终保持最新状态?
目前,我正在尝试设置streambuilder:
return Scaffold(
body: ListView.builder(
itemCount: products.length,
itemBuilder: (context, index) {
return StreamBuilder<String>(
stream: ImageDatabaseService().getImageLocation(products[index]),
builder: (context, snapshot) {
return ProductTile(product: products[index]);
});
},
该流来自ImageDataseService类:class ImageDatabaseService {
String _imageLocation;
StorageReference ref;
void init() {}
Stream<String> getImageLocation(Product product) {
ref = FirebaseStorage.instance
.ref()
.child('images/' + product.kaizenID + '.png');
return getURL();
}
Future<String> getURL() async {
await ref.getDownloadURL().then((location) {
return location;
});
}
}
问题是ImageDatabaseService需要返回流字符串时会返回Future字符串,但是在小部件末端我只需要一个String香港专业教育学院一直在寻找这些论坛和网络,但没有遇到任何有用的东西。
最佳答案
将您的ImageDatabaseService类更改为;
class ImageDatabaseService {
StorageReference ref;
void init() {}
Stream<String> get imageLocation(Product product) {
ref = FirebaseStorage.instance
.ref()
.child('images/' + product.kaizenID + '.png');
return ref.getDownloadURL()
.asStream().map((downloadUrl)
=> downloadUrl;
}
}
它将在StreamBuilder中以snapshot.data
返回一个字符串。不要忘记将流更改为;
stream: ImageDatabaseService().imageLocation(products[index]),
不要忘记添加条件来检查构建器中的连接状态。if(snapshot.ConnectionState == ConnectionState.active){
return ProductTile(product: products[index]);
} else{
return Center(child: CircularProgressIndicator(),);
}
关于firebase - Flutter Firebase存储图像检索流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62563741/