This commit is contained in:
2023-08-30 16:51:22 +08:00
parent 4db836f750
commit 63b5e9f71e
4 changed files with 36 additions and 12 deletions

View File

@@ -2,6 +2,9 @@ import 'dart:io';
import 'package:cookie_jar/cookie_jar.dart'; import 'package:cookie_jar/cookie_jar.dart';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:dio_cookie_manager/dio_cookie_manager.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:path_provider/path_provider.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'api/client.dart'; import 'api/client.dart';
@@ -39,6 +42,29 @@ void initApi(String baseUrl) {
_api = EHApi(dio, baseUrl: 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 { bool get apiInited {
return _api != null; return _api != null;
} }

View File

@@ -1,5 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
@@ -15,20 +14,11 @@ class HomePage extends HookWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
useEffect(() { useEffect(() {
String? baseUrl = prefs.getString("baseUrl"); if (!tryInitApi(context)) return;
if (baseUrl == null) {
SchedulerBinding.instance.addPostFrameCallback((_) {
context.go("/set_server");
});
return;
}
initApi(baseUrl);
if (!auth.isAuthed) { if (!auth.isAuthed) {
auth.checkAuth().then((re) { auth.checkAuth().then((re) {
if (!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) { }).catchError((err) {
_log.log(Level.SEVERE, "Failed to check auth info:", err); _log.log(Level.SEVERE, "Failed to check auth info:", err);

View File

@@ -70,6 +70,7 @@ class _LoginPageState extends State<LoginPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
tryInitApi(context);
return Scaffold( return Scaffold(
body: Container( body: Container(
padding: const EdgeInsets.symmetric(horizontal: 100), padding: const EdgeInsets.symmetric(horizontal: 100),

View File

@@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'globals.dart'; import 'globals.dart';
@@ -61,6 +62,12 @@ class _SetServerPageState extends State<SetServerPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
bool? skipBaseUrl = const bool.fromEnvironment("skipBaseUrl");
if (skipBaseUrl == true) {
SchedulerBinding.instance.addPostFrameCallback((_) {
context.go("/");
});
}
return Scaffold( return Scaffold(
body: Container( body: Container(
padding: const EdgeInsets.symmetric(horizontal: 100), padding: const EdgeInsets.symmetric(horizontal: 100),