import 'package:flutter/foundation.dart'; import 'package:package_info_plus/package_info_plus.dart'; import '../../../../../api/mhsl/breaker/get_breakers/get_breakers_response.dart'; import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc.dart'; import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc_event.dart'; import '../repository/breaker_repository.dart'; import 'breaker_event.dart'; import 'breaker_state.dart'; class BreakerBloc extends LoadableHydratedBloc { PackageInfo? _packageInfo; @override BreakerRepository repository() => BreakerRepository(); @override BreakerState fromNothing() => const BreakerState(); @override BreakerState fromStorage(Map json) => BreakerState.fromJson(json); @override Map? toStorage(BreakerState state) => state.toJson(); @override Future gatherData() async { _packageInfo ??= await PackageInfo.fromPlatform(); final response = await repo.data.getBreakers(); add(DataGathered((s) => s.copyWith(response: response))); } void refresh() => fetch(); String? isBlocked(BreakerArea? type) { if (kDebugMode) return null; final response = innerState?.response; if (response == null || _packageInfo == null) return null; if (response.global.areas.contains(type)) return response.global.message; final selfBuild = int.parse(_packageInfo!.buildNumber); for (final entry in response.regional.entries) { final affectedBuild = int.parse(entry.key.split('b')[1]); if (affectedBuild >= selfBuild && entry.value.areas.contains(type)) { return entry.value.message; } } return null; } }