【问题标题】:Flutter: check internet connection throughout the app?Flutter:检查整个应用程序的互联网连接?
【发布时间】:2022-01-18 15:39:03
【问题描述】:

我想检查不同页面是否有互联网连接。我的“登录”页面中有以下代码:

 @override
 void initState() {
    subscription = Connectivity()
        .onConnectivityChanged
        .listen((ConnectivityResult result) {
      print("Connectivity changed: " + result.toString());
      setState(() {
        _haveInternet = result == ConnectivityResult.mobile || result == ConnectivityResult.wifi;
      });
   });
 }

 @override
  dispose() {
    super.dispose();

    subscription.cancel();
  }

  StreamSubscription<ConnectivityResult> subscription;
  bool _haveInternet = false;

这些行改变了_haveInternet 的值,并根据它在登录页面上显示不同的小部件(在线/离线登录)。

现在,如果我在登录页面并打开和关闭 wifi / 移动数据,登录页面上的小部件正在发生变化。如果我离开此页面,它将不再检查互联网连接。

我希望在应用的所有页面上都有类似的内容。因此,如果有人在离线模式下登录但稍后打开移动数据,那么应用程序可以实现它并开始与服务器通信以发送记录的数据。

我想将给定的代码复制粘贴到每个应用页面,以便用户在任何地方导航,它会始终检查互联网连接,但这似乎不是最佳做法。

最好的方法是什么?我想是否可以轻松地将新页面/部分添加到应用程序同时检查互联网连接。

【问题讨论】:

  • 你可以使用ProviderChangeNotifier
  • 如果你可以免费使用第三方包,有很好的 Flutter 包可用。检查-pub.dev/packages/connectivity_plus。 IT 在所有平台上都兼容。

标签: flutter dart


【解决方案1】:

最好使用提供程序并在根文件中检查互联网。

在我看来,最好在主屏幕或任何登陆屏幕上检查互联网,因为如果您在登录时检查互联网连接,它将在您转到主屏幕时被丢弃,因为我们大多数人都使用 pageReplacement .所以尝试通过检查在主屏幕上编写互联网检查功能。

将返回值保存在provider上,以便通知所有provider订阅的监听器。

包:https://pub.dev/packages/connectivity_plus

【讨论】:

    猜你喜欢
    • 2022-11-07
    • 2019-05-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 2021-10-18
    相关资源
    最近更新 更多