From 73f40a30e664b5c3fdd4ae79bc8bd1a244d2519b Mon Sep 17 00:00:00 2001 From: lifegpc Date: Mon, 28 Aug 2023 16:56:36 +0800 Subject: [PATCH] Update --- lib/globals.dart | 13 +++++++++++++ lib/home.dart | 16 +++++++++++++++- lib/main.dart | 9 ++++++++- lib/set_server.dart | 38 ++++++++++++++++++++++++++++++++++++++ pubspec.lock | 8 ++++++++ pubspec.yaml | 1 + 6 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 lib/set_server.dart diff --git a/lib/globals.dart b/lib/globals.dart index bb71687..4876acf 100644 --- a/lib/globals.dart +++ b/lib/globals.dart @@ -3,8 +3,10 @@ import 'package:cookie_jar/cookie_jar.dart'; import 'package:dio/dio.dart'; import 'package:dio_cookie_manager/dio_cookie_manager.dart'; import 'package:path_provider/path_provider.dart'; +import 'package:shared_preferences/shared_preferences.dart'; final dio = Dio(); +SharedPreferences? _prefs; Future prepareJar() async { final Directory appDocDir = await getApplicationDocumentsDirectory(); @@ -14,3 +16,14 @@ Future prepareJar() async { ); dio.interceptors.add(CookieManager(jar)); } + +Future preparePrefs() async { + _prefs = await SharedPreferences.getInstance(); +} + +SharedPreferences get prefs { + if (_prefs == null) { + throw Exception('SharedPreferences not initialized'); + } + return _prefs!; +} diff --git a/lib/home.dart b/lib/home.dart index ca6b6f5..a8ceba2 100644 --- a/lib/home.dart +++ b/lib/home.dart @@ -1,12 +1,26 @@ 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 'globals.dart'; -class HomePage extends StatelessWidget { +class HomePage extends HookWidget { const HomePage({Key? key}) : super(key: key); static const String routeName = '/'; @override Widget build(BuildContext context) { + useEffect(() { + String? baseUrl = prefs.getString("baseUrl"); + if (baseUrl == null) { + SchedulerBinding.instance.addPostFrameCallback((_) { + context.go("/set_server"); + }); + return; + } + return; + }, []); return const Scaffold( body: Center( child: Text('Hello World!'), diff --git a/lib/main.dart b/lib/main.dart index b80c930..29b20c8 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,7 +1,9 @@ +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'globals.dart'; import 'home.dart'; +import 'set_server.dart'; final _router = GoRouter( routes: [ @@ -9,12 +11,17 @@ final _router = GoRouter( path: HomePage.routeName, builder: (context, state) => const HomePage(), ), + GoRoute( + path: SetServerPage.routeName, + builder: (context, state) => const SetServerPage(), + ), ], ); void main() async { - await prepareJar(); + if (!kIsWeb) await prepareJar(); + await preparePrefs(); runApp(const MainApp()); } diff --git a/lib/set_server.dart b/lib/set_server.dart new file mode 100644 index 0000000..7284b0d --- /dev/null +++ b/lib/set_server.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; + +class SetServerPage extends StatefulWidget { + const SetServerPage({Key? key}) : super(key: key); + + static const String routeName = '/set_server'; + + @override + State createState() => _SetServerPageState(); +} + +class _SetServerPageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + body: Center( + child: Column( + children: [ + const Text('EH Downloader server url:'), + const TextField( + decoration: InputDecoration( + border: OutlineInputBorder(), + labelText: 'Server URL', + ), + ), + const Text('API path'), + TextField( + decoration: const InputDecoration( + border: OutlineInputBorder(), + labelText: 'API Path', + ), + controller: TextEditingController(text: "/api"), + ), + ], + )), + ); + } +} diff --git a/pubspec.lock b/pubspec.lock index 1112379..d82f460 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -230,6 +230,14 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_hooks: + dependency: "direct main" + description: + name: flutter_hooks + sha256: "9eab8fd7aa752c3c1c0a364f9825851d410eb935243411682f4b1b0a4c569d71" + url: "https://pub.dev" + source: hosted + version: "0.20.0" flutter_lints: dependency: "direct dev" description: diff --git a/pubspec.yaml b/pubspec.yaml index 4f21996..4dbf8b9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -11,6 +11,7 @@ dependencies: dio_cookie_manager: ^3.1.0+1 flutter: sdk: flutter + flutter_hooks: ^0.20.0 go_router: ^10.1.0 json_annotation: ^4.8.1 path_provider: ^2.1.0