WIP: Add mobile application #47

Draft
pierre wants to merge 12 commits from mobile-app into main
165 changed files with 7120 additions and 18 deletions
Showing only changes of commit 7387e285a0 - Show all commits

View File

@ -1,10 +1,11 @@
import 'package:moneymgr_mobile/services/api/api_client.dart'; import 'package:moneymgr_mobile/services/api/api_client.dart';
import 'package:moneymgr_mobile/services/api/api_token.dart'; import 'package:moneymgr_mobile/services/api/api_token.dart';
import 'package:moneymgr_mobile/services/api/auth_api.dart'; import 'package:moneymgr_mobile/services/api/auth_api.dart';
import 'package:moneymgr_mobile/services/router/routes_list.dart';
import 'package:moneymgr_mobile/services/storage/secure_storage.dart'; import 'package:moneymgr_mobile/services/storage/secure_storage.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart';
import '../services/router/routes_list.dart';
part 'auth_state.g.dart'; part 'auth_state.g.dart';
/// The current authentication state of the app. /// The current authentication state of the app.
@ -27,7 +28,7 @@ class CurrentAuthState extends _$CurrentAuthState {
await ApiClient(token: token).authInfo(); await ApiClient(token: token).authInfo();
final secureStorage = ref.read(secureStorageProvider).requireValue; final secureStorage = ref.read(secureStorageProvider).requireValue;
secureStorage.setToken(token); await secureStorage.setToken(token);
ref ref
// Invalidate the state so the auth state will be updated to authenticated. // Invalidate the state so the auth state will be updated to authenticated.

View File

@ -1,11 +1,13 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_gutter/flutter_gutter.dart'; import 'package:flutter_gutter/flutter_gutter.dart';
import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import 'package:moneymgr_mobile/providers/auth_state.dart';
import 'package:moneymgr_mobile/routes/login/base_auth_page.dart'; import 'package:moneymgr_mobile/routes/login/base_auth_page.dart';
import 'package:moneymgr_mobile/services/api/api_token.dart'; import 'package:moneymgr_mobile/services/api/api_token.dart';
import 'package:moneymgr_mobile/providers/auth_state.dart'; import 'package:moneymgr_mobile/services/router/routes_list.dart';
import 'package:moneymgr_mobile/utils/extensions.dart'; import 'package:moneymgr_mobile/utils/extensions.dart';
import 'package:moneymgr_mobile/widgets/app_button.dart'; import 'package:moneymgr_mobile/widgets/app_button.dart';
@ -29,6 +31,11 @@ class ManualAuthScreen extends HookConsumerWidget {
tokenValue: tokenValueController.text, tokenValue: tokenValueController.text,
), ),
); );
if (context.mounted) {
if (context.canPop()) context.pop();
context.replace(profilePage);
}
} catch (e, s) { } catch (e, s) {
Logger.root.severe("Failed to authenticate user! $e $s"); Logger.root.severe("Failed to authenticate user! $e $s");
if (context.mounted) { if (context.mounted) {
@ -51,8 +58,7 @@ class ManualAuthScreen extends HookConsumerWidget {
keyboardType: TextInputType.url, keyboardType: TextInputType.url,
decoration: const InputDecoration( decoration: const InputDecoration(
labelText: 'API URL', labelText: 'API URL',
helperText: helperText: "Format: http://moneymgr.corp.com/api",
"Format: http://moneymgr.corp.com/api",
), ),
textInputAction: TextInputAction.next, textInputAction: TextInputAction.next,
), ),

View File

@ -47,7 +47,7 @@ GoRouter router(Ref ref) {
], ],
), ),
NavigationItem( NavigationItem(
path: '/profile', path: profilePage,
body: (_) => const Text("Profile"), body: (_) => const Text("Profile"),
icon: Icons.person_outline, icon: Icons.person_outline,
selectedIcon: Icons.person, selectedIcon: Icons.person,

View File

@ -8,4 +8,7 @@ const authPage = "/login";
const manualAuthPage = "/login/manual"; const manualAuthPage = "/login/manual";
/// Settings path /// Settings path
const settingsPage = "/settings"; const settingsPage = "/settings";
// Profile path
const profilePage = "/profile";