redesigned payment page + a lot of fixes
This commit is contained in:
63
frontend/pweb/lib/controllers/auth/account_loader.dart
Normal file
63
frontend/pweb/lib/controllers/auth/account_loader.dart
Normal file
@@ -0,0 +1,63 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
import 'package:pshared/models/auth/state.dart';
|
||||
import 'package:pshared/provider/account.dart';
|
||||
|
||||
import 'package:pweb/models/account/account_loader.dart';
|
||||
|
||||
|
||||
class AccountLoaderController extends ChangeNotifier {
|
||||
AccountProvider? _provider;
|
||||
AuthState? _handledState;
|
||||
AccountLoaderAction? _action;
|
||||
Object? _error;
|
||||
|
||||
AccountLoaderAction? get action => _action;
|
||||
Object? get error => _error;
|
||||
|
||||
void update(AccountProvider provider) {
|
||||
if (identical(_provider, provider)) return;
|
||||
_provider?.removeListener(_handleProviderChanged);
|
||||
_provider = provider;
|
||||
_provider?.addListener(_handleProviderChanged);
|
||||
_evaluate(provider);
|
||||
}
|
||||
|
||||
AccountLoaderAction? consumeAction() {
|
||||
final action = _action;
|
||||
_action = null;
|
||||
return action;
|
||||
}
|
||||
|
||||
void _handleProviderChanged() {
|
||||
final provider = _provider;
|
||||
if (provider == null) return;
|
||||
_evaluate(provider);
|
||||
}
|
||||
|
||||
void _evaluate(AccountProvider provider) {
|
||||
if (_handledState == provider.authState) return;
|
||||
_handledState = provider.authState;
|
||||
|
||||
switch (provider.authState) {
|
||||
case AuthState.error:
|
||||
_error = provider.error ?? Exception('Authorization failed');
|
||||
_action = AccountLoaderAction.showErrorAndGoToLogin;
|
||||
notifyListeners();
|
||||
break;
|
||||
case AuthState.empty:
|
||||
_error = null;
|
||||
_action = AccountLoaderAction.goToLogin;
|
||||
notifyListeners();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_provider?.removeListener(_handleProviderChanged);
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user