检查颤振中的连接并根据连接状态更改状态

时间:2021-06-18 06:41:34

标签: flutter dart connectivity

我是 Flutter 和 connectivity 的新手。我尝试 connectivity 包它有效,但我想在现有应用程序中实现。如果有可用连接,则打开 HomePage() 状态,否则引用另一个 state请帮助我。

这是我的代码 https://pastebin.com/3wbDiF8j (main.dart)。 https://pastebin.com/vPUYUdgc (noInternet.dart)

2 个答案:

答案 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;