Fixes for PostHog

This commit is contained in:
Arseni
2025-12-11 17:41:25 +03:00
parent 97f71d125e
commit 83e3af9a42
18 changed files with 276 additions and 39 deletions

View File

@@ -1,3 +1,5 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:share_plus/share_plus.dart';
@@ -20,6 +22,9 @@ import 'package:pshared/utils/exception.dart';
class AccountProvider extends ChangeNotifier {
AccountProvider({Future<void> Function(Account?)? onAccountChanged})
: _onAccountChanged = onAccountChanged;
static String get currentUserRef => Constants.nilObjectRef;
// The resource now wraps our Account? state along with its loading/error state.
@@ -27,6 +32,8 @@ class AccountProvider extends ChangeNotifier {
Resource<Account?> get resource => _resource;
late LocaleProvider _localeProvider;
PendingLogin? _pendingLogin;
Future<void>? _restoreFuture;
Future<void> Function(Account?)? _onAccountChanged;
Account? get account => _resource.data;
PendingLogin? get pendingLogin => _pendingLogin;
@@ -53,11 +60,21 @@ class AccountProvider extends ChangeNotifier {
}
// Private helper to update the resource and notify listeners.
void setAccountChangedListener(Future<void> Function(Account?)? listener) => _onAccountChanged = listener;
void _setResource(Resource<Account?> newResource) {
final previousAccount = _resource.data;
_resource = newResource;
_notifyAccountChanged(previousAccount, newResource.data);
notifyListeners();
}
void _notifyAccountChanged(Account? previous, Account? current) {
if (previous == current) return;
final handler = _onAccountChanged;
if (handler != null) unawaited(handler(current));
}
void updateProvider(LocaleProvider localeProvider) => _localeProvider = localeProvider;
void _pickupLocale(String locale) => _localeProvider.setLocale(Locale(locale));
@@ -220,4 +237,11 @@ class AccountProvider extends ChangeNotifier {
rethrow;
}
}
Future<void> restoreIfPossible() {
return _restoreFuture ??= AuthorizationService.isAuthorizationStored().then<void>((hasAuth) async {
if (!hasAuth) return;
await restore();
});
}
}

View File

@@ -21,6 +21,7 @@ class PermissionsProvider extends ChangeNotifier {
Resource<UserAccess> _userAccess = Resource(data: null, isLoading: false, error: null);
late OrganizationsProvider _organizations;
bool _isLoaded = false;
bool _errorHandled = false;
void update(OrganizationsProvider venue) {
_organizations = venue;
@@ -44,6 +45,7 @@ class PermissionsProvider extends ChangeNotifier {
/// Load the [UserAccess] for the current venue.
Future<UserAccess?> load() async {
_userAccess = _userAccess.copyWith(isLoading: true, error: null);
_errorHandled = false;
notifyListeners();
try {
@@ -67,6 +69,12 @@ class PermissionsProvider extends ChangeNotifier {
return _userAccess.data;
}
bool get hasUnhandledError => error != null && !_errorHandled;
void markErrorHandled() {
_errorHandled = true;
}
Future<UserAccess?> changeRole(String accountRef, String newRoleDescRef) async {
final currentRole = roles.firstWhereOrNull((r) => r.accountRef == accountRef);
final currentDesc = currentRole != null