main.dart 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import 'package:flutter/cupertino.dart';
  2. import 'package:flutter/material.dart';
  3. import 'data/settings_store.dart';
  4. import 'design.dart';
  5. import 'screens/connection_screen.dart';
  6. import 'screens/home_shell.dart';
  7. void main() {
  8. runApp(const RackPeekApp());
  9. }
  10. class RackPeekApp extends StatelessWidget {
  11. const RackPeekApp({super.key});
  12. @override
  13. Widget build(BuildContext context) {
  14. return MaterialApp(
  15. title: 'RackPeek',
  16. debugShowCheckedModeBanner: false,
  17. theme: scribeTheme(),
  18. home: const _StartupGate(),
  19. );
  20. }
  21. }
  22. class _StartupGate extends StatefulWidget {
  23. const _StartupGate();
  24. @override
  25. State<_StartupGate> createState() => _StartupGateState();
  26. }
  27. class _StartupGateState extends State<_StartupGate> {
  28. final SettingsStore _settings = SettingsStore();
  29. bool _checking = true;
  30. @override
  31. void initState() {
  32. super.initState();
  33. _startup();
  34. }
  35. Future<void> _startup() async {
  36. final saved = await _settings.load();
  37. final localMode = await _settings.isLocalMode();
  38. if (!mounted) return;
  39. setState(() => _checking = false);
  40. if (saved != null) {
  41. Navigator.of(context).pushReplacement(
  42. MaterialPageRoute(
  43. builder: (_) => HomeShell(
  44. settings: _settings,
  45. baseUrl: saved.baseUrl,
  46. apiKey: saved.apiKey,
  47. ),
  48. ),
  49. );
  50. } else if (localMode) {
  51. Navigator.of(context).pushReplacement(
  52. MaterialPageRoute(builder: (_) => HomeShell(settings: _settings)),
  53. );
  54. }
  55. }
  56. @override
  57. Widget build(BuildContext context) {
  58. if (_checking) {
  59. return const Scaffold(
  60. body: Center(child: CupertinoActivityIndicator(radius: 16)),
  61. );
  62. }
  63. return ConnectionScreen(settings: _settings);
  64. }
  65. }