import 'package:flutter/material.dart'; import 'package:window_manager/window_manager.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'src/database/database.dart'; import 'src/screens/dashboard_screen.dart'; import 'src/theme.dart'; late AppDatabase db; void main() async { WidgetsFlutterBinding.ensureInitialized(); db = AppDatabase(); await windowManager.ensureInitialized(); // Restore saved window geometry or center with default size final prefs = await SharedPreferences.getInstance(); final savedX = prefs.getDouble('window_x'); final savedY = prefs.getDouble('window_y'); final savedW = prefs.getDouble('window_w'); final savedH = prefs.getDouble('window_h'); const defaultSize = Size(1280, 800); const minSize = Size(900, 600); final options = WindowOptions( size: savedW != null && savedH != null ? Size(savedW, savedH) : defaultSize, minimumSize: minSize, center: savedX == null, // center only on first launch title: 'own-ledger', titleBarStyle: TitleBarStyle.normal, ); await windowManager.waitUntilReadyToShow(options, () async { if (savedX != null && savedY != null) { await windowManager.setPosition(Offset(savedX, savedY)); } await windowManager.show(); await windowManager.focus(); }); runApp(const OwnLedgerApp()); } class OwnLedgerApp extends StatefulWidget { const OwnLedgerApp({super.key}); @override State createState() => _OwnLedgerAppState(); } class _OwnLedgerAppState extends State with WindowListener { @override void initState() { super.initState(); windowManager.addListener(this); } @override void dispose() { windowManager.removeListener(this); super.dispose(); } Future _saveWindowGeometry() async { final prefs = await SharedPreferences.getInstance(); final pos = await windowManager.getPosition(); final size = await windowManager.getSize(); await prefs.setDouble('window_x', pos.dx); await prefs.setDouble('window_y', pos.dy); await prefs.setDouble('window_w', size.width); await prefs.setDouble('window_h', size.height); } @override void onWindowMoved() => _saveWindowGeometry(); @override void onWindowResized() => _saveWindowGeometry(); @override Widget build(BuildContext context) { return MaterialApp( title: 'own-ledger', debugShowCheckedModeBanner: false, theme: buildAppTheme(), home: const DashboardScreen(), ); } }