flutter_inapp_purchase

flutter_inapp_purchase logo

Pub Version Flutter CI Coverage Status License

A comprehensive Flutter plugin for implementing in-app purchases that conforms to the Open IAP specification

Open IAP

📚 Documentation

📖 Visit our comprehensive documentation site →

📦 Installation

dependencies:
  flutter_inapp_purchase: ^6.6.1

🔧 Quick Start

Basic Usage

import 'package:flutter_inapp_purchase/flutter_inapp_purchase.dart';

// Create instance
final iap = FlutterInappPurchase();

// Initialize connection
await iap.initConnection();

// Fetch products
final fetchResult = await iap.fetchProducts(
  ProductRequest(
    skus: ['product_id'],
    type: ProductQueryType.InApp,
  ),
);
final products = fetchResult.inAppProducts();

// Request purchase (builder DSL)
await iap.requestPurchaseWithBuilder(
  build: (builder) {
    builder
      ..type = ProductQueryType.InApp
      ..android.skus = ['product_id']
      ..ios.sku = 'product_id';
  },
);

iOS Notes

  • This plugin uses the OpenIAP Apple native module via CocoaPods (openiap 1.1.9).
  • After upgrading, run pod install in your iOS project (e.g., example/ios).
  • Minimum iOS deployment target is 15.0 for StoreKit 2 support.

🛠️ Development

  • Install dependencies: flutter pub get
  • Run lints: dart analyze
  • Run tests: flutter test
  • Enable Git hooks (recommended): git config core.hooksPath .githooks
    • The pre-commit hook auto-formats staged Dart files and fails if any file remains unformatted. It also runs tests.
    • Tests: runs changed tests first, then full suite (fail-fast).
    • Env toggles:
      • SKIP_PRECOMMIT_TESTS=1 to skip tests
      • PRECOMMIT_TEST_CONCURRENCY=<N> to control concurrency (default 4)
      • PRECOMMIT_FAIL_FAST=0 to disable --fail-fast
      • PRECOMMIT_RUN_ALL_TESTS=0 to only run changed tests
      • ENFORCE_ANALYZE=1 to fail commit on analyzer warnings

Singleton Usage

For global state management or when you need a shared instance:

// Use singleton instance
final iap = FlutterInappPurchase.instance;
await iap.initConnection();

// The instance is shared across your app
final sameIap = FlutterInappPurchase.instance; // Same instance

Sponsors

💼 View Our Sponsors

📄 License

MIT License - see LICENSE file for details.

Libraries

builders
enums
errors
Error types for flutter_inapp_purchase (OpenIAP compliant)
events
extensions/purchase_helpers
flutter_inapp_purchase
helpers
types
utils