fix: keyboard not showing when adding new user (#79)

* feat: add fadeSlideTransitionBuilder for smoother transitions in user login

* fix: reuse onboarding components on server manager page

* fix: gaining focus rebuilt the widget

using memoized fixes this issue
This commit is contained in:
Dr.Blank 2025-04-23 15:00:01 +05:30 committed by GitHub
parent c8767b4e1e
commit 25be7fda03
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 447 additions and 493 deletions

View file

@ -8,15 +8,15 @@ import 'package:vaani/settings/models/audiobookshelf_server.dart';
import 'package:vaani/settings/models/authenticated_user.dart' as model;
import 'package:vaani/shared/extensions/obfuscation.dart';
part 'authenticated_user_provider.g.dart';
part 'authenticated_users_provider.g.dart';
final _box = AvailableHiveBoxes.authenticatedUserBox;
final _logger = Logger('authenticated_user_provider');
final _logger = Logger('authenticated_users_provider');
/// provides with a set of authenticated users
@riverpod
class AuthenticatedUser extends _$AuthenticatedUser {
class AuthenticatedUsers extends _$AuthenticatedUsers {
@override
Set<model.AuthenticatedUser> build() {
ref.listenSelf((_, __) {
@ -56,6 +56,7 @@ class AuthenticatedUser extends _$AuthenticatedUser {
void addUser(model.AuthenticatedUser user, {bool setActive = false}) {
state = state..add(user);
ref.invalidateSelf();
if (setActive) {
final apiSettings = ref.read(apiSettingsProvider);
ref.read(apiSettingsProvider.notifier).updateState(
@ -82,9 +83,12 @@ class AuthenticatedUser extends _$AuthenticatedUser {
// also remove the user from the active user
final apiSettings = ref.read(apiSettingsProvider);
if (apiSettings.activeUser == user) {
// replace the active user with the first user in the list
// or null if there are no users left
final newActiveUser = state.isNotEmpty ? state.first : null;
ref.read(apiSettingsProvider.notifier).updateState(
apiSettings.copyWith(
activeUser: null,
activeUser: newActiveUser,
),
);
}

View file

@ -1,28 +1,30 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'authenticated_user_provider.dart';
part of 'authenticated_users_provider.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
String _$authenticatedUserHash() => r'1983527595207c63a12bc84cf0bf1a3c1d729506';
String _$authenticatedUsersHash() =>
r'5fdd472f62fc3b73ff8417cdce9f02e86c33d00f';
/// provides with a set of authenticated users
///
/// Copied from [AuthenticatedUser].
@ProviderFor(AuthenticatedUser)
final authenticatedUserProvider = AutoDisposeNotifierProvider<AuthenticatedUser,
Set<model.AuthenticatedUser>>.internal(
AuthenticatedUser.new,
name: r'authenticatedUserProvider',
/// Copied from [AuthenticatedUsers].
@ProviderFor(AuthenticatedUsers)
final authenticatedUsersProvider = AutoDisposeNotifierProvider<
AuthenticatedUsers, Set<model.AuthenticatedUser>>.internal(
AuthenticatedUsers.new,
name: r'authenticatedUsersProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$authenticatedUserHash,
: _$authenticatedUsersHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$AuthenticatedUser = AutoDisposeNotifier<Set<model.AuthenticatedUser>>;
typedef _$AuthenticatedUsers
= AutoDisposeNotifier<Set<model.AuthenticatedUser>>;
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package

View file

@ -1,6 +1,6 @@
import 'package:logging/logging.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:vaani/api/authenticated_user_provider.dart';
import 'package:vaani/api/authenticated_users_provider.dart';
import 'package:vaani/db/storage.dart';
import 'package:vaani/settings/api_settings_provider.dart';
import 'package:vaani/settings/models/audiobookshelf_server.dart' as model;
@ -88,7 +88,7 @@ class AudiobookShelfServer extends _$AudiobookShelfServer {
}
// remove the users of this server
if (removeUsers) {
ref.read(authenticatedUserProvider.notifier).removeUsersOfServer(server);
ref.read(authenticatedUsersProvider.notifier).removeUsersOfServer(server);
}
}

View file

@ -7,7 +7,7 @@ part of 'server_provider.dart';
// **************************************************************************
String _$audiobookShelfServerHash() =>
r'09e7e37ddc794c45eafbaab7eba82c9dd17faa93';
r'31a96b431221965cd586aad670a32ca901539e41';
/// provides with a set of servers added by the user
///