import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:f0ckapp/screens/mediagrid_screen.dart'; import 'package:f0ckapp/screens/detailview_screen.dart'; import 'package:f0ckapp/screens/settings_screen.dart'; import 'package:f0ckapp/utils/appversion_util.dart'; import 'package:f0ckapp/providers/theme_provider.dart'; import 'package:f0ckapp/providers/media_provider.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); await AppVersion.init(); runApp(ProviderScope(child: F0ckApp())); } class F0ckApp extends ConsumerWidget { const F0ckApp({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final ThemeData theme = ref.watch(themeNotifierProvider); return MaterialApp( debugShowCheckedModeBanner: false, theme: theme, initialRoute: '/', routes: { '/': (context) => const MediaGrid(), '/settings': (context) => const SettingsPage(), }, onGenerateRoute: (RouteSettings settings) { final String? name = settings.name; if (name == null) { return MaterialPageRoute( builder: (_) => const Scaffold(body: Center(child: Text('Ungültiger Link'))), settings: settings, ); } final RegExp regExp = RegExp( r'^(?:/tag/(?[^/]+))?(?:/(?image|audio|video))?(?:/(?\d+))?$', ); final RegExpMatch? match = regExp.firstMatch(name); if (match != null) { final String? tag = match.namedGroup('tag'); final String? mime = match.namedGroup('mime'); final String? idStr = match.namedGroup('itemid'); final int? itemId = idStr != null ? int.tryParse(idStr) : null; const int preloadOffset = 50; if (itemId != null) { return MaterialPageRoute( builder: (context) => DetailView(initialItemId: itemId), settings: settings, ); } return MaterialPageRoute( builder: (context) => const MediaGrid(), settings: settings, ); } return MaterialPageRoute( builder: (context) => const Scaffold(body: Center(child: Text('Ungültiger Link'))), settings: settings, ); }, ); } }