flutter - 如何在全球范围内检查互联网连接并显示无连接屏幕
问题描述
我在我的项目中使用连接包来检查互联网连接。
文件main.dart
代码:
StreamProvider<ConnectivityResult>(
create: (context) =>
InternetConnectionService().connectionStatusController.stream,
child: MaterialApp(
.....
在每个屏幕上,我都会像这样检查互联网连接:
bool hasConnection;
void checkConnectivity(context) async {
var connectivityResult = Provider.of<ConnectivityResult>(context);
if (connectivityResult == ConnectivityResult.none ||
connectivityResult == null) {
setState(() {
hasConnection = false;
});
} else {
setState(() {
hasConnection = true;
});
}
}
Widget build(BuildContext context) {
checkConnectivity(context);
return hasConnection == true
? Scaffold()
: NoInternetScreen();
}
我如何从根或一个小部件的每个屏幕上全局检查连接并且不显示连接屏幕?
解决方案
在您的 MaterialApp 小部件中,有一个构建器。您可以使用构建器将路径包装在任何小部件中。尝试这样做:
MaterialApp(
...
builder: (context, child) {
return StreamBuilder<ConnectivityResult>(
stream: InternetConnectionService().connectionStatusController.stream,
builder: (context, snapshot) {
final conenctivityResult = snapshot.data;
if (connectivityResult == ConnectivityResult.none || connectivityResult == null) return NoInternetScreen();
return child;
}
);
}
);
现在您不必在其他文件中添加任何互联网逻辑。您可以简单地编写排除它们的构建方法。
推荐阅读
- reactjs - React Data Grid 编译失败
- javascript - 如果我在 Javascript 中创建一个类的多个实例,每个实例的每个函数是否像变量一样在内存中获得自己的空间?
- tensorflow - TPU 训练错误:“没有为与节点 {{node RaggedConcat/Cumsum 兼容的 XLA_TPU_JIT 设备注册的 'Cumsum' OpKernel”
- python - 函数帮助 - Python Pandas
- python - 在python中着色和标记散点图点时如何设置阈值
- javascript - 未捕获的类型错误:firebase.firestore 不是函数
- javascript - discord.js 使消息作者异常
- javascript - 单击删除时 Javascript 取消链接
- makefile - 如何让 GNU make 批量运行?
- python - (再次)如何只翻译 DRF 中的自定义错误消息?