import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:pocketbase/pocketbase.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:listenmeister/widgets/auth_gate.dart'; import 'package:window_manager/window_manager.dart'; import 'package:listenmeister/services/api.dart'; import 'package:listenmeister/providers/theme.dart'; late final PocketBase pb; late final ApiService apiService; const String appName = "ListenMeister"; void main() async { WidgetsFlutterBinding.ensureInitialized(); if (Platform.isAndroid || Platform.isIOS) { await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); } if (Platform.isWindows || Platform.isLinux || Platform.isMacOS) { await windowManager.ensureInitialized(); const WindowOptions windowOptions = WindowOptions( size: Size(400, 720), minimumSize: Size(380, 600), center: true, title: appName, ); windowManager.waitUntilReadyToShow(windowOptions, () async { await windowManager.show(); await windowManager.focus(); }); } final SharedPreferences prefs = await SharedPreferences.getInstance(); final AsyncAuthStore store = AsyncAuthStore( save: (String data) async => prefs.setString('pb_auth', data), initial: prefs.getString('pb_auth'), ); pb = PocketBase('https://pb.flumm.io', authStore: store); apiService = ApiService(pb); runApp( ChangeNotifierProvider( create: (_) => ThemeProvider(prefs), child: const MyApp(), ), ); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return Consumer( builder: (context, themeProvider, child) { return MaterialApp( title: appName, debugShowCheckedModeBanner: false, theme: ThemeData( colorScheme: ColorScheme.fromSeed( seedColor: Colors.deepPurple, brightness: Brightness.light, ), useMaterial3: true, ), darkTheme: ThemeData( colorScheme: ColorScheme.fromSeed( seedColor: Colors.deepPurple, brightness: Brightness.dark, ), useMaterial3: true, ), themeMode: themeProvider.themeMode, home: const AuthGate(), ); }, ); } }