在我的应用程序中,StreamBuilder用于防火墙和连接提供商。
背景:
我打开了互联网和流生成器加载从火基地的5个列表的图像。现在,我关闭了互联网,滚动起来,图像没有加载和显示占位符图像的下一个列表。我认为这是正确的,因为流构建器只加载到可见屏幕。由于来自firebase的图像不可用,占位符被认为是一个ImageStream。
查询:
当我切换到互联网上时,我想用图片改变/更新占位符。现在,来自firebase的快照是相同的,占位符被认为是imagestream,我没有在列表中看到来自firebase的图像。
以互联网连接为提供者,我可以构建流构建器,但是快照是相同的,我不知道如何更新。
发布于 2020-01-05 19:33:35
这是你提出的问题的一个可能的解决办法。它对列表使用侦听器而不是StreamBuilder,并在通过使用连接包侦听连接更改来恢复internet连接时重新侦听Stream。由于您没有提供任何代码,下面是一个示例:
进口
import 'dart:async';
import 'package:connectivity/connectivity.dart';声明和方法
StreamSubscription subscription;
List<String> myStrings = [];
@override
void initState() {
subscription = new Connectivity().onConnectivityChanged.listen((
ConnectivityResult result) {
handleConnectivityChange(result);
}
);
listenToStringList();
super.initState();
}
@override
void dispose() {
subscription.cancel();
myStreamFromStateOrParentWidget.cancel();
super.dispose();
}
void listenToStringList(){
myStreamFromStateOrParentWidget.listen((snapshot){
setState(() {
myStrings = snapshot;
});
});
}
void handleConnectivityChange(connectionState){
debugPrint('connectionState: $connectionState');
switch(connectionState) {
case ConnectivityResult.none:
debugPrint('no connection');
break;
case ConnectivityResult.wifi:
listenToStringList();
break;
case ConnectivityResult.mobile:
listenToStringList();
break;
default:
debugPrint('default');
break;
}
}小部件
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: ListView.builder(
itemCount: myStrings.length,
itemBuilder: (context, index){
return Text(myStrings[index]);
}
),
)
);
}https://stackoverflow.com/questions/59601452
复制相似问题