【问题标题】:**SOLVED** Check or listen continuously to internet connection/Network Connectivity in dart, flutter app**已解决** 在 dart、flutter 应用程序中检查或连续收听互联网连接/网络连接
【发布时间】:2021-10-18 05:17:03
【问题描述】:

我一直在寻找很久才能知道在颤振/飞镖应用程序中收听互联网连接的最佳方法。我认为这种方法现在更好,它可以帮助像我这样一直在寻找的人。我使用了许多连接插件,但都不起作用。我同样使用了许多人建议的 data_connection_checker、lookUpAddress 等,但无济于事。但下面有帮助。 使用以下插件检查或收听 dart、flutter 应用中的 Internet 连接/网络连接。

connectivity_plus

internet_connection_checker

import 'dart:async';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:internet_connection_checker/internet_connection_checker.dart';

class ConnectionUtil {
  static final ConnectionUtil _singleton = new ConnectionUtil._internal();
  ConnectionUtil._internal();

  static ConnectionUtil getInstance() => _singleton;

  bool hasConnection = false;

  StreamController connectionChangeController = StreamController();

  final Connectivity _connectivity = Connectivity();
  void initialize() {
    _connectivity.onConnectivityChanged.listen(_connectionChange);
  }

  void _connectionChange(ConnectivityResult result) {
    _hasInternetInternetConnection();
  }

  Stream get connectionChange => connectionChangeController.stream;
  Future<bool> _hasInternetInternetConnection() async {
    bool previousConnection = hasConnection;
    var connectivityResult = await (Connectivity().checkConnectivity());
    if (connectivityResult == ConnectivityResult.mobile || connectivityResult == ConnectivityResult.wifi) {
      // this is the different
      if (await InternetConnectionChecker().hasConnection) {
        hasConnection = true;
      } else {
        hasConnection = false;
      }
    } else {
      hasConnection = false;
    }

    if (previousConnection != hasConnection) {
      connectionChangeController.add(hasConnection);
    }
    return hasConnection;
  }
}

在有状态小部件上实现此代码.....

  bool hasInterNetConnection = false;

  @override
  initState() {
    ConnectionUtil connectionStatus = ConnectionUtil.getInstance();
    connectionStatus.initialize();
    connectionStatus.connectionChange.listen(connectionChanged);

    super.initState();
  }

  void connectionChanged(dynamic hasConnection) {
    setState(() {
      hasInterNetConnection = hasConnection;
    });
  }

祝你好运

【问题讨论】:

    标签: flutter dart asynchronous connection connectivity


    【解决方案1】:

    几周前我遇到了类似的问题。这是一个很好的方法。 internet_connection_checker 插件允许解决connectivity_plus 插件无法解决的网络层问题。我已经使用bloc 库实现了这两个插件。有关更多信息和代码,请参阅this Stackoverflow 帖子和this Github 问题。

    【讨论】:

      【解决方案2】:

      我在使用 data_connection_checker 时遇到了同样的问题,它工作正常,但它已迁移到 null 安全,所以我改为使用提供商的 Internet 连接检查器来检查整个应用程序是否已连接,但 Steam 提供商是给我错误'需要初始数据'如何解决这个问题

      【讨论】:

      • 你应该创建自己的问题
      猜你喜欢
      • 1970-01-01
      • 2017-05-23
      • 1970-01-01
      • 2019-08-22
      • 2023-01-13
      • 2022-11-07
      • 2022-12-01
      • 2014-05-21
      • 2018-02-02
      相关资源
      最近更新 更多