Files
Client/lib/state/app/modules/breaker/bloc/breaker_bloc.dart
T
2026-05-04 13:54:39 +02:00

52 lines
1.7 KiB
Dart

import 'package:flutter/foundation.dart';
import 'package:package_info_plus/package_info_plus.dart';
import '../../../../../api/mhsl/breaker/getBreakers/getBreakersResponse.dart';
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc.dart';
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart';
import '../repository/breaker_repository.dart';
import 'breaker_event.dart';
import 'breaker_state.dart';
class BreakerBloc extends LoadableHydratedBloc<BreakerEvent, BreakerState, BreakerRepository> {
PackageInfo? _packageInfo;
@override
BreakerRepository repository() => BreakerRepository();
@override
BreakerState fromNothing() => const BreakerState();
@override
BreakerState fromStorage(Map<String, dynamic> json) => BreakerState.fromJson(json);
@override
Map<String, dynamic>? toStorage(BreakerState state) => state.toJson();
@override
Future<void> 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;
}
}