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

问题描述 投票:0回答:2

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

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

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

  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
2个回答
2
投票

几周前我也遇到过类似的问题。这是一个好方法。

internet_connection_checker
插件可以解决
connectivity_plus
插件无法解决的网络层问题。我已经使用
bloc
库实现了这两个插件。有关更多信息和代码,请参阅 this Stackoverflow 帖子和 this Github 问题。


0
投票

已经晚了回答,但仍然有人在加载或上传数据时寻找检查/显示互联网速度。

使用此库 - internet_speed_test:^1.5.0

使用的功能就像

import 'package:internet_speed_test/internet_speed_test.dart';

  final internetSpeedTest = InternetSpeedTest();

  internetSpeedTest.startDownloadTesting(
     onDone: (double transferRate, SpeedUnit unit) {
        // TODO: Change UI
     },
     onProgress: (double percent, double transferRate, SpeedUnit unit) {
        // TODO: Change UI
     },
     onError: (String errorMessage, String speedTestError) {
        // TODO: Show toast error
     },
   );

internetSpeedTest.startUploadTesting(
     onDone: (double transferRate, SpeedUnit unit) {
       print('the transfer rate $transferRate');
       setState(() {
         // TODO: Change UI
       });
     },
     onProgress: (double percent, double transferRate, SpeedUnit unit) {
       print(
           'the transfer rate $transferRate, the percent $percent');
       setState(() {
         // TODO: Change UI
       });
     },
     onError: (String errorMessage, String speedTestError) {
       // TODO: Show toast error
     },
  );

享受编码的乐趣

© www.soinside.com 2019 - 2024. All rights reserved.