import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../api/marianumconnect/queries/get_capabilities/guardian_child.dart'; import '../state/app/modules/capabilities/bloc/capabilities_cubit.dart'; import '../state/app/modules/children/child_selection_cubit.dart'; import '../utils/haptics.dart'; import 'centered_leading.dart'; import 'details_bottom_sheet.dart'; import 'placeholder_view.dart'; /// AppBar action that shows the selected child and lets a guardian switch to /// another one. Invisible unless there is a choice to make. class ChildSwitcher extends StatelessWidget { const ChildSwitcher({super.key}); @override Widget build(BuildContext context) { final children = context.watch().state.children; if (children.length < 2) return const SizedBox.shrink(); final selected = effectiveChild( children, context.watch().state, )!; return TextButton.icon( icon: const Icon(Icons.face_outlined), label: Text(selected.firstName), onPressed: () => _pick(context, selected.id), ); } void _pick(BuildContext context, String selectedId) { final selection = context.read(); final children = context.read().state.children; showDetailsBottomSheet( context, header: const ListTile(title: Text('Kind auswählen')), children: (sheetContext) => [ for (final child in children) ChildTile( child: child, trailing: child.id == selectedId ? const Icon(Icons.check) : null, onTap: () { Haptics.selection(); selection.select(child.id); Navigator.pop(sheetContext); }, ), ], ); } } /// One linked child: name and class. class ChildTile extends StatelessWidget { final GuardianChild child; final Widget? trailing; final VoidCallback? onTap; const ChildTile({required this.child, this.trailing, this.onTap, super.key}); @override Widget build(BuildContext context) => ListTile( leading: const CenteredLeading(Icon(Icons.face_outlined)), title: Text(child.displayName), subtitle: child.className.isEmpty ? null : Text('Klasse ${child.className}'), trailing: trailing, onTap: onTap, ); } /// Shown by per-child modules while a guardian has no linked child. class NoChildrenPlaceholder extends StatelessWidget { const NoChildrenPlaceholder({super.key}); @override Widget build(BuildContext context) => const PlaceholderView( icon: Icons.family_restroom_outlined, text: 'Deinem Konto ist noch kein Kind zugeordnet. Bitte wende dich an ' 'das Sekretariat.', ); }