intermediate
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
import 'package:lensai/features/user/data/providers.dart';
|
||||
import 'package:pocketbase/pocketbase.dart';
|
||||
import 'package:riverpod/riverpod.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'providers.g.dart';
|
||||
|
||||
const _authKey = 'pb_auth';
|
||||
|
||||
@Riverpod()
|
||||
Stream<double> iconCacheSizeMegabytes(Ref ref) {
|
||||
final repository = ref.watch(userDatabaseProvider);
|
||||
return repository.cacheDao.iconCacheSize().watchSingle();
|
||||
}
|
||||
|
||||
@Riverpod()
|
||||
Future<String?> _storedAuthData(Ref ref) {
|
||||
const secureStorage = FlutterSecureStorage();
|
||||
return secureStorage.read(key: _authKey);
|
||||
}
|
||||
|
||||
@Riverpod(keepAlive: true)
|
||||
AsyncAuthStore authStore(Ref ref) {
|
||||
const secureStorage = FlutterSecureStorage();
|
||||
|
||||
final intial =
|
||||
ref.watch(_storedAuthDataProvider.select((value) => value.valueOrNull));
|
||||
|
||||
return AsyncAuthStore(
|
||||
initial: intial,
|
||||
save: (data) async {
|
||||
await secureStorage.write(key: _authKey, value: data);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@Riverpod()
|
||||
Stream<AuthStoreEvent> authState(Ref ref) {
|
||||
final authStore = ref.watch(authStoreProvider);
|
||||
return authStore.onChange;
|
||||
}
|
||||
|
||||
@Riverpod(keepAlive: true)
|
||||
PocketBase pocketBase(Ref ref) {
|
||||
final authStore = ref.watch(authStoreProvider);
|
||||
|
||||
return PocketBase('http://192.168.2.104:8090', authStore: authStore);
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'providers.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$iconCacheSizeMegabytesHash() =>
|
||||
r'43162fce3ce8b04a5a55ed52021b274afbde2861';
|
||||
|
||||
/// See also [iconCacheSizeMegabytes].
|
||||
@ProviderFor(iconCacheSizeMegabytes)
|
||||
final iconCacheSizeMegabytesProvider =
|
||||
AutoDisposeStreamProvider<double>.internal(
|
||||
iconCacheSizeMegabytes,
|
||||
name: r'iconCacheSizeMegabytesProvider',
|
||||
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$iconCacheSizeMegabytesHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||
// ignore: unused_element
|
||||
typedef IconCacheSizeMegabytesRef = AutoDisposeStreamProviderRef<double>;
|
||||
String _$storedAuthDataHash() => r'5f7e3ef6233a2036f7ce3728131901a46b1e548e';
|
||||
|
||||
/// See also [_storedAuthData].
|
||||
@ProviderFor(_storedAuthData)
|
||||
final _storedAuthDataProvider = AutoDisposeFutureProvider<String?>.internal(
|
||||
_storedAuthData,
|
||||
name: r'_storedAuthDataProvider',
|
||||
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$storedAuthDataHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||
// ignore: unused_element
|
||||
typedef _StoredAuthDataRef = AutoDisposeFutureProviderRef<String?>;
|
||||
String _$authStoreHash() => r'766c001bbb8d7dc4e148eff3816c414d78e77f26';
|
||||
|
||||
/// See also [authStore].
|
||||
@ProviderFor(authStore)
|
||||
final authStoreProvider = Provider<AsyncAuthStore>.internal(
|
||||
authStore,
|
||||
name: r'authStoreProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product') ? null : _$authStoreHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||
// ignore: unused_element
|
||||
typedef AuthStoreRef = ProviderRef<AsyncAuthStore>;
|
||||
String _$authStateHash() => r'ffa411ae0abc5c7bb3e8a93e783bd8398ce7f666';
|
||||
|
||||
/// See also [authState].
|
||||
@ProviderFor(authState)
|
||||
final authStateProvider = AutoDisposeStreamProvider<AuthStoreEvent>.internal(
|
||||
authState,
|
||||
name: r'authStateProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product') ? null : _$authStateHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||
// ignore: unused_element
|
||||
typedef AuthStateRef = AutoDisposeStreamProviderRef<AuthStoreEvent>;
|
||||
String _$pocketBaseHash() => r'9e1dc8057e300bc7ca697da9f68ec61e70fdbaab';
|
||||
|
||||
/// See also [pocketBase].
|
||||
@ProviderFor(pocketBase)
|
||||
final pocketBaseProvider = Provider<PocketBase>.internal(
|
||||
pocketBase,
|
||||
name: r'pocketBaseProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product') ? null : _$pocketBaseHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||
// ignore: unused_element
|
||||
typedef PocketBaseRef = ProviderRef<PocketBase>;
|
||||
// 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
|
||||
@@ -1,11 +0,0 @@
|
||||
import 'package:lensai/features/user/data/providers.dart';
|
||||
import 'package:riverpod/riverpod.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'cache.g.dart';
|
||||
|
||||
@Riverpod()
|
||||
Stream<double> iconCacheSizeMegabytes(Ref ref) {
|
||||
final repository = ref.watch(userDatabaseProvider);
|
||||
return repository.cacheDao.iconCacheSize().watchSingle();
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
import 'package:lensai/features/user/domain/providers.dart';
|
||||
import 'package:lensai/features/user/extensions/client_exception.dart';
|
||||
import 'package:pocketbase/pocketbase.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'auth.g.dart';
|
||||
|
||||
class AuthException implements Exception {
|
||||
final String message;
|
||||
|
||||
AuthException(this.message);
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return message;
|
||||
}
|
||||
}
|
||||
|
||||
@Riverpod()
|
||||
class AuthRepository extends _$AuthRepository {
|
||||
late PocketBase _pb;
|
||||
|
||||
Future<RecordAuth> authWithPassword(String user, String password) async {
|
||||
try {
|
||||
return await _pb.collection('users').authWithPassword(user, password);
|
||||
} on ClientException catch (e) {
|
||||
throw AuthException(e.errorMessage);
|
||||
}
|
||||
}
|
||||
|
||||
Future<RecordModel> createUserWithPassword(
|
||||
String email,
|
||||
String password,
|
||||
) async {
|
||||
try {
|
||||
return await _pb.collection('users').create(
|
||||
body: {
|
||||
"email": email,
|
||||
"password": password,
|
||||
"passwordConfirm": password,
|
||||
},
|
||||
);
|
||||
} on ClientException catch (e) {
|
||||
throw AuthException(e.errorMessage);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void build() {
|
||||
_pb = ref.watch(pocketBaseProvider);
|
||||
}
|
||||
}
|
||||
+10
-13
@@ -1,29 +1,26 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'cache.dart';
|
||||
part of 'auth.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$iconCacheSizeMegabytesHash() =>
|
||||
r'43162fce3ce8b04a5a55ed52021b274afbde2861';
|
||||
String _$authRepositoryHash() => r'90ea6f082ef968831763c7f7ee31863f1fe329fe';
|
||||
|
||||
/// See also [iconCacheSizeMegabytes].
|
||||
@ProviderFor(iconCacheSizeMegabytes)
|
||||
final iconCacheSizeMegabytesProvider =
|
||||
AutoDisposeStreamProvider<double>.internal(
|
||||
iconCacheSizeMegabytes,
|
||||
name: r'iconCacheSizeMegabytesProvider',
|
||||
/// See also [AuthRepository].
|
||||
@ProviderFor(AuthRepository)
|
||||
final authRepositoryProvider =
|
||||
AutoDisposeNotifierProvider<AuthRepository, void>.internal(
|
||||
AuthRepository.new,
|
||||
name: r'authRepositoryProvider',
|
||||
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$iconCacheSizeMegabytesHash,
|
||||
: _$authRepositoryHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||
// ignore: unused_element
|
||||
typedef IconCacheSizeMegabytesRef = AutoDisposeStreamProviderRef<double>;
|
||||
typedef _$AuthRepository = AutoDisposeNotifier<void>;
|
||||
// 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
|
||||
Reference in New Issue
Block a user