42 lines
1.3 KiB
Dart
42 lines
1.3 KiB
Dart
import 'dart:async';
|
|
import 'package:connectivity_plus/connectivity_plus.dart';
|
|
|
|
/// Service for monitoring network connectivity status
|
|
class NetworkService {
|
|
static final NetworkService _instance = NetworkService._internal();
|
|
factory NetworkService() => _instance;
|
|
NetworkService._internal();
|
|
|
|
final Connectivity _connectivity = Connectivity();
|
|
final StreamController<bool> _connectionController =
|
|
StreamController<bool>.broadcast();
|
|
|
|
Stream<bool> get connectionStream => _connectionController.stream;
|
|
bool _isConnected = true;
|
|
|
|
bool get isConnected => _isConnected;
|
|
|
|
/// Initialize the network service and start monitoring
|
|
void initialize() {
|
|
_connectivity.onConnectivityChanged.listen((List<ConnectivityResult> results) {
|
|
final result = results.isNotEmpty ? results.first : ConnectivityResult.none;
|
|
_isConnected = result != ConnectivityResult.none;
|
|
_connectionController.add(_isConnected);
|
|
});
|
|
|
|
// Check initial state
|
|
_checkConnection();
|
|
}
|
|
|
|
Future<void> _checkConnection() async {
|
|
final results = await _connectivity.checkConnectivity();
|
|
final result = results.isNotEmpty ? results.first : ConnectivityResult.none;
|
|
_isConnected = result != ConnectivityResult.none;
|
|
_connectionController.add(_isConnected);
|
|
}
|
|
|
|
void dispose() {
|
|
_connectionController.close();
|
|
}
|
|
}
|