Skip to main content
Version: 7.2 (Current)

Product Types

Types and enums related to products and purchases in flutter_inapp_purchase.

ProductQueryType

Enum representing the type of product to query.

enum ProductQueryType {
InApp, // One-time purchases (consumable and non-consumable)
Subs // Subscription products
}

Usage

// Query in-app products
final products = await iap.fetchProducts(
skus: ['product_id'],
type: ProductQueryType.InApp,
);

// Query subscriptions
final subscriptions = await iap.fetchProducts(
skus: ['subscription_id'],
type: ProductQueryType.Subs,
);

ProductType

Enum representing the product type.

enum ProductType {
InApp,
Subs,
}

Product Classes

flutter_inapp_purchase uses union types for products. When you fetch products, you receive platform-specific product types.

ProductIOS

iOS-specific product type.

class ProductIOS extends Product {
final String id;
final String displayName;
final String description;
final double price;
final String displayPrice;
final ProductTypeIOS type;
final SubscriptionInfoIOS? subscription;
// ... additional iOS-specific properties
}

ProductAndroid

Android-specific product type.

class ProductAndroid extends Product {
final String productId;
final ProductType productType;
final String title;
final String name;
final String description;
final ProductAndroidOneTimePurchaseOfferDetail? oneTimePurchaseOfferDetails;
// ... additional Android-specific properties
}

ProductSubscriptionIOS

iOS-specific subscription product.

class ProductSubscriptionIOS extends ProductSubscription {
final String id;
final String displayName;
final String description;
final double price;
final String displayPrice;
final SubscriptionInfoIOS subscription;
final List<SubscriptionOfferIOS>? subscriptionOffers;
// ... additional iOS subscription properties
}

ProductSubscriptionAndroid

Android-specific subscription product.

class ProductSubscriptionAndroid extends ProductSubscription {
final String productId;
final String title;
final String name;
final String description;
final List<ProductSubscriptionAndroidOfferDetails>? subscriptionOfferDetails;
// ... additional Android subscription properties
}

FetchProducts Result

When fetching products, the result is a union type:

// For InApp products
class FetchProductsResultProducts extends FetchProductsResult {
final List<Product> products; // List of ProductIOS or ProductAndroid
}

// For Subscriptions
class FetchProductsResultSubscriptions extends FetchProductsResult {
final List<ProductSubscription> subscriptions; // List of subscription products
}

Usage

final result = await iap.fetchProducts(
skus: ['product_id'],
type: ProductQueryType.InApp,
);

if (result is FetchProductsResultProducts) {
for (final product in result.products) {
if (product is ProductIOS) {
debugPrint('iOS Product: ${product.displayName}');
} else if (product is ProductAndroid) {
debugPrint('Android Product: ${product.title}');
}
}
}

PurchaseOptions

Configuration for getAvailablePurchases().

class PurchaseOptions {
final bool? onlyIncludeActiveItemsIOS;
final bool? alsoPublishToEventListenerIOS;
}

Example

final purchases = await iap.getAvailablePurchases(
onlyIncludeActiveItemsIOS: true, // Only active subscriptions
alsoPublishToEventListenerIOS: false,
);

ProductRequest

Request configuration for fetching products.

class ProductRequest {
final List<String> skus;
final ProductQueryType? type;
}

Example

final products = await iap.fetchProducts(
skus: ['product1', 'product2'],
type: ProductQueryType.InApp,
);