Streambuilder 帮助 flutter Firebase 存储
Streambuilder help flutter firebase storage
你好,我正在尝试用 flutter 制作一系列图像,但是当我在 firebase 存储中更新照片时,我的应用程序中的照片保持不变。
也许我可以用 streambuilder 做到这一点,但我不知道如何使用它,也无法学习如何使用它。
有谁知道我该怎么做,非常感谢您的帮助。
class _MyHomePageState extends State<MyHomePage> {
final FirebaseStorage storage = FirebaseStorage(
app: Firestore.instance.app,
storageBucket: 'gs:...com/');
Uint8List imageBytes;
String errorMsg;
_MyHomePageState() {
storage.ref().child('images/opencv.png').getData(100000000000000).then((data) =>
setState(() {
imageBytes = data;
})
).catchError((e) =>
setState(() {
errorMsg = e.error;
})
);
}
@override
Widget build(BuildContext context) {
var img = imageBytes != null ? Image.memory(
imageBytes,
fit: BoxFit.cover,
) : Text(errorMsg != null ? errorMsg : "Loading...");
return new Scaffold(
appBar: new AppBar(
),
body: new ListView(
children: <Widget>[
img,
],
));
}
}
当客户端加载的图像发生变化时,Firebase 存储不会自动通知客户端。当您调用 getData()
时,它会获取一次数据,然后就结束了。
如果您想在存储中更改图像时自动重新加载图像,我建议使用其他服务来处理该通知。
例如,您可以使用 Firebase Realtime Database 或 Cloud Firestore 来存储图像的路径和上次修改时间,然后在更新 Storage 中的图像数据时同时更新它。然后您的客户端代码将使用数据库的实时侦听器,并从中获取 load/reload 图像。
你好,我正在尝试用 flutter 制作一系列图像,但是当我在 firebase 存储中更新照片时,我的应用程序中的照片保持不变。 也许我可以用 streambuilder 做到这一点,但我不知道如何使用它,也无法学习如何使用它。 有谁知道我该怎么做,非常感谢您的帮助。
class _MyHomePageState extends State<MyHomePage> {
final FirebaseStorage storage = FirebaseStorage(
app: Firestore.instance.app,
storageBucket: 'gs:...com/');
Uint8List imageBytes;
String errorMsg;
_MyHomePageState() {
storage.ref().child('images/opencv.png').getData(100000000000000).then((data) =>
setState(() {
imageBytes = data;
})
).catchError((e) =>
setState(() {
errorMsg = e.error;
})
);
}
@override
Widget build(BuildContext context) {
var img = imageBytes != null ? Image.memory(
imageBytes,
fit: BoxFit.cover,
) : Text(errorMsg != null ? errorMsg : "Loading...");
return new Scaffold(
appBar: new AppBar(
),
body: new ListView(
children: <Widget>[
img,
],
));
}
}
当客户端加载的图像发生变化时,Firebase 存储不会自动通知客户端。当您调用 getData()
时,它会获取一次数据,然后就结束了。
如果您想在存储中更改图像时自动重新加载图像,我建议使用其他服务来处理该通知。
例如,您可以使用 Firebase Realtime Database 或 Cloud Firestore 来存储图像的路径和上次修改时间,然后在更新 Storage 中的图像数据时同时更新它。然后您的客户端代码将使用数据库的实时侦听器,并从中获取 load/reload 图像。