检查颤动中的连接并根据连接状态更改状态
Check connectivity in flutter and change state according connection status
我是 Flutter 的新手,connectivity
。我尝试使用 connectivity
包,但我想在现有应用程序中实施。如果有连接可用则打开HomePage()
状态,否则参考另一个state
。 请帮帮我
这是我的代码 https://pastebin.com/3wbDiF8j (main.dart)。
https://pastebin.com/vPUYUdgc (noInternet.dart)
首先,您可以监听变化,例如在应用顶部的 onInit 方法中:
connectivity.onConnectivityChanged
// .distinct() (from rxdart package, uncomment if you have this dep)
// debounce time for epileptic network
// .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(Duration(milliseconds: 400)) (from rxjs package)
.listen((c) => setState(() => connectivity = c));
在连接包装器构建中:
if (connectivity == ConnectivityResult.none)
return NoInternetPage();
return child;
使用 Connectivity Plus 包和 return 使用 StreamBuilder 的 MaterialApp。
这样,您就不必在每个页面上都检查连接。
StreamBuilder(
stream: Connectivity().onConnectivityChanged,
builder: (context, AsyncSnapshot<ConnectivityResult> snapshot) {
return snapshot.data == ConnectivityResult.mobile ||
snapshot.data == ConnectivityResult.wifi
? OnlineMaterialApp()
: OfflineMaterialApp();
},
),
我是 Flutter 的新手,connectivity
。我尝试使用 connectivity
包,但我想在现有应用程序中实施。如果有连接可用则打开HomePage()
状态,否则参考另一个state
。 请帮帮我
这是我的代码 https://pastebin.com/3wbDiF8j (main.dart)。 https://pastebin.com/vPUYUdgc (noInternet.dart)
首先,您可以监听变化,例如在应用顶部的 onInit 方法中:
connectivity.onConnectivityChanged
// .distinct() (from rxdart package, uncomment if you have this dep)
// debounce time for epileptic network
// .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(Duration(milliseconds: 400)) (from rxjs package)
.listen((c) => setState(() => connectivity = c));
在连接包装器构建中:
if (connectivity == ConnectivityResult.none)
return NoInternetPage();
return child;
使用 Connectivity Plus 包和 return 使用 StreamBuilder 的 MaterialApp。 这样,您就不必在每个页面上都检查连接。
StreamBuilder(
stream: Connectivity().onConnectivityChanged,
builder: (context, AsyncSnapshot<ConnectivityResult> snapshot) {
return snapshot.data == ConnectivityResult.mobile ||
snapshot.data == ConnectivityResult.wifi
? OnlineMaterialApp()
: OfflineMaterialApp();
},
),