v1.2.0+54
All checks were successful
Flutter Schmutter / build (push) Successful in 3m37s

- screaming_possum.gif
This commit is contained in:
2025-06-13 13:55:05 +02:00
parent dff9cda829
commit 9655f15927
18 changed files with 628 additions and 878 deletions

View File

@ -1,78 +1,47 @@
import 'package:f0ckapp/providers/theme_provider.dart';
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:get/get.dart';
import 'package:f0ckapp/utils/appversion_util.dart';
import 'package:f0ckapp/providers/theme_provider.dart';
import 'package:f0ckapp/providers/media_provider.dart';
import 'package:f0ckapp/services/api_service.dart';
import 'package:f0ckapp/screens/media_grid.dart';
import 'package:f0ckapp/screens/settings_screen.dart';
import 'package:f0ckapp/screens/detailview_screen.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
await AppVersion.init();
final ThemeController themeController = Get.put(ThemeController());
runApp(ProviderScope(child: F0ckApp()));
}
final api = ApiService();
await api.fetchMedia();
Get.put(api);
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,
runApp(
GetMaterialApp(
theme: themeController.currentTheme.value,
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/(?<tag>[^/]+))?(?:/(?<mime>image|audio|video))?(?:/(?<itemid>\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,
);
},
);
}
getPages: [
GetPage(name: '/', page: () => MediaGrid()),
GetPage(name: '/settings', page: () => SettingsPage()),
GetPage(
name: '/:itemId',
page: () {
int? test = int.tryParse(Get.parameters['itemId']!);
if (test == null) {
return Scaffold(body: Center(child: Text('oof')));
}
return DetailView(initialItemId: test);
},
),
],
unknownRoute: GetPage(
name: '/notfound',
page: () => Center(child: Text('oof')),
),
),
);
}