diff --git a/lib/consts.dart b/lib/consts.dart index 393cf0ed..f5991d0f 100644 --- a/lib/consts.dart +++ b/lib/consts.dart @@ -13,6 +13,13 @@ final kColorTransparentState = MaterialStateProperty.all(Colors.transparent); const kColorTransparent = Colors.transparent; +const kWindowTitle = "API Dash"; +const kMinWindowSize = Size(900, 600); +const kMinInitialWindowWidth = 1200.0; +const kMinInitialWindowHeight = 800.0; + +const kColorSchemeSeed = Colors.blue; +final kFontFamily = GoogleFonts.openSans().fontFamily; final kFontFamilyFallback = (!kIsWeb && (Platform.isIOS || Platform.isMacOS)) ? null : [GoogleFonts.notoColorEmoji().fontFamily!]; diff --git a/lib/main.dart b/lib/main.dart index 9cca1e2a..d925b5b8 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,38 +1,14 @@ -import 'dart:io'; -import 'dart:math' as math; -import 'package:apidash/providers/providers.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:window_size/window_size.dart' as window_size; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:google_fonts/google_fonts.dart'; +import 'providers/providers.dart'; import 'services/services.dart'; import 'screens/screens.dart'; -import 'consts.dart' show kFontFamilyFallback; +import 'consts.dart' show kFontFamily, kFontFamilyFallback, kColorSchemeSeed; void main() async { WidgetsFlutterBinding.ensureInitialized(); - if (!kIsWeb) { - if (Platform.isWindows || Platform.isLinux || Platform.isMacOS) { - window_size.getWindowInfo().then((window) { - final screen = window.screen; - if (screen != null) { - final screenFrame = screen.visibleFrame; - final width = - math.max((screenFrame.width / 2).roundToDouble(), 1200.0); - final height = - math.max((screenFrame.height / 2).roundToDouble(), 800.0); - final left = ((screenFrame.width - width) / 2).roundToDouble(); - final top = ((screenFrame.height - height) / 3).roundToDouble(); - final frame = Rect.fromLTWH(left, top, width, height); - window_size.setWindowFrame(frame); - window_size.setWindowMinSize(const Size(900, 600)); - window_size.setWindowMaxSize(Size.infinite); - window_size.setWindowTitle("API Dash"); - } - }); - } - } + await setupInitialWindow(); await openBoxes(); GoogleFonts.config.allowRuntimeFetching = false; runApp( @@ -51,16 +27,16 @@ class App extends ConsumerWidget { return MaterialApp( debugShowCheckedModeBanner: false, theme: ThemeData( - fontFamily: GoogleFonts.openSans().fontFamily, + fontFamily: kFontFamily, fontFamilyFallback: kFontFamilyFallback, - colorSchemeSeed: Colors.blue, + colorSchemeSeed: kColorSchemeSeed, useMaterial3: true, brightness: Brightness.light, ), darkTheme: ThemeData( - fontFamily: GoogleFonts.openSans().fontFamily, + fontFamily: kFontFamily, fontFamilyFallback: kFontFamilyFallback, - colorSchemeSeed: Colors.blue, + colorSchemeSeed: kColorSchemeSeed, useMaterial3: true, brightness: Brightness.dark, ), diff --git a/lib/services/services.dart b/lib/services/services.dart index cc13079e..a7cf03fd 100644 --- a/lib/services/services.dart +++ b/lib/services/services.dart @@ -1,2 +1,3 @@ export 'http_service.dart'; export 'hive_services.dart'; +export 'window_services.dart'; diff --git a/lib/services/window_services.dart b/lib/services/window_services.dart new file mode 100644 index 00000000..0cdf22d6 --- /dev/null +++ b/lib/services/window_services.dart @@ -0,0 +1,30 @@ +import 'dart:io'; +import 'dart:math' as math; +import 'package:flutter/material.dart'; +import 'package:flutter/foundation.dart'; +import 'package:window_size/window_size.dart' as window_size; +import '../consts.dart'; + +Future setupInitialWindow() async { + if (!kIsWeb) { + if (Platform.isWindows || Platform.isLinux || Platform.isMacOS) { + window_size.getWindowInfo().then((window) { + final screen = window.screen; + if (screen != null) { + final screenFrame = screen.visibleFrame; + final width = math.max( + (screenFrame.width / 2).roundToDouble(), kMinInitialWindowWidth); + final height = math.max((screenFrame.height / 2).roundToDouble(), + kMinInitialWindowHeight); + final left = ((screenFrame.width - width) / 2).roundToDouble(); + final top = ((screenFrame.height - height) / 3).roundToDouble(); + final frame = Rect.fromLTWH(left, top, width, height); + window_size.setWindowFrame(frame); + window_size.setWindowMinSize(kMinWindowSize); + window_size.setWindowMaxSize(Size.infinite); + window_size.setWindowTitle(kWindowTitle); + } + }); + } + } +}