【发布时间】:2022-01-18 15:39:03
【问题描述】:
我想检查不同页面是否有互联网连接。我的“登录”页面中有以下代码:
@override
void initState() {
subscription = Connectivity()
.onConnectivityChanged
.listen((ConnectivityResult result) {
print("Connectivity changed: " + result.toString());
setState(() {
_haveInternet = result == ConnectivityResult.mobile || result == ConnectivityResult.wifi;
});
});
}
@override
dispose() {
super.dispose();
subscription.cancel();
}
StreamSubscription<ConnectivityResult> subscription;
bool _haveInternet = false;
这些行改变了_haveInternet 的值,并根据它在登录页面上显示不同的小部件(在线/离线登录)。
现在,如果我在登录页面并打开和关闭 wifi / 移动数据,登录页面上的小部件正在发生变化。如果我离开此页面,它将不再检查互联网连接。
我希望在应用的所有页面上都有类似的内容。因此,如果有人在离线模式下登录但稍后打开移动数据,那么应用程序可以实现它并开始与服务器通信以发送记录的数据。
我想将给定的代码复制粘贴到每个应用页面,以便用户在任何地方导航,它会始终检查互联网连接,但这似乎不是最佳做法。
最好的方法是什么?我想是否可以轻松地将新页面/部分添加到应用程序同时检查互联网连接。
【问题讨论】:
-
你可以使用
Provider和ChangeNotifier -
如果你可以免费使用第三方包,有很好的 Flutter 包可用。检查-pub.dev/packages/connectivity_plus。 IT 在所有平台上都兼容。