// ============================================================ // TransferProvider — 转赠 Riverpod Providers // ============================================================ import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../../core/network/api_client.dart'; class TransferState { final bool isLoading; final bool isSuccess; final String? error; const TransferState({this.isLoading = false, this.isSuccess = false, this.error}); TransferState copyWith({bool? isLoading, bool? isSuccess, String? error, bool clearError = false}) { return TransferState( isLoading: isLoading ?? this.isLoading, isSuccess: isSuccess ?? this.isSuccess, error: clearError ? null : (error ?? this.error), ); } } class TransferNotifier extends Notifier { @override TransferState build() => const TransferState(); Future transfer({ required String holdingId, required String recipientPhone, int quantity = 1, }) async { state = state.copyWith(isLoading: true, clearError: true, isSuccess: false); try { final api = ApiClient.instance; await api.post('/api/v1/transfers', data: { 'holdingId': holdingId, 'recipientPhone': recipientPhone, 'quantity': quantity, }); state = state.copyWith(isLoading: false, isSuccess: true); } catch (e) { state = state.copyWith(isLoading: false, error: e.toString()); rethrow; } } } final transferProvider = NotifierProvider(TransferNotifier.new);