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 _resource = Resource(data: null, isLoading: false); String? _token; Resource 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 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 resource) { _resource = resource; notifyListeners(); } }