77 lines
2.1 KiB
Dart
77 lines
2.1 KiB
Dart
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<MapflowApp> createState() => _MapflowAppState();
|
|
}
|
|
|
|
class _MapflowAppState extends State<MapflowApp> {
|
|
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<ShortcutActivator, Intent>.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(),
|
|
),
|
|
);
|
|
},
|
|
),
|
|
);
|
|
}
|
|
}
|