diff --git a/lib/app.dart b/lib/app.dart new file mode 100644 index 00000000..d10683c6 --- /dev/null +++ b/lib/app.dart @@ -0,0 +1,83 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:window_manager/window_manager.dart'; +import 'providers/providers.dart'; +import 'screens/screens.dart'; +import 'consts.dart' show kFontFamily, kFontFamilyFallback, kColorSchemeSeed; + +class App extends ConsumerStatefulWidget { + const App({super.key}); + + @override + ConsumerState createState() => _AppState(); +} + +class _AppState extends ConsumerState with WindowListener { + @override + void initState() { + super.initState(); + windowManager.addListener(this); + } + + @override + void onWindowResized() { + windowManager.getSize().then((value) { + ref.read(settingsProvider.notifier).update(size: value); + }); + windowManager.getPosition().then((value) { + ref.read(settingsProvider.notifier).update(offset: value); + }); + } + + @override + void onWindowMoved() { + windowManager.getPosition().then((value) { + ref.read(settingsProvider.notifier).update(offset: value); + }); + } + + @override + Widget build(BuildContext context) { + return const DashApp(); + } + + @override + void dispose() { + windowManager.removeListener(this); + super.dispose(); + } +} + +class DashApp extends ConsumerStatefulWidget { + const DashApp({super.key}); + + @override + ConsumerState createState() => _DashAppState(); +} + +class _DashAppState extends ConsumerState { + @override + Widget build(BuildContext context) { + final isDarkMode = + ref.watch(settingsProvider.select((value) => value.isDark)); + return MaterialApp( + debugShowCheckedModeBanner: false, + theme: ThemeData( + fontFamily: kFontFamily, + fontFamilyFallback: kFontFamilyFallback, + colorSchemeSeed: kColorSchemeSeed, + useMaterial3: true, + brightness: Brightness.light, + ), + darkTheme: ThemeData( + fontFamily: kFontFamily, + fontFamilyFallback: kFontFamilyFallback, + colorSchemeSeed: kColorSchemeSeed, + useMaterial3: true, + brightness: Brightness.dark, + ), + themeMode: isDarkMode ? ThemeMode.dark : ThemeMode.light, + home: const HomePage(), + ); + } +} diff --git a/lib/main.dart b/lib/main.dart index 603e2898..91d33c8a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,84 +1,23 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:google_fonts/google_fonts.dart'; -import 'package:window_manager/window_manager.dart'; -import 'providers/providers.dart'; import 'services/services.dart'; -import 'screens/screens.dart'; -import 'consts.dart' show kFontFamily, kFontFamilyFallback, kColorSchemeSeed; +import 'consts.dart' show kIsLinux; +import 'app.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); - await openBoxes(); - var win = getInitialSize(); - await setupWindow(sz: win.$0, off: win.$1); GoogleFonts.config.allowRuntimeFetching = false; + await openBoxes(); + if (kIsLinux) { + await setupInitialWindow(); + } else { + var win = getInitialSize(); + await setupWindow(sz: win.$0, off: win.$1); + } runApp( - const ProviderScope( - child: App(), + ProviderScope( + child: kIsLinux ? const DashApp() : const App(), ), ); } - -class App extends ConsumerStatefulWidget { - const App({super.key}); - - @override - ConsumerState createState() => _AppState(); -} - -class _AppState extends ConsumerState with WindowListener { - @override - void initState() { - super.initState(); - windowManager.addListener(this); - } - - @override - void onWindowResized() { - windowManager.getSize().then((value) { - ref.read(settingsProvider.notifier).update(size: value); - }); - windowManager.getPosition().then((value) { - ref.read(settingsProvider.notifier).update(offset: value); - }); - } - - @override - void onWindowMoved() { - windowManager.getPosition().then((value) { - ref.read(settingsProvider.notifier).update(offset: value); - }); - } - - @override - Widget build(BuildContext context) { - final isDarkMode = - ref.watch(settingsProvider.select((value) => value.isDark)); - return MaterialApp( - debugShowCheckedModeBanner: false, - theme: ThemeData( - fontFamily: kFontFamily, - fontFamilyFallback: kFontFamilyFallback, - colorSchemeSeed: kColorSchemeSeed, - useMaterial3: true, - brightness: Brightness.light, - ), - darkTheme: ThemeData( - fontFamily: kFontFamily, - fontFamilyFallback: kFontFamilyFallback, - colorSchemeSeed: kColorSchemeSeed, - useMaterial3: true, - brightness: Brightness.dark, - ), - themeMode: isDarkMode ? ThemeMode.dark : ThemeMode.light, - home: const HomePage(), - ); - } - - @override - void dispose() { - windowManager.removeListener(this); - super.dispose(); - } -} diff --git a/lib/services/window_services.dart b/lib/services/window_services.dart index ca3312d5..60b13f50 100644 --- a/lib/services/window_services.dart +++ b/lib/services/window_services.dart @@ -4,7 +4,7 @@ import 'package:window_size/window_size.dart' as window_size; import 'package:window_manager/window_manager.dart'; import '../consts.dart'; -Future setupInitialWindow(Size? sz) async { +Future setupInitialWindow({Size? sz}) async { if (kIsDesktop) { await window_size.getWindowInfo().then((window) { final screen = window.screen;