Files
kulakpos_app/lib/GlobalComponents/internet_connection_notifier.dart

56 lines
1.6 KiB
Dart
Raw Normal View History

2026-02-07 15:57:09 +07:00
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:internet_connection_checker_plus/internet_connection_checker_plus.dart';
final internetConnectionProvider = ChangeNotifierProvider<InternetConnectionNotifier>((ref) {
return InternetConnectionNotifier();
});
class InternetConnectionNotifier extends ChangeNotifier with WidgetsBindingObserver {
bool _isConnected = true;
AppLifecycleState appLifecycleState = AppLifecycleState.resumed;
late final StreamSubscription<InternetStatus> _subscription;
bool get isConnected => _isConnected;
InternetConnectionNotifier() {
WidgetsBinding.instance.addObserver(this);
_init();
}
void _init() {
checkConnection();
_subscription = InternetConnection().onStatusChange.listen((status) {
print('Internet connection status: $status');
if (appLifecycleState != AppLifecycleState.paused) {
final wasConnected = _isConnected;
_isConnected = status == InternetStatus.connected;
notifyListeners();
}
});
}
Future<void> checkConnection() async {
final previous = _isConnected;
_isConnected = await InternetConnection().hasInternetAccess;
if (_isConnected != previous) notifyListeners();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
appLifecycleState = state;
notifyListeners();
if (state == AppLifecycleState.resumed) {
checkConnection();
}
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
_subscription.cancel();
super.dispose();
}
}