import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:go_router/go_router.dart'; import '../features/mapflow/application/place_cubit.dart'; import '../features/mapflow/data/mapflow_api.dart'; import '../shared/location/current_location.dart'; import 'router/app_router.dart'; import 'theme/mapflow_theme.dart'; class MapflowApp extends StatefulWidget { const MapflowApp({super.key}); @override State createState() => _MapflowAppState(); } class _MapflowAppState extends State { late final PlaceCubit _placeCubit; late final GoRouter _router; @override void initState() { super.initState(); _placeCubit = PlaceCubit(api: MapflowApi(), location: CurrentLocation()) ..load(); _router = createAppRouter(); } @override void dispose() { _router.dispose(); _placeCubit.close(); super.dispose(); } @override Widget build(BuildContext context) { final shortcuts = Map.of(WidgetsApp.defaultShortcuts) ..[const SingleActivator(LogicalKeyboardKey.tab)] = const NextFocusIntent() ..[const SingleActivator(LogicalKeyboardKey.tab, shift: true)] = const PreviousFocusIntent(); return BlocProvider.value( value: _placeCubit, child: MaterialApp.router( title: 'MapFlow', debugShowCheckedModeBanner: false, routerConfig: _router, scrollBehavior: const MaterialScrollBehavior().copyWith( scrollbars: true, dragDevices: { PointerDeviceKind.touch, PointerDeviceKind.mouse, PointerDeviceKind.trackpad, PointerDeviceKind.stylus, }, ), theme: MapflowTheme.light(), builder: (context, child) { return Shortcuts( shortcuts: shortcuts, child: FocusTraversalGroup( policy: ReadingOrderTraversalPolicy(), child: child ?? const SizedBox.shrink(), ), ); }, ), ); } }