Files
Client/lib/widget/breaker/breaker.dart
T

86 lines
2.6 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import '../../api/marianumconnect/queries/get_breakers/get_breakers_response.dart';
import '../../state/app/modules/breaker/bloc/breaker_bloc.dart';
class Breaker extends StatelessWidget {
final BreakerArea breaker;
final Widget child;
const Breaker({required this.breaker, required this.child, super.key});
@override
Widget build(BuildContext context) {
final bloc = context.watch<BreakerBloc>();
final blocked = bloc.isBlocked(breaker);
if (blocked != null) {
return _BreakerBlockedView(message: blocked);
}
return child;
}
}
class _BreakerBlockedView extends StatelessWidget {
final String message;
const _BreakerBlockedView({required this.message});
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
final scheme = theme.colorScheme;
final reason = message.trim();
return Material(
color: scheme.surface,
child: CustomScrollView(
physics: const AlwaysScrollableScrollPhysics(),
slivers: [
SliverFillRemaining(
hasScrollBody: false,
child: Center(
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 32,
vertical: 24,
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Icon(
Icons.construction_outlined,
size: 60,
color: scheme.onSurfaceVariant,
),
const SizedBox(height: 24),
Text(
'Momentan nicht verfügbar',
textAlign: TextAlign.center,
style: theme.textTheme.titleLarge?.copyWith(
fontWeight: FontWeight.w600,
color: scheme.onSurface,
),
),
if (reason.isNotEmpty) ...[
const SizedBox(height: 10),
Text(
reason,
textAlign: TextAlign.center,
style: theme.textTheme.bodyMedium?.copyWith(
color: scheme.onSurfaceVariant,
height: 1.4,
),
),
],
],
),
),
),
),
],
),
);
}
}