# setSubscriptionStatus()

Manually sets the user's subscription status when using a custom PurchaseController.

This method should only be used with a custom [`PurchaseController`](/content/docs/flutter/sdk-reference/PurchaseController/index.html). The default purchase controller manages subscription status automatically.

## [Purpose](/content/docs/flutter/sdk-reference/advanced/setSubscriptionStatus#purpose/index.html)

Manually updates the user's subscription status when implementing custom purchase logic.

## [Signature](/content/docs/flutter/sdk-reference/advanced/setSubscriptionStatus#signature/index.html)

```
Future<void> setSubscriptionStatus(SubscriptionStatus status)
```

## [Parameters](/content/docs/flutter/sdk-reference/advanced/setSubscriptionStatus#parameters/index.html)

| Prop   | Type                |
|--------|---------------------|
| status | SubscriptionStatus   |

## [Returns / State](/content/docs/flutter/sdk-reference/advanced/setSubscriptionStatus#returns--state/index.html)

Returns a `Future<void>` that completes when the subscription status is updated.

## [Usage](/content/docs/flutter/sdk-reference/advanced/setSubscriptionStatus#usage/index.html)

After custom purchase:

```
class MyPurchaseController extends PurchaseController {
  @override
  Future<PurchaseResult> purchaseFromAppStore(String productId) async {
    try {
      // Custom purchase logic
      final result = await MyPaymentService.purchase(productId);

if (result.success) {
        // Update subscription status after successful purchase
        await Superwall.shared.setSubscriptionStatus(
          SubscriptionStatus.active,
        );
        return PurchaseResult.purchased;
      }

return PurchaseResult.failed;
    } catch (e) {
      return PurchaseResult.failed;
    }
  }
}
```

Subscription expiry handling:

```
Future<void> _checkSubscriptionExpiry() async {
  final expiryDate = await MyPaymentService.getSubscriptionExpiry();

if (expiryDate.isBefore(DateTime.now())) {
    // Subscription has expired
    await Superwall.shared.setSubscriptionStatus(
      SubscriptionStatus.inactive,
    );

// Show renewal prompt
    _showRenewalPrompt();
  }
}
```

Manual status sync:

```
Future<void> _syncSubscriptionStatus() async {
  try {
    final serverStatus = await MyAPI.getUserSubscriptionStatus();

final superwallStatus = serverStatus.isActive
        ? SubscriptionStatus.active
        : SubscriptionStatus.inactive;

await Superwall.shared.setSubscriptionStatus(superwallStatus);

} catch (e) {
    print('Failed to sync subscription status: $e');
  }
}
```

How is this guide?

GoodBad
