Files
sendico/frontend/pweb/lib/pages/verification/controller.dart
2026-02-05 02:54:13 +03:00

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();
}
}