我是 Flutter 和 connectivity
的新手。我尝试 connectivity
包它有效,但我想在现有应用程序中实现。如果有可用连接,则打开 HomePage()
状态,否则引用另一个 state
。 请帮助我。
这是我的代码 https://pastebin.com/3wbDiF8j (main.dart)。 https://pastebin.com/vPUYUdgc (noInternet.dart)
答案 0 :(得分:3)
使用 Connectivity Plus 包并使用 StreamBuilder 返回 MaterialApp。 这样,您就不必在每个页面上都检查连接。
StreamBuilder(
stream: Connectivity().onConnectivityChanged,
builder: (context, AsyncSnapshot<ConnectivityResult> snapshot) {
return snapshot.data == ConnectivityResult.mobile ||
snapshot.data == ConnectivityResult.wifi
? OnlineMaterialApp()
: OfflineMaterialApp();
},
),
答案 1 :(得分:0)
首先,您可以监听更改,例如在应用顶部的 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;