cancelSubscription method
Future<void>
cancelSubscription(
)
override
Implementation
@override
Future<void> cancelSubscription() async {
AppConfig.logger.d("Cancelling Subscription");
try {
final subscription = userServiceImpl.userSubscription;
if (subscription == null || subscription.subscriptionId.isEmpty) return;
final planName = subscription.level?.name ?? '';
final periodEndSeconds = await Sint.find<StripeApiService>().cancelSubscription(subscription.subscriptionId);
if (periodEndSeconds > 0) {
// Stripe will keep the subscription active until period end
final endDateMs = periodEndSeconds * 1000;
subscription.endDate = endDateMs;
// Store scheduled cancellation in Firestore (keeps status active until end date)
UserSubscriptionFirestore().scheduleCancellation(subscription.subscriptionId, endDateMs);
final endDate = DateTime.fromMillisecondsSinceEpoch(endDateMs);
final formattedDate = '${endDate.day}/${endDate.month}/${endDate.year}';
AppConfig.logger.i('Subscription $planName scheduled to cancel on $formattedDate');
Sint.snackbar(
'cancellationScheduled'.tr,
'subscriptionActiveUntil'.tr
.replaceAll('@plan', planName)
.replaceAll('@date', formattedDate),
snackPosition: SnackPosition.bottom,
duration: const Duration(seconds: 5),
);
} else {
AppConfig.logger.e('Failed to cancel subscription with Stripe');
Sint.snackbar(
'error'.tr,
'cancellationError'.tr,
snackPosition: SnackPosition.bottom,
);
}
} catch (e, st) {
NeomErrorLogger.recordError(e, st, module: 'neom_core', operation: 'cancelSubscription');
}
update();
}