如何解决如何全局检查互联网连接并显示无连接屏幕
我在我的项目中使用 connectivity 包来检查互联网连接。
文件 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;
}
);
}
);
现在您不必在其他文件中添加任何互联网逻辑。您可以简单地编写不包括它们的构建方法。
, class ConnectivityUtils {
static Future<bool> hasConnection() async {
bool hasWifi = false;
bool hasMobileConnection = false;
var connectivityResult = await (Connectivity().checkConnectivity());
if (connectivityResult == ConnectivityResult.mobile) {
hasMobileConnection = true;
} else if (connectivityResult == ConnectivityResult.wifi) {
hasWifi = true;
}
return hasWifi || hasMobileConnection;
}
}
可以使用这个类,可以在调用API之前先调用hasConnection()
如果为 false,则可以显示无连接屏幕
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。