Iku*_* kk 8 connection asynchronous connectivity dart flutter
我长期以来一直在寻找在 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;
}
}
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)
祝你好运
| 归档时间: |
|
| 查看次数: |
10572 次 |
| 最近记录: |