Files

71 lines
2.2 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'dart:ui' show PointerDeviceKind;
import 'app_router.dart';
import 'features/auth/data/token_storage.dart';
import 'shared/api_client.dart';
import 'features/igel/data/igel_repository.dart';
import 'features/igel/data/igel_images_repository.dart';
const kApiBase = String.fromEnvironment(
'API_BASE',
defaultValue: 'https://api.windesign.at/hedgehogs.php?r=',
);
const kBuildNumber = String.fromEnvironment(
'BUILD_NUMBER',
defaultValue: '2026.06.26.1',
);
final tokenStorageProvider =
Provider<TokenStorage>((ref) => TokenStorage(kApiBase));
final apiClientProvider = Provider<ApiClient>((ref) => ApiClient(
kApiBase,
getAccessToken: () =>
ref.read(tokenStorageProvider).getValidAccessToken(),
onUnauthorized: () => ref.read(tokenStorageProvider).refreshAccess(),
));
final igelRepoProvider = Provider<IgelRepository>(
(ref) => IgelRepository(ref.read(apiClientProvider)));
final igelImagesRepoProvider =
Provider<IgelImagesRepository>((ref) => IgelImagesRepository(
ref.read(apiClientProvider),
getAccessToken: () =>
ref.read(tokenStorageProvider).getValidAccessToken(),
));
class AppScrollBehavior extends MaterialScrollBehavior {
@override
Set<PointerDeviceKind> get dragDevices => {
PointerDeviceKind.touch,
PointerDeviceKind.mouse,
PointerDeviceKind.stylus,
PointerDeviceKind.trackpad,
PointerDeviceKind.unknown,
};
// Disable automatic Scrollbar wrapping; use explicit Scrollbars where needed.
@override
Widget buildScrollbar(
BuildContext context, Widget child, ScrollableDetails details) {
return child;
}
}
void main() {
runApp(const ProviderScope(child: IgelApp()));
}
class IgelApp extends ConsumerWidget {
const IgelApp({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
return MaterialApp.router(
title: 'Igel',
routerConfig: buildRouter(),
theme: ThemeData(useMaterial3: true),
scrollBehavior: AppScrollBehavior(), // ⬅️ wichtig für Web/Desktop
);
}
}