All Projects → JackAppDev → Flutter_iap

JackAppDev / Flutter_iap

Licence: mit
Flutter iap plugin

Programming Languages

swift
15916 projects
dart
5743 projects

Projects that are alternatives of or similar to Flutter iap

Google-IAP
Android Library for easing Google Play Billing to your apps with support for Subscriptions, In-App Purchases and Consumables with a beautiful sample app.
Stars: ✭ 129 (+27.72%)
Mutual labels:  purchase, billing
Premiumer
Premiumer makes removing ads with a single in-app purchase on Android as easy as pie.
Stars: ✭ 153 (+51.49%)
Mutual labels:  billing, purchase
In App Purchase
A Node.js module for in-App-Purchase for iOS, Android, Amazon and Windows.
Stars: ✭ 868 (+759.41%)
Mutual labels:  billing, purchase
RxBilling
Rx wrapper for Billing Library with connection management
Stars: ✭ 79 (-21.78%)
Mutual labels:  purchase, billing
Android Checkout
Library for Android In-App Billing (Version 3+)
Stars: ✭ 986 (+876.24%)
Mutual labels:  billing, purchase
Nuxt Netlify
Dynamically generate `_headers` and `_redirects` files for Netlify in your Nuxt.js projects
Stars: ✭ 97 (-3.96%)
Mutual labels:  plugin
Latestversionplugin
LatestVersion Plugin for Xamarin and Windows apps
Stars: ✭ 99 (-1.98%)
Mutual labels:  plugin
Colorfulsidebar
📂 MacForge plugin to add color back to the sidebar icons in Finder on macOS
Stars: ✭ 95 (-5.94%)
Mutual labels:  plugin
Unityionicintegration
A guide to integrating Unity 3D content into an Ionic app and sending messages between them (for Android & iOS)(tested with Vuforia plugin)
Stars: ✭ 94 (-6.93%)
Mutual labels:  plugin
Wordless
All the power of Pug, Sass, Coffeescript and WebPack in your WordPress theme. Stop writing themes like it's 1998.
Stars: ✭ 1,374 (+1260.4%)
Mutual labels:  plugin
Kibana Object Format
A Kibana plugin for displaying objects and arrays of objects.
Stars: ✭ 100 (-0.99%)
Mutual labels:  plugin
33 Live2d Wp
🍟 The live2d poster girl plugin of 33 for WordPress.
Stars: ✭ 99 (-1.98%)
Mutual labels:  plugin
Fork Ts Checker Webpack Plugin
Webpack plugin that runs typescript type checker on a separate process.
Stars: ✭ 1,343 (+1229.7%)
Mutual labels:  plugin
Typescript Eslint
✨ Monorepo for all the tooling which enables ESLint to support TypeScript
Stars: ✭ 10,831 (+10623.76%)
Mutual labels:  plugin
Atom Terminal Panel
Advanced terminal interface for Atom editor
Stars: ✭ 95 (-5.94%)
Mutual labels:  plugin
Pytest Repeat
pytest plugin for repeating test execution
Stars: ✭ 99 (-1.98%)
Mutual labels:  plugin
Paysuper Billing Server
A core monolith-like service with all payment processing business logic in PaySuper.
Stars: ✭ 95 (-5.94%)
Mutual labels:  billing
Dark Mode
Dark Mode for the WordPress dashboard.
Stars: ✭ 98 (-2.97%)
Mutual labels:  plugin
Close Buffers.vim
📖 Quickly close (bdelete) several buffers at once 📕
Stars: ✭ 99 (-1.98%)
Mutual labels:  plugin
Hxd Plugin Framework
Plugin framework for HxD's data inspector
Stars: ✭ 98 (-2.97%)
Mutual labels:  plugin

flutter_iap

Add In-App Payments to your Flutter app with this plugin.

  • You can retrieve a list of previously purchased IAP product IDs (only Android)
  • You can fetch IAP products from Google Play and App Store
  • You can buy an IAP product
  • You can consume a IAP product (only Android)
  • You can restore purchases from App Store (only iOS)

Getting Started

For help getting started with Flutter, view our online documentation.

For help on editing plugin code, view the documentation.

Install

Add flutter_iap as a dependency in pubspec.yaml

For help on adding as a dependency, view the documentation.

Example

Note: You must set up billing information in your developer account corresponding with the platform you are testing (iTunes Connect / Google Play Console)

import 'package:flutter/material.dart';
import 'package:flutter_iap/flutter_iap.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  List<String> _productIds = [];
  List<String> _alreadyPurchased = [];

  @override
  initState() {
    super.initState();
    init();
  }

  init() async {
    // Android testers: You can use "android.test.purchased" to simulate a successful flow.
    List<String> productIds = ["com.example.testiap"];

    IAPResponse products = await FlutterIap.fetchProducts(productIds);
    if (products.status != IAPResponseStatus.ok) {
      print("Products not retrieved, error: ${products.status}");
      return;
    }

    IAPResponse purchased = await FlutterIap.fetchInventory();
    if (purchased.status != IAPResponseStatus.ok) {
      print("Inventory not retrieved, error: ${purchased.status}");
      return;
    }

    productIds = products.products
        .map((IAPProduct product) => product.productIdentifier)
        .toList();

    List<String> purchasedIds = purchased.purchases
        .map((IAPPurchase purchase) => purchase.productIdentifier)
        .toList();

    if (!mounted) return;

    setState(() {
      _productIds = productIds;
      _alreadyPurchased = purchasedIds;
    });
  }

  @override
  Widget build(BuildContext context) {
    String nextPurchase = _productIds.firstWhere(
      (id) => !_alreadyPurchased.contains(id),
      orElse: () => null,
    );

    List<Text> list = [];
    _alreadyPurchased.forEach((productId) {
      list.add(Text(productId));
    });

    if (list.isEmpty) {
      list.add(Text("No previous purchases found."));
    } else {
      list.insert(0, Text("Already purchased:"));
    }

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("flutter_iap example app"),
        ),
        body: Center(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: <Widget>[
              Text(
                _productIds.isNotEmpty
                    ? "Available Products to purchase: $_productIds"
                    : "Not working?\n"
                    "Check that you set up in app purchases in\n"
                    "iTunes Connect / Google Play Console",
                textAlign: TextAlign.center,
                textScaleFactor: 1.25,
              ),
              SizedBox(height: 24.0),
            ].followedBy(list).toList(),
          ),
        ),
        floatingActionButton: nextPurchase != null
            ? FloatingActionButton(
                child: Icon(Icons.monetization_on),
                onPressed: () async {
                  IAPResponse response = await FlutterIap.buy(nextPurchase);
                  if (response.purchases != null) {
                    List<String> purchasedIds = response.purchases
                        .map((IAPPurchase purchase) =>
                            purchase.productIdentifier)
                        .toList();

                    setState(() {
                      _alreadyPurchased = purchasedIds;
                    });
                  }
                },
              )
            : Container(),
      ),
    );
  }
}

Contributing

This project welcomes PRs to fix issues and improve functionality.

To get started, clone the git repository to a local directory (flutter_iap), and run:

$ flutter create --template=plugin --ios-language=swift .

You can then use flutter run as usual in the example directory to get started.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].