sneaky email verification fix
This commit is contained in:
64
frontend/pweb/lib/pages/verification/controller.dart
Normal file
64
frontend/pweb/lib/pages/verification/controller.dart
Normal file
@@ -0,0 +1,64 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:pshared/provider/account.dart';
|
||||
import 'package:pshared/provider/email_verification.dart';
|
||||
|
||||
import 'package:pweb/models/flow_status.dart';
|
||||
|
||||
|
||||
class AccountVerificationController extends ChangeNotifier {
|
||||
AccountVerificationController({
|
||||
required AccountProvider accountProvider,
|
||||
required EmailVerificationProvider verificationProvider,
|
||||
}) : _accountProvider = accountProvider,
|
||||
_verificationProvider = verificationProvider {
|
||||
_verificationProvider.addListener(_onVerificationChanged);
|
||||
}
|
||||
|
||||
final AccountProvider _accountProvider;
|
||||
final EmailVerificationProvider _verificationProvider;
|
||||
|
||||
FlowStatus _resendStatus = FlowStatus.idle;
|
||||
String? _verificationToken;
|
||||
|
||||
bool get isLoading => _verificationProvider.isLoading;
|
||||
bool get isSuccess => _verificationProvider.isSuccess;
|
||||
Exception? get error => _verificationProvider.error;
|
||||
bool get canResend => _verificationProvider.canResendVerification;
|
||||
bool get isResending => _resendStatus == FlowStatus.resending;
|
||||
|
||||
void startVerification(String token) {
|
||||
final trimmed = token.trim();
|
||||
if (trimmed.isEmpty || trimmed == _verificationToken) return;
|
||||
_verificationToken = trimmed;
|
||||
_verificationProvider.verify(trimmed);
|
||||
}
|
||||
|
||||
Future<void> resendVerificationEmail(String email) async {
|
||||
final trimmed = email.trim();
|
||||
if (trimmed.isEmpty || isResending) return;
|
||||
_setResendStatus(FlowStatus.resending);
|
||||
try {
|
||||
await _accountProvider.resendVerificationEmail(trimmed);
|
||||
_setResendStatus(FlowStatus.idle);
|
||||
} catch (_) {
|
||||
_setResendStatus(FlowStatus.error);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
void _onVerificationChanged() {
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void _setResendStatus(FlowStatus status) {
|
||||
_resendStatus = status;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_verificationProvider.removeListener(_onVerificationChanged);
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user