import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'core/router.dart'; import 'core/theme.dart'; import 'state/session_controller.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); final prefs = await SharedPreferences.getInstance(); SystemChrome.setSystemUIOverlayStyle( const SystemUiOverlayStyle( statusBarColor: Colors.transparent, statusBarIconBrightness: Brightness.light, ), ); runApp( ProviderScope( overrides: [prefsProvider.overrideWithValue(prefs)], child: const KrowApp(), ), ); } class KrowApp extends StatelessWidget { const KrowApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp.router( title: 'KROW Worker', debugShowCheckedModeBanner: false, theme: buildKrowTheme(), scrollBehavior: const KrowScrollBehavior(), routerConfig: router, ); } } /// Scrolling feel, applied everywhere. class KrowScrollBehavior extends MaterialScrollBehavior { const KrowScrollBehavior(); /// Bouncing on every platform. The lists here sit under a pinned header, and /// a rubber-band edge shows you have reached the end of the content rather /// than the end of the screen — clamping just stops dead against the header. @override ScrollPhysics getScrollPhysics(BuildContext context) => const BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()); /// Let the web and desktop builds be dragged with a mouse or trackpad, not /// only scrolled with a wheel. @override Set get dragDevices => { PointerDeviceKind.touch, PointerDeviceKind.mouse, PointerDeviceKind.trackpad, PointerDeviceKind.stylus, }; /// The bounce is the end-of-list signal; a glow on top of it is noise. @override Widget buildOverscrollIndicator( BuildContext context, Widget child, ScrollableDetails details, ) => child; }