检查或持续收听互联网 connection/Network dart、flutter 应用程序中的连接

Check or listen continuously to internet connection/Network Connectivity in dart, flutter app

我一直在寻找在 flutter/dart 应用程序中收听互联网连接的最佳方法。我认为这种方法目前更好,它可以帮助像我这样一直在寻找的人。我使用了很多连接插件,但都没有用。我同样按照许多人的建议使用了 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;
    });
  }

祝你好运

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

我遇到了与我使用 data_connection_checker 时相同的问题,它工作正常,但已迁移到空安全,因此我改为使用提供商的互联网连接检查器来检查整个应用程序是否已连接或不是,但是 Steam 供应商给我错误“需要初始数据”如何解决这个问题