Files
sendico/frontend/pshared/lib/provider/email_verification.dart
2026-02-05 02:54:13 +03:00

56 lines
1.7 KiB
Dart

import 'package:flutter/material.dart';
import 'package:pshared/api/responses/error/server.dart';
import 'package:pshared/provider/resource.dart';
import 'package:pshared/service/account.dart';
import 'package:pshared/utils/exception.dart';
class EmailVerificationProvider extends ChangeNotifier {
Resource<bool> _resource = Resource(data: null, isLoading: false);
String? _token;
Resource<bool> get resource => _resource;
bool get isLoading => _resource.isLoading;
bool get isSuccess => _resource.data == true;
Exception? get error => _resource.error;
int? get errorCode => _resource.error is ErrorResponse
? (_resource.error as ErrorResponse).code
: null;
bool get canResendVerification =>
errorCode == 400 || errorCode == 410 || errorCode == 500;
Future<void> verify(String token) async {
final trimmed = token.trim();
if (trimmed.isEmpty) {
_setResource(
Resource(
data: null,
isLoading: false,
error: Exception('Email verification token is empty.'),
),
);
return;
}
if (_token == trimmed && _resource.isLoading) return;
_token = trimmed;
_setResource(Resource(data: null, isLoading: true));
try {
await AccountService.verifyEmail(trimmed);
_setResource(Resource(data: true, isLoading: false));
} catch (e) {
if (e is ErrorResponse && e.code == 404) {
_setResource(Resource(data: true, isLoading: false));
return;
}
_setResource(
Resource(data: null, isLoading: false, error: toException(e)),
);
}
}
void _setResource(Resource<bool> resource) {
_resource = resource;
notifyListeners();
}
}