Kiểm tra kết nối mạng
Class NetworkConnectivity
giúp kiểm tra kết nối mạng của thiết bị.
Packages sử dụng:
- connectivity_plus: ^6.0.3
- logger
- dartx: ^1.2.0
ghi chú
NetworkConnectivity
chỉ kiểm tra được thiết bị đã bật kết nối mạng hay chưa, không kiểm tra được tình trạng mạng yếu hay mạnh.
Code triển khai
lib/utils/useful/network_connectivity.dart
// ignore_for_file: unreachable_from_main
import 'dart:async';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:dartx/dartx.dart';
import 'package:flutter/material.dart';
import 'package:logger/logger.dart';
import 'shared/logger/logger.dart';
typedef ConnectionStatusNotifier = ValueNotifier<ConnectionStatus>;
class NetworkConnectivity {
NetworkConnectivity._();
static NetworkConnectivity? _instance;
factory NetworkConnectivity() {
return _instance ??= NetworkConnectivity._();
}
final Connectivity _connectivity = Connectivity();
late final StreamSubscription<List<ConnectivityResult>> _subscription;
late ConnectionStatusNotifier _networkStatus;
ConnectionStatus get networkStatus => _networkStatus.value;
ConnectionStatusNotifier get networkStatusNotifier => _networkStatus;
// Call when launch app
void init() {
_initConnectivity();
}
Future<void> _initConnectivity() async {
try {
_networkStatus = ValueNotifier(ConnectionStatus.offline);
_subscription =
_connectivity.onConnectivityChanged.listen(_updateConnectionStatus);
Logger().i('NetworkConnectivity init success');
} catch (e) {
Logger().e('NetworkConnectivity init failure', error: e);
}
}
void _updateConnectionStatus(List<ConnectivityResult> connectivityResult) {
// Update network status
if (connectivityResult.containsAny([
ConnectivityResult.mobile,
ConnectivityResult.wifi,
ConnectivityResult.ethernet,
])) {
_networkStatus.value = ConnectionStatus.online;
} else {
_networkStatus.value = ConnectionStatus.offline;
}
}
void dispose() {
_subscription.cancel();
logger.i('NetworkConnectivity is disposed.');
}
}
enum ConnectionStatus {
online,
offline,
}
extension ConnectionStatusEx on ConnectionStatus {
bool get isOnline => this == ConnectionStatus.online;
bool get isOffline => this == ConnectionStatus.offline;
}
Cách sử dụng
/// Example
if (NetworkConnectivity().networkStatus.isOnline) {
debugPrint('Network is connected');
} else {
debugPrint('Network is disconnected');
}