65 lines
1.9 KiB
Dart
65 lines
1.9 KiB
Dart
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();
|
|
}
|
|
}
|