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