import 'dart:async'; import 'package:feet/widgets/login_prompt.dart'; import 'package:flutter/material.dart'; import 'package:dynamic_color/dynamic_color.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'api/api.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { final api = FeverAPI(); SharedPreferences? prefs; MyApp({super.key}); Future _loadPrefs() async { var prefs = await SharedPreferences.getInstance(); this.prefs = prefs; var apiKey = prefs.getString('apiKey'), apiUrl = prefs.getString('apiUrl'); if (apiUrl != null && apiKey != null) { api.apiUrl = apiUrl; api.apiKey = apiKey; return true; } return false; } @override Widget build(BuildContext context) { return DynamicColorBuilder( builder: ((lightDynamic, darkDynamic) => MaterialApp( title: 'Feet', theme: ThemeData( brightness: Brightness.light, useMaterial3: true, colorScheme: lightDynamic, ), darkTheme: ThemeData( brightness: Brightness.dark, useMaterial3: true, colorScheme: darkDynamic, ), themeMode: ThemeMode.system, home: FutureBuilder( builder: (context, snapshot) { if (snapshot.hasData && prefs != null) return MyHomePage(title: 'Feet', api: api, prefs: prefs!); return const SizedBox(); }, future: _loadPrefs(), ), )), ); } } class MyHomePage extends StatefulWidget { final String title; final FeverAPI api; final SharedPreferences prefs; const MyHomePage({ super.key, required this.title, required this.api, required this.prefs }); @override State createState() => _MyHomePageState(); } class _MyHomePageState extends State { @override Widget build(BuildContext context) { var loggedIn = widget.api.loggedIn(); // I'm aware that this is stupid, but I'm sick and tired and really don't care as long as it works if (!loggedIn) { Timer.periodic(const Duration(seconds: 1), (timer) { setState(() { loggedIn = widget.api.loggedIn(); }); if (loggedIn) timer.cancel(); }); } return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: loggedIn ? const Center(child: Text('Meep')) : Center(child: LoginPrompt(api: widget.api)), ); } }