Files
rmtPocketWatcher/flutter_app/lib/main.dart
HRiggs 110c5d99a1
Some checks failed
Flutter Release / get-version (push) Successful in 7s
Flutter Release / build-windows (push) Failing after 9s
Flutter Release / create-release (push) Has been cancelled
Flutter Release / build-android (push) Has been cancelled
Signing, Installer, New Workflows
2025-12-15 00:05:29 -05:00

94 lines
2.8 KiB
Dart

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:window_manager/window_manager.dart';
import 'providers/price_provider.dart';
import 'providers/update_provider.dart';
import 'screens/home_screen.dart';
import 'services/notification_service.dart';
import 'widgets/loading_screen.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
// Load environment variables
await dotenv.load(fileName: ".env");
// Initialize notification service
await NotificationService().initialize();
await NotificationService().requestPermissions();
// Initialize window manager for desktop only (not web)
if (!kIsWeb && (defaultTargetPlatform == TargetPlatform.windows ||
defaultTargetPlatform == TargetPlatform.macOS ||
defaultTargetPlatform == TargetPlatform.linux)) {
await windowManager.ensureInitialized();
WindowOptions windowOptions = const WindowOptions(
size: Size(1400, 900),
minimumSize: Size(1000, 700),
center: true,
backgroundColor: Color(0xFF0A0E27),
skipTaskbar: false,
titleBarStyle: TitleBarStyle.hidden,
title: 'rmtPocketWatcher',
);
windowManager.waitUntilReadyToShow(windowOptions, () async {
await windowManager.show();
await windowManager.focus();
// Initialize window service after window is ready
// Context will be set later from the home screen
});
}
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
bool _isInitialized = false;
void _onInitializationComplete() {
setState(() {
_isInitialized = true;
});
}
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => PriceProvider()),
ChangeNotifierProvider(create: (_) => UpdateProvider()),
],
child: MaterialApp(
title: 'rmtPocketWatcher',
debugShowCheckedModeBanner: false,
theme: ThemeData(
colorScheme: const ColorScheme.dark(
primary: Color(0xFF50E3C2), // Cyan accent
secondary: Color(0xFF50E3C2),
surface: Color(0xFF1A1F3A), // Main background
onSurface: Colors.white,
),
scaffoldBackgroundColor: const Color(0xFF0A0E27),
useMaterial3: true,
fontFamily: 'monospace', // Terminal-style font
),
home: _isInitialized
? const HomeScreen()
: SplashScreen(onInitializationComplete: _onInitializationComplete),
),
);
}
}