Fladder/lib/providers/connectivity_provider.dart
PartyDonut 092836328f
feat: Sync offline/online playback when able (#431)
Co-authored-by: PartyDonut <PartyDonut@users.noreply.github.com>
2025-08-03 13:35:56 +02:00

45 lines
1.3 KiB
Dart

import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'connectivity_provider.g.dart';
enum ConnectionState {
offline,
mobile,
wifi,
ethernet;
bool get homeInternet => switch (this) {
ConnectionState.offline => false,
ConnectionState.mobile => false,
ConnectionState.wifi => true,
ConnectionState.ethernet => true,
};
}
@Riverpod(keepAlive: true)
class ConnectivityStatus extends _$ConnectivityStatus {
@override
ConnectionState build() {
Connectivity().onConnectivityChanged.listen(onStateChange);
checkConnectivity();
return ConnectionState.mobile;
}
void onStateChange(List<ConnectivityResult> connectivityResult) {
if (connectivityResult.contains(ConnectivityResult.ethernet)) {
state = ConnectionState.ethernet;
} else if (connectivityResult.contains(ConnectivityResult.wifi)) {
state = ConnectionState.wifi;
} else if (connectivityResult.contains(ConnectivityResult.mobile)) {
state = ConnectionState.mobile;
} else if (connectivityResult.contains(ConnectivityResult.none)) {
state = ConnectionState.offline;
}
}
void checkConnectivity() async {
final connectivityResult = await Connectivity().checkConnectivity();
onStateChange(connectivityResult);
}
}