redesigned payment page + a lot of fixes

This commit is contained in:
Arseni
2026-02-21 21:55:20 +03:00
parent a68aa2abff
commit 0c6fa03aba
208 changed files with 4062 additions and 2217 deletions

View File

@@ -6,7 +6,9 @@ import 'package:pshared/models/auth/state.dart';
import 'package:pshared/provider/account.dart';
import 'package:pweb/app/router/pages.dart';
import 'package:pweb/controllers/auth/account_loader.dart';
import 'package:pweb/utils/error/snackbar.dart';
import 'package:pweb/models/account/account_loader.dart';
import 'package:pweb/generated/i18n/app_localizations.dart';
@@ -20,29 +22,29 @@ class AccountLoader extends StatefulWidget {
}
class _AccountLoaderState extends State<AccountLoader> {
AuthState? _handledState;
late final AccountLoaderController _controller;
@override
void initState() {
super.initState();
_controller = AccountLoaderController()..addListener(_handleControllerAction);
WidgetsBinding.instance.addPostFrameCallback((_) {
if (!mounted) return;
Provider.of<AccountProvider>(context, listen: false).restoreIfPossible();
});
}
void _handleSideEffects(AccountProvider provider) {
if (_handledState == provider.authState) return;
_handledState = provider.authState;
void _handleControllerAction() {
final action = _controller.consumeAction();
if (action == null) return;
void goToLogin() {
if (!mounted) return;
navigateAndReplace(context, Pages.login);
}
switch (provider.authState) {
case AuthState.error:
final error = provider.error ?? Exception('Authorization failed');
switch (action) {
case AccountLoaderAction.showErrorAndGoToLogin:
final error = _controller.error ?? Exception('Authorization failed');
WidgetsBinding.instance.addPostFrameCallback((_) {
if (!mounted) return;
postNotifyUserOfErrorX(
@@ -53,18 +55,23 @@ class _AccountLoaderState extends State<AccountLoader> {
goToLogin();
});
break;
case AuthState.empty:
case AccountLoaderAction.goToLogin:
WidgetsBinding.instance.addPostFrameCallback((_) => goToLogin());
break;
default:
break;
}
}
@override
void dispose() {
_controller.removeListener(_handleControllerAction);
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Consumer<AccountProvider>(builder: (context, provider, _) {
_handleSideEffects(provider);
_controller.update(provider);
if (provider.authState == AuthState.ready && provider.account != null) {
return widget.child;
}