【问题标题】:Check connectivity in flutter and change state according connection status在颤振中检查连接并根据连接状态更改状态
【发布时间】:2021-09-02 21:59:03
【问题描述】:

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

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

【问题讨论】:

  • 你尝试了什么?你到底卡在哪里了?您能否发布您的最佳尝试以及您收到的问题或错误消息?
  • @nvoigt 正是我希望如果用户连接到互联网然后打开主状态/页面,否则请参阅另一个页面。喜欢没有互联网页面
  • 如果您只是“想要”,您需要聘请软件开发人员为您完成。该站点旨在帮助其他开发人员解决他们的问题。您还没有发布您面临的问题。它是什么,对你不起作用?您的代码是什么样的?您在自己开发此代码时究竟需要哪些帮助?
  • 好吧,很抱歉,但是你需要雇人。我们不为你做这项工作。我们帮助您解决问题。再说一遍:您需要自己尝试一下,然后在此处尽最大努力解决您遇到的问题。 “我不知道请为我做这件事”不会在这里删减,这不是这个网站的工作方式。那么你能提供一个在页面之间导航的minimal reproducible example 吗?你能用这个包读取互联网连接的当前状态吗?
  • @nvoigt 这是我的 main.dart pastebin.com/3wbDiF8j 而没有 internet.dart pastebin.com/vPUYUdgc

标签: flutter dart connectivity


【解决方案1】:

使用 Connectivity Plus 包并使用 StreamBuilder 返回 MaterialApp。 这样,您就不必检查每个页面上的连接。

StreamBuilder(
        stream: Connectivity().onConnectivityChanged,
        builder: (context, AsyncSnapshot<ConnectivityResult> snapshot) {
          return snapshot.data == ConnectivityResult.mobile ||
                  snapshot.data == ConnectivityResult.wifi
              ? OnlineMaterialApp()
              : OfflineMaterialApp();
        },
      ),

【讨论】:

  • 我应该将此代码放在classWidget 中的哪个位置
  • 在您的第一个小部件子项的 main.dart 中
  • 我已放置但它不起作用pastebin.com/FM8pqnzk (main.dart)
  • pastebin.com/SV6NJwU1 看看这个然后看看你能不能接受我的回答
  • 是的,它的工作,但在第二个屏幕出现MediaQuery 错误但我解决了...非常感谢
【解决方案2】:

首先,您可以监听更改,例如在应用顶部的 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;

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
  • 1970-01-01
  • 2013-12-22
  • 2015-09-21
  • 1970-01-01
  • 2014-08-18
相关资源
最近更新 更多