Helper blocs for handling in-app-purchase & admob flow.

Getting Started

  1. Config your admob ID

  2. Config your in-app-purchase

  3. Recommends using get_it & injectable for dependencies injection.

    • Refer section Registering third party types for create instances of BLoC & service classes in this package.
    • These Bloc & service need to be singleton (refer @singleton annotation with injectable).
  4. BLoC pattern knowledge, refer library fluter_bloc.

  5. Use fluter_bloc library:

    • Create BlocProvider at application level for this package's blocs.
    • Use BlocBuilder & BlocListener for handling state from these blocs.
  6. If your Android application enable Proguard rule, add these:

        #In app Purchase
        -keep class** {*;}
        -keep class com.dooboolab.** { *; }
        -keep class**
        -keepattributes *Annotation*

Common flow

  1. For Admob:

    • Step 1: Create instances of AdmobConfig & AdmobService & FrequentlyAdsBloc and/or StaticAdsBloc.

    • Step 2: At main() top-level function, initialize MobileAd by inserting this code:

           Future<void> main() async {
             await getIt<AdmobService>().init();
    • Step 3: Assume that SplashPage is your app's first page, then insert these code inside initState():

          Future.delayed(, () {
    • Step 4: Whenever you need to show InterstitialAd, just call:


      (I recommend create a unique _adTag to identify which screen had requested ad unit. This is helpful when handle state with BlocListener.)

  2. For in-app-purchase

    • Step 1: Create instances of IapConfig & IapService & SubscriptionBloc.
    • Step 2: Create PremiumPage which shows UI for premium-feature, contains SKU list / restore purchase option / term & privacy.
    • Step 3:
      • For showing SKU list: Using SubscriptionBloc#FetchListSkuEvent.
      • For request subscription on SKU item: Using SubscriptionBloc#RequestSubscriptionEvent.
      • For request restore purchase: Using SubscriptionBloc#RestoreSubscriptionEvent.
    • Step 4 (Optional): Create instances of FreeUsageCounterBloc to handle user's free usage flow.


This project is a starting point for a Dart package, a library module containing code that can be shared easily across multiple Flutter or Dart projects.

For help getting started with Flutter, view our online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.