如何解决检查颤振中的连接并根据连接状态更改状态
我是 Flutter 和 connectivity
的新手。我尝试 connectivity
包它有效,但我想在现有应用程序中实现。如果有可用连接,则打开 HomePage()
状态,否则引用另一个 state
。 请帮助我。
这是我的代码 https://pastebin.com/3wbDiF8j (main.dart)。 https://pastebin.com/vPUYUdgc (noInternet.dart)
解决方法
使用 Connectivity Plus 包并使用 StreamBuilder 返回 MaterialApp。 这样,您就不必在每个页面上都检查连接。
StreamBuilder(
stream: Connectivity().onConnectivityChanged,builder: (context,AsyncSnapshot<ConnectivityResult> snapshot) {
return snapshot.data == ConnectivityResult.mobile ||
snapshot.data == ConnectivityResult.wifi
? OnlineMaterialApp()
: OfflineMaterialApp();
},),
,
首先,您可以监听更改,例如在应用顶部的 onInit 方法中:
connectivity.onConnectivityChanged
// .distinct() (from rxjs package,uncomment if you have this dep)
// .debounceTime(_debounceTime) (from rxjs package)
.listen((c) => setState(() => connectivity = c));
在您的构建方法中,您现在可以使用该值。
这必须包装您的应用程序页面,为此您可以在一个小部件中设置上述侦听器,该小部件将根据连接状态显示正确的孩子,并在构建方法中使用该小部件:
MaterialApp(
// ...
builder: (ctx,child) => ConnectivityWrapper(child)
)
在 ConnectivityWrapper onInit
connectivity.onConnectivityChanged
// .distinct() (from rxjs package,uncomment if you have this dep)
// .debounceTime(_debounceTime) (from rxjs package)
.listen((c) => setState(() => connectivity = c));
在连接包装器构建中:
if (connectivity == ConnectivityResult.none)
return NoInternetPage();
return child;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。