feat: Add more user related state to hive

This commit is contained in:
Anton Stubenbord
2023-04-23 16:48:11 +02:00
parent 1b9e4fbb81
commit 5c0ef7f853
32 changed files with 408 additions and 272 deletions

View File

@@ -14,13 +14,13 @@ class BiometricAuthenticationSetting extends StatelessWidget {
@override
Widget build(BuildContext context) {
return UserSettingsBuilder(
builder: (context, settings) {
if (settings == null) {
return UserAccountBuilder(
builder: (context, account) {
if (account == null) {
return const SizedBox.shrink();
}
return SwitchListTile(
value: settings.isBiometricAuthenticationEnabled,
value: account.settings.isBiometricAuthenticationEnabled,
title: Text(S.of(context)!.biometricAuthentication),
subtitle: Text(S.of(context)!.authenticateOnAppStart),
onChanged: (val) async {
@@ -33,8 +33,8 @@ class BiometricAuthenticationSetting extends StatelessWidget {
.read<LocalAuthenticationService>()
.authenticateLocalUser(localizedReason);
if (isAuthenticated) {
settings.isBiometricAuthenticationEnabled = val;
settings.save();
account.settings.isBiometricAuthenticationEnabled = val;
account.save();
}
},
);

View File

@@ -1,30 +1,33 @@
import 'package:flutter/material.dart';
import 'package:hive_flutter/adapters.dart';
import 'package:paperless_mobile/core/config/hive/hive_config.dart';
import 'package:paperless_mobile/features/login/model/user_account.dart';
import 'package:paperless_mobile/features/settings/model/global_settings.dart';
import 'package:paperless_mobile/features/settings/model/user_settings.dart';
class UserSettingsBuilder extends StatelessWidget {
class UserAccountBuilder extends StatelessWidget {
final Widget Function(
BuildContext context,
UserSettings? settings,
UserAccount? settings,
) builder;
const UserSettingsBuilder({
const UserAccountBuilder({
super.key,
required this.builder,
});
@override
Widget build(BuildContext context) {
return ValueListenableBuilder<Box<UserSettings>>(
valueListenable: Hive.box<UserSettings>(HiveBoxes.userSettings).listenable(),
builder: (context, value, _) {
final currentUser =
Hive.box<GlobalSettings>(HiveBoxes.globalSettings).getValue()!.currentLoggedInUser;
return ValueListenableBuilder<Box<UserAccount>>(
valueListenable:
Hive.box<UserAccount>(HiveBoxes.userAccount).listenable(),
builder: (context, accountBox, _) {
final currentUser = Hive.box<GlobalSettings>(HiveBoxes.globalSettings)
.getValue()!
.currentLoggedInUser;
if (currentUser != null) {
final settings = value.get(currentUser);
return builder(context, settings);
final account = accountBox.get(currentUser);
return builder(context, account);
} else {
return builder(context, null);
}