store api creds
This commit is contained in:
		
							parent
							
								
									e3c15d687b
								
							
						
					
					
						commit
						2acd655885
					
				| 
						 | 
				
			
			@ -1,6 +1,9 @@
 | 
			
		|||
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() {
 | 
			
		||||
| 
						 | 
				
			
			@ -9,9 +12,25 @@ void main() {
 | 
			
		|||
 | 
			
		||||
class MyApp extends StatelessWidget {
 | 
			
		||||
  final api = FeverAPI();
 | 
			
		||||
  SharedPreferences? prefs;
 | 
			
		||||
 | 
			
		||||
  MyApp({super.key});
 | 
			
		||||
 | 
			
		||||
  Future<bool> _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(
 | 
			
		||||
| 
						 | 
				
			
			@ -28,7 +47,13 @@ class MyApp extends StatelessWidget {
 | 
			
		|||
          colorScheme: darkDynamic,
 | 
			
		||||
        ),
 | 
			
		||||
        themeMode: ThemeMode.system,
 | 
			
		||||
        home: MyHomePage(title: 'Feet', api: api),
 | 
			
		||||
        home: FutureBuilder<bool>(
 | 
			
		||||
          builder: (context, snapshot) {
 | 
			
		||||
            if (snapshot.hasData && prefs != null) return MyHomePage(title: 'Feet', api: api, prefs: prefs!);
 | 
			
		||||
            return const SizedBox();
 | 
			
		||||
          },
 | 
			
		||||
          future: _loadPrefs(),
 | 
			
		||||
        ),
 | 
			
		||||
      )),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -37,7 +62,8 @@ class MyApp extends StatelessWidget {
 | 
			
		|||
class MyHomePage extends StatefulWidget {
 | 
			
		||||
  final String title;
 | 
			
		||||
  final FeverAPI api;
 | 
			
		||||
  const MyHomePage({ super.key, required this.title, required this.api });
 | 
			
		||||
  final SharedPreferences prefs;
 | 
			
		||||
  const MyHomePage({ super.key, required this.title, required this.api, required this.prefs });
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  State<MyHomePage> createState() => _MyHomePageState();
 | 
			
		||||
| 
						 | 
				
			
			@ -46,11 +72,24 @@ class MyHomePage extends StatefulWidget {
 | 
			
		|||
class _MyHomePageState extends State<MyHomePage> {
 | 
			
		||||
  @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: widget.api.loggedIn()
 | 
			
		||||
      body: loggedIn
 | 
			
		||||
        ? const Center(child: Text('Meep'))
 | 
			
		||||
        : Center(child: LoginPrompt(api: widget.api)),
 | 
			
		||||
    );
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
import 'package:feet/api/api.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:shared_preferences/shared_preferences.dart';
 | 
			
		||||
 | 
			
		||||
class LoginPage extends StatefulWidget {
 | 
			
		||||
  final FeverAPI api;
 | 
			
		||||
| 
						 | 
				
			
			@ -136,9 +137,12 @@ class _LoginPageState extends State<LoginPage> {
 | 
			
		|||
                return;
 | 
			
		||||
              }
 | 
			
		||||
 | 
			
		||||
              final prefs = await SharedPreferences.getInstance();
 | 
			
		||||
              await prefs.setString('apiUrl', _urlController.text);
 | 
			
		||||
              await prefs.setString('apiKey', apiKey);
 | 
			
		||||
 | 
			
		||||
              widget.api.apiUrl = _urlController.text;
 | 
			
		||||
              widget.api.apiKey = apiKey;
 | 
			
		||||
 | 
			
		||||
              // ignore: use_build_context_synchronously
 | 
			
		||||
              Navigator.of(context).pop();
 | 
			
		||||
            },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,7 +6,9 @@ import FlutterMacOS
 | 
			
		|||
import Foundation
 | 
			
		||||
 | 
			
		||||
import dynamic_color
 | 
			
		||||
import shared_preferences_macos
 | 
			
		||||
 | 
			
		||||
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
 | 
			
		||||
  DynamicColorPlugin.register(with: registry.registrar(forPlugin: "DynamicColorPlugin"))
 | 
			
		||||
  SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										149
									
								
								pubspec.lock
									
									
									
									
									
								
							
							
						
						
									
										149
									
								
								pubspec.lock
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -73,6 +73,22 @@ packages:
 | 
			
		|||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.3.1"
 | 
			
		||||
  ffi:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: ffi
 | 
			
		||||
      sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.0.1"
 | 
			
		||||
  file:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: file
 | 
			
		||||
      sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "6.1.4"
 | 
			
		||||
  flutter:
 | 
			
		||||
    dependency: "direct main"
 | 
			
		||||
    description: flutter
 | 
			
		||||
| 
						 | 
				
			
			@ -91,6 +107,11 @@ packages:
 | 
			
		|||
    description: flutter
 | 
			
		||||
    source: sdk
 | 
			
		||||
    version: "0.0.0"
 | 
			
		||||
  flutter_web_plugins:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description: flutter
 | 
			
		||||
    source: sdk
 | 
			
		||||
    version: "0.0.0"
 | 
			
		||||
  http:
 | 
			
		||||
    dependency: "direct main"
 | 
			
		||||
    description:
 | 
			
		||||
| 
						 | 
				
			
			@ -155,6 +176,118 @@ packages:
 | 
			
		|||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.8.2"
 | 
			
		||||
  path_provider_linux:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: path_provider_linux
 | 
			
		||||
      sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.1.7"
 | 
			
		||||
  path_provider_platform_interface:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: path_provider_platform_interface
 | 
			
		||||
      sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.0.5"
 | 
			
		||||
  path_provider_windows:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: path_provider_windows
 | 
			
		||||
      sha256: bcabbe399d4042b8ee687e17548d5d3f527255253b4a639f5f8d2094a9c2b45c
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.1.3"
 | 
			
		||||
  platform:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: platform
 | 
			
		||||
      sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "3.1.0"
 | 
			
		||||
  plugin_platform_interface:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: plugin_platform_interface
 | 
			
		||||
      sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.1.3"
 | 
			
		||||
  process:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: process
 | 
			
		||||
      sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "4.2.4"
 | 
			
		||||
  shared_preferences:
 | 
			
		||||
    dependency: "direct main"
 | 
			
		||||
    description:
 | 
			
		||||
      name: shared_preferences
 | 
			
		||||
      sha256: "76917b7d4b9526b2ba416808a7eb9fb2863c1a09cf63ec85f1453da240fa818a"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.0.15"
 | 
			
		||||
  shared_preferences_android:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: shared_preferences_android
 | 
			
		||||
      sha256: "8e251f3c986002b65fed6396bce81f379fb63c27317d49743cf289fd0fd1ab97"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.0.14"
 | 
			
		||||
  shared_preferences_ios:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: shared_preferences_ios
 | 
			
		||||
      sha256: "585a14cefec7da8c9c2fb8cd283a3bb726b4155c0952afe6a0caaa7b2272de34"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.1.1"
 | 
			
		||||
  shared_preferences_linux:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: shared_preferences_linux
 | 
			
		||||
      sha256: fbc3cd6826896b66a5f576b025e4f344f780c84ea7f8203097a353370607a2c8
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.1.2"
 | 
			
		||||
  shared_preferences_macos:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: shared_preferences_macos
 | 
			
		||||
      sha256: fbb94bf296576f49be37a1496d5951796211a8db0aa22cc0d68c46440dad808c
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.0.4"
 | 
			
		||||
  shared_preferences_platform_interface:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: shared_preferences_platform_interface
 | 
			
		||||
      sha256: da9431745ede5ece47bc26d5d73a9d3c6936ef6945c101a5aca46f62e52c1cf3
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.1.0"
 | 
			
		||||
  shared_preferences_web:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: shared_preferences_web
 | 
			
		||||
      sha256: a4b5bc37fe1b368bbc81f953197d55e12f49d0296e7e412dfe2d2d77d6929958
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.0.4"
 | 
			
		||||
  shared_preferences_windows:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: shared_preferences_windows
 | 
			
		||||
      sha256: "07c274c2115d4d5e4280622abb09f0980e2c5b1fcdc98ae9f59a3bad5bfc1f26"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.1.2"
 | 
			
		||||
  sky_engine:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description: flutter
 | 
			
		||||
| 
						 | 
				
			
			@ -224,6 +357,22 @@ packages:
 | 
			
		|||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "2.1.4"
 | 
			
		||||
  win32:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: win32
 | 
			
		||||
      sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "3.1.3"
 | 
			
		||||
  xdg_directories:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: xdg_directories
 | 
			
		||||
      sha256: "11541eedefbcaec9de35aa82650b695297ce668662bbd6e3911a7fabdbde589f"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "0.2.0+2"
 | 
			
		||||
sdks:
 | 
			
		||||
  dart: ">=2.19.0-444.2.beta <4.0.0"
 | 
			
		||||
  flutter: ">=3.3.0"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,6 +38,7 @@ dependencies:
 | 
			
		|||
  http: ^0.13.5
 | 
			
		||||
  crypto: ^3.0.2
 | 
			
		||||
  dynamic_color: ^1.5.4
 | 
			
		||||
  shared_preferences: ^2.0.15
 | 
			
		||||
 | 
			
		||||
dev_dependencies:
 | 
			
		||||
  flutter_test:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue