在 dart、flutter 应用程序中检查或持续监听互联网连接/网络连接

Iku*_* kk 8 connection asynchronous connectivity dart flutter

我长期以来一直在寻找在 flutter/dart 应用程序中监听互联网连接的最佳方法。我认为这种方法目前比较好,它可以对像我这样一直在寻找的人有所帮助。我使用过很多连接插件,但都不起作用。我同样按照许多人的建议使用了 data_connection_checker、lookUpAddress 等,但没有效果。但下面有帮助。使用以下插件检查或监听 dart、flutter 应用程序中的互联网连接/网络连接。

连接性_plus

互联网连接检查器

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;
  }
}

Run Code Online (Sandbox Code Playgroud)

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

  bool hasInterNetConnection = false;

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

    super.initState();
  }

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

Run Code Online (Sandbox Code Playgroud)

祝你好运

flu*_*oob 3

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