import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; class ConnectivityCubit extends Cubit { final ConnectivityService _connectivityService; late StreamSubscription _subscription; ConnectivityCubit(this._connectivityService) : super(ConnectivityInitial()) { _startMonitoring(); } void _startMonitoring() { _subscription = _connectivityService.connectivityStream.listen((result) { if (result == ConnectivityResult.none) { emit(ConnectivityDisconnected()); } else { emit(ConnectivityConnected(result)); } }); } Future checkInitialConnection() async { final result = await _connectivityService.checkConnectivity(); if (result == ConnectivityResult.none) { emit(ConnectivityDisconnected()); } else { emit(ConnectivityConnected(result as ConnectivityResult)); } } @override Future close() { _subscription.cancel(); return super.close(); } } abstract class ConnectivityState extends Equatable { const ConnectivityState(); @override List get props => []; } class ConnectivityInitial extends ConnectivityState {} class ConnectivityConnected extends ConnectivityState { final ConnectivityResult result; const ConnectivityConnected(this.result); @override List get props => [result]; } class ConnectivityDisconnected extends ConnectivityState {} class ConnectivityService { static final ConnectivityService _instance = ConnectivityService._internal(); final Connectivity _connectivity = Connectivity(); final StreamController _controller = StreamController.broadcast(); factory ConnectivityService() => _instance; ConnectivityService._internal() { _connectivity.onConnectivityChanged.listen((result) { _controller.add(result.first); // Notify all listeners }); } Stream get connectivityStream => _controller.stream; Future> checkConnectivity() async { return await _connectivity.checkConnectivity(); } }