diff --git a/lib/globals.dart b/lib/globals.dart index d7e8dc1..327cdae 100644 --- a/lib/globals.dart +++ b/lib/globals.dart @@ -2,6 +2,9 @@ import 'dart:io'; import 'package:cookie_jar/cookie_jar.dart'; import 'package:dio/dio.dart'; import 'package:dio_cookie_manager/dio_cookie_manager.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart'; +import 'package:go_router/go_router.dart'; import 'package:path_provider/path_provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'api/client.dart'; @@ -39,6 +42,29 @@ void initApi(String baseUrl) { _api = EHApi(dio, baseUrl: baseUrl); } +bool tryInitApi(BuildContext context) { + bool? skipBaseUrl = const bool.fromEnvironment("skipBaseUrl"); + if (skipBaseUrl == true) { + if (_api != null) { + return true; + } + initApi("/api"); + return true; + } + String? baseUrl = prefs.getString("baseUrl"); + if (baseUrl == null) { + SchedulerBinding.instance.addPostFrameCallback((_) { + context.go("/set_server"); + }); + return false; + } + if (_api != null && _api!.baseUrl == baseUrl) { + return true; + } + initApi(baseUrl); + return true; +} + bool get apiInited { return _api != null; } diff --git a/lib/home.dart b/lib/home.dart index aa3e1d2..c45655d 100644 --- a/lib/home.dart +++ b/lib/home.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:go_router/go_router.dart'; import 'package:logging/logging.dart'; @@ -15,20 +14,11 @@ class HomePage extends HookWidget { @override Widget build(BuildContext context) { useEffect(() { - String? baseUrl = prefs.getString("baseUrl"); - if (baseUrl == null) { - SchedulerBinding.instance.addPostFrameCallback((_) { - context.go("/set_server"); - }); - return; - } - initApi(baseUrl); + if (!tryInitApi(context)) return; if (!auth.isAuthed) { auth.checkAuth().then((re) { if (!re) { - SchedulerBinding.instance.addPostFrameCallback((_) { - context.go(auth.status!.noUser ? "/create_root_user" : "/login"); - }); + context.go(auth.status!.noUser ? "/create_root_user" : "/login"); } }).catchError((err) { _log.log(Level.SEVERE, "Failed to check auth info:", err); diff --git a/lib/login.dart b/lib/login.dart index bc9742f..9c2f48a 100644 --- a/lib/login.dart +++ b/lib/login.dart @@ -70,6 +70,7 @@ class _LoginPageState extends State { @override Widget build(BuildContext context) { + tryInitApi(context); return Scaffold( body: Container( padding: const EdgeInsets.symmetric(horizontal: 100), diff --git a/lib/set_server.dart b/lib/set_server.dart index 4197042..0fbcfe7 100644 --- a/lib/set_server.dart +++ b/lib/set_server.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:go_router/go_router.dart'; import 'globals.dart'; @@ -61,6 +62,12 @@ class _SetServerPageState extends State { @override Widget build(BuildContext context) { + bool? skipBaseUrl = const bool.fromEnvironment("skipBaseUrl"); + if (skipBaseUrl == true) { + SchedulerBinding.instance.addPostFrameCallback((_) { + context.go("/"); + }); + } return Scaffold( body: Container( padding: const EdgeInsets.symmetric(horizontal: 100),