Skip to content

[BUG] Restore purchases does not work in_app_purchase  #107454

@under3415

Description

@under3415

Restore purchases does not do anything!

I can buy a product. If I try to buy again I get an error "you already own this item", so the store recognizes that the product was purchased before. But clicking "restore pruchases" after data clean does nothing.

_inAppPurchase.restorePurchases()

This is on Android emulator (Pixel 4 API 32) and real device (Samsung A20)

Steps to Reproduce

  1. Use the code from the package example (I have modified the code below)
  2. Buy a product
  3. Clear app data using Andoid OS
  4. Start the app again and try to restore purchases

Expected results:
Purchases restored or an error displayed

Actual results:
Nothing happens, no error, no store UI, zilch

Below code is flutter team code from the in_app_purchase package example. I have just removed all consumable and subscription stuff. Source: https://github.com/flutter/plugins/blob/main/packages/in_app_purchase/in_app_purchase/example/lib/main.dart
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// ignore_for_file: use_build_context_synchronously, depend_on_referenced_packages

import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:in_app_purchase/in_app_purchase.dart';
import 'package:in_app_purchase_android/billing_client_wrappers.dart';
import 'package:in_app_purchase_android/in_app_purchase_android.dart';
import 'package:in_app_purchase_storekit/in_app_purchase_storekit.dart';
import 'package:in_app_purchase_storekit/store_kit_wrappers.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  runApp(_MyApp());
}

const String _kUpgradeId = 'full_version';
const List<String> _kProductIds = <String>[
  _kUpgradeId,
];

class _MyApp extends StatefulWidget {
  @override
  State<_MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<_MyApp> {
  final InAppPurchase _inAppPurchase = InAppPurchase.instance;
  late StreamSubscription<List<PurchaseDetails>> _subscription;
  List<String> _notFoundIds = <String>[];
  List<ProductDetails> _products = <ProductDetails>[];
  List<PurchaseDetails> _purchases = <PurchaseDetails>[];
  bool _isAvailable = false;
  bool _purchasePending = false;
  bool _loading = true;
  String? _queryProductError;

  @override
  void initState() {
    final Stream<List<PurchaseDetails>> purchaseUpdated =
        _inAppPurchase.purchaseStream;
    _subscription =
        purchaseUpdated.listen((List<PurchaseDetails> purchaseDetailsList) {
      _listenToPurchaseUpdated(purchaseDetailsList);
    }, onDone: () {
      _subscription.cancel();
    }, onError: (Object error) {
      // handle error here.
    });
    initStoreInfo();
    super.initState();
  }

  Future<void> initStoreInfo() async {
    final bool isAvailable = await _inAppPurchase.isAvailable();
    print("store is available: $isAvailable");
    if (!isAvailable) {
      print("store is on available.");
      setState(() {
        _isAvailable = isAvailable;
        _products = <ProductDetails>[];
        _purchases = <PurchaseDetails>[];
        _notFoundIds = <String>[];
        _purchasePending = false;
        _loading = false;
      });
      return;
    }

    final ProductDetailsResponse productDetailResponse =
        await _inAppPurchase.queryProductDetails(_kProductIds.toSet());

    if (productDetailResponse.error != null) {
      print("product query error.");
      setState(() {
        _queryProductError = productDetailResponse.error!.message;
        _isAvailable = isAvailable;
        _products = productDetailResponse.productDetails;
        _purchases = <PurchaseDetails>[];
        _notFoundIds = productDetailResponse.notFoundIDs;
        _purchasePending = false;
        _loading = false;
      });
      return;
    }

    if (productDetailResponse.productDetails.isEmpty) {
      print("product query isEmpty.");
      setState(() {
        _queryProductError = null;
        _isAvailable = isAvailable;
        _products = productDetailResponse.productDetails;
        _purchases = <PurchaseDetails>[];
        _notFoundIds = productDetailResponse.notFoundIDs;
        _purchasePending = false;
        _loading = false;
      });
      return;
    }

    setState(() {
      _isAvailable = isAvailable;
      _products = productDetailResponse.productDetails;
      _notFoundIds = productDetailResponse.notFoundIDs;
      _purchasePending = false;
      _loading = false;
    });
  }

  @override
  void dispose() {
    _subscription.cancel();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    final List<Widget> stack = <Widget>[];
    if (_queryProductError == null) {
      stack.add(
        ListView(
          children: <Widget>[
            _buildConnectionCheckTile(),
            _buildProductList(),
            _buildRestoreButton(),
          ],
        ),
      );
    } else {
      stack.add(Center(
        child: Text(_queryProductError!),
      ));
    }
    if (_purchasePending) {
      stack.add(
        Stack(
          children: const <Widget>[
            Opacity(
              opacity: 0.3,
              child: ModalBarrier(dismissible: false, color: Colors.grey),
            ),
            Center(
              child: CircularProgressIndicator(),
            ),
          ],
        ),
      );
    }

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('IAP Example'),
        ),
        body: Stack(
          children: stack,
        ),
      ),
    );
  }

  Card _buildConnectionCheckTile() {
    if (_loading) {
      return const Card(child: ListTile(title: Text('Trying to connect...')));
    }
    final Widget storeHeader = ListTile(
      leading: Icon(_isAvailable ? Icons.check : Icons.block,
          color: _isAvailable ? Colors.green : ThemeData.light().errorColor),
      title:
          Text('The store is ${_isAvailable ? 'available' : 'unavailable'}.'),
    );
    final List<Widget> children = <Widget>[storeHeader];

    if (!_isAvailable) {
      children.addAll(<Widget>[
        const Divider(),
        ListTile(
          title: Text('Not connected',
              style: TextStyle(color: ThemeData.light().errorColor)),
          subtitle: const Text(
              'Unable to connect to the payments processor. Has this app been configured correctly? See the example README for instructions.'),
        ),
      ]);
    }
    return Card(child: Column(children: children));
  }

  Card _buildProductList() {
    if (_loading) {
      return const Card(
          child: ListTile(
              leading: CircularProgressIndicator(),
              title: Text('Fetching products...')));
    }
    if (!_isAvailable) {
      return const Card();
    }
    const ListTile productHeader = ListTile(title: Text('Products for Sale'));
    final List<ListTile> productList = <ListTile>[];
    if (_notFoundIds.isNotEmpty) {
      productList.add(ListTile(
          title: Text('[${_notFoundIds.join(", ")}] not found',
              style: TextStyle(color: ThemeData.light().errorColor)),
          subtitle: const Text(
              'This app needs special configuration to run. Please see example/README.md for instructions.')));
    }

    // This loading previous purchases code is just a demo. Please do not use this as it is.
    // In your app you should always verify the purchase data using the `verificationData` inside the [PurchaseDetails] object before trusting it.
    // We recommend that you use your own server to verify the purchase data.
    final Map<String, PurchaseDetails> purchases =
        Map<String, PurchaseDetails>.fromEntries(
            _purchases.map((PurchaseDetails purchase) {
      if (purchase.pendingCompletePurchase) {
        _inAppPurchase.completePurchase(purchase);
      }
      return MapEntry<String, PurchaseDetails>(purchase.productID, purchase);
    }));
    productList.addAll(_products.map(
      (ProductDetails productDetails) {
        final PurchaseDetails? previousPurchase = purchases[productDetails.id];
        return ListTile(
          title: Text(
            productDetails.title,
          ),
          subtitle: Text(
            productDetails.description,
          ),
          trailing: previousPurchase != null
              ? IconButton(
                  onPressed: () => confirmPriceChange(context),
                  icon: const Icon(Icons.upgrade))
              : TextButton(
                  style: TextButton.styleFrom(
                    backgroundColor: Colors.green[800],
                    primary: Colors.white,
                  ),
                  onPressed: () {
                    late PurchaseParam purchaseParam;
                    purchaseParam = GooglePlayPurchaseParam(
                        productDetails: productDetails,
                        applicationUserName: null,
                        changeSubscriptionParam: null);

                    _inAppPurchase.buyNonConsumable(
                        purchaseParam: purchaseParam);
                  },
                  child: Text(productDetails.price),
                ),
        );
      },
    ));

    return Card(
        child: Column(
            children: <Widget>[productHeader, const Divider()] + productList));
  }

  Widget _buildRestoreButton() {
    if (_loading) {
      return Container();
    }

    return Padding(
      padding: const EdgeInsets.all(4.0),
      child: Row(
        mainAxisSize: MainAxisSize.max,
        mainAxisAlignment: MainAxisAlignment.end,
        children: <Widget>[
          TextButton(
            style: TextButton.styleFrom(
              backgroundColor: Theme.of(context).primaryColor,
              primary: Colors.white,
            ),
            onPressed: () => _inAppPurchase.restorePurchases(),
            child: const Text('Restore purchases'),
          ),
        ],
      ),
    );
  }

  void showPendingUI() {
    setState(() {
      _purchasePending = true;
    });
  }

  Future<void> deliverProduct(PurchaseDetails purchaseDetails) async {
    // IMPORTANT!! Always verify purchase details before delivering the product.

    setState(() {
      _purchases.add(purchaseDetails);
      _purchasePending = false;
    });
  }

  void handleError(IAPError error) {
    setState(() {
      _purchasePending = false;
    });
  }

  Future<bool> _verifyPurchase(PurchaseDetails purchaseDetails) {
    // IMPORTANT!! Always verify a purchase before delivering the product.
    // For the purpose of an example, we directly return true.
    return Future<bool>.value(true);
  }

  void _handleInvalidPurchase(PurchaseDetails purchaseDetails) {
    // handle invalid purchase here if  _verifyPurchase` failed.
  }

  Future<void> _listenToPurchaseUpdated(
      List<PurchaseDetails> purchaseDetailsList) async {
    for (final PurchaseDetails purchaseDetails in purchaseDetailsList) {
      if (purchaseDetails.status == PurchaseStatus.pending) {
        showPendingUI();
      } else {
        if (purchaseDetails.status == PurchaseStatus.error) {
          handleError(purchaseDetails.error!);
        } else if (purchaseDetails.status == PurchaseStatus.purchased ||
            purchaseDetails.status == PurchaseStatus.restored) {
          final bool valid = await _verifyPurchase(purchaseDetails);
          if (valid) {
            deliverProduct(purchaseDetails);
          } else {
            _handleInvalidPurchase(purchaseDetails);
            return;
          }
        }

        if (purchaseDetails.pendingCompletePurchase) {
          await _inAppPurchase.completePurchase(purchaseDetails);
        }
      }
    }
  }

  Future<void> confirmPriceChange(BuildContext context) async {
    if (Platform.isAndroid) {
      final InAppPurchaseAndroidPlatformAddition androidAddition =
          _inAppPurchase
              .getPlatformAddition<InAppPurchaseAndroidPlatformAddition>();
      final BillingResultWrapper priceChangeConfirmationResult =
          await androidAddition.launchPriceChangeConfirmationFlow(
        sku: 'purchaseId',
      );
      if (priceChangeConfirmationResult.responseCode == BillingResponse.ok) {
        ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
          content: Text('Price change accepted'),
        ));
      } else {
        ScaffoldMessenger.of(context).showSnackBar(SnackBar(
          content: Text(
            priceChangeConfirmationResult.debugMessage ??
                'Price change failed with code ${priceChangeConfirmationResult.responseCode}',
          ),
        ));
      }
    }
    if (Platform.isIOS) {
      final InAppPurchaseStoreKitPlatformAddition iapStoreKitPlatformAddition =
          _inAppPurchase
              .getPlatformAddition<InAppPurchaseStoreKitPlatformAddition>();
      await iapStoreKitPlatformAddition.showPriceConsentIfNeeded();
    }
  }
}

/// Example implementation of the
/// [`SKPaymentQueueDelegate`](https://developer.apple.com/documentation/storekit/skpaymentqueuedelegate?language=objc).
///
/// The payment queue delegate can be implementated to provide information
/// needed to complete transactions.
class ExamplePaymentQueueDelegate implements SKPaymentQueueDelegateWrapper {
  @override
  bool shouldContinueTransaction(
      SKPaymentTransactionWrapper transaction, SKStorefrontWrapper storefront) {
    return true;
  }

  @override
  bool shouldShowPriceConsent() {
    return false;
  }
}

Logs
C:\src\Projects\bug>flutter run --verbose 
[ +148 ms] executing: [C:\src\flutter/] git -c log.showSignature=false log -n 1 --pretty=format:%H
[ +904 ms] Exit code 0 from: git -c log.showSignature=false log -n 1 --pretty=format:%H
[   +1 ms] 85684f9300908116a78138ea4c6036c35c9a1236
[   +1 ms] executing: [C:\src\flutter/] git tag --points-at 85684f9300908116a78138ea4c6036c35c9a1236
[ +202 ms] Exit code 0 from: git tag --points-at 85684f9300908116a78138ea4c6036c35c9a1236
[   +1 ms] 3.0.4
[  +20 ms] executing: [C:\src\flutter/] git rev-parse --abbrev-ref --symbolic @{u}
[ +177 ms] Exit code 0 from: git rev-parse --abbrev-ref --symbolic @{u}
[        ] origin/stable
[        ] executing: [C:\src\flutter/] git ls-remote --get-url origin
[  +87 ms] Exit code 0 from: git ls-remote --get-url origin
[        ] https://github.com/flutter/flutter.git
[ +243 ms] executing: [C:\src\flutter/] git rev-parse --abbrev-ref HEAD
[ +109 ms] Exit code 0 from: git rev-parse --abbrev-ref HEAD
[   +1 ms] stable
[ +184 ms] Artifact Instance of 'AndroidGenSnapshotArtifacts' is not required, skipping update.
[   +1 ms] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update.
[   +1 ms] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update.
[  +11 ms] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'WindowsUwpEngineArtifacts' is not required, skipping update.
[   +1 ms] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update.
[   +4 ms] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update.
[   +1 ms] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update.
[   +6 ms] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update.
[   +1 ms] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update.
[ +140 ms] executing: C:\Users\AppData\Local\Android\sdk\platform-tools\adb.exe devices -l
[ +255 ms] List of devices attached
                    emulator-5554          device product:sdk_gphone64_x86_64 model:sdk_gphone64_x86_64 device:emulator64_x86_64_arm64 transport_id:1
[  +17 ms] C:\Users\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 shell getprop
[ +404 ms] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update.
[   +1 ms] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update.
[  +17 ms] Artifact Instance of 'WindowsUwpEngineArtifacts' is not required, skipping update.
[   +1 ms] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update.
[   +1 ms] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update.
[   +5 ms] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update.
[ +319 ms] Skipping pub get: version match.
[  +71 ms] Found plugin in_app_purchase at C:\src\flutter\.pub-cache\hosted\pub.dartlang.org\in_app_purchase-3.0.6\
[   +8 ms] Found plugin in_app_purchase_android at C:\src\flutter\.pub-cache\hosted\pub.dartlang.org\in_app_purchase_android-0.2.3\
[   +6 ms] Found plugin in_app_purchase_storekit at C:\src\flutter\.pub-cache\hosted\pub.dartlang.org\in_app_purchase_storekit-0.3.1\
[ +118 ms] Found plugin in_app_purchase at C:\src\flutter\.pub-cache\hosted\pub.dartlang.org\in_app_purchase-3.0.6\
[   +4 ms] Found plugin in_app_purchase_android at C:\src\flutter\.pub-cache\hosted\pub.dartlang.org\in_app_purchase_android-0.2.3\
[   +7 ms] Found plugin in_app_purchase_storekit at C:\src\flutter\.pub-cache\hosted\pub.dartlang.org\in_app_purchase_storekit-0.3.1\
[  +78 ms] Generating C:\src\Projects\bug\android\app\src\main\java\io\flutter\plugins\GeneratedPluginRegistrant.java
[ +182 ms] ro.hardware = ranchu
[  +39 ms] Using hardware rendering with device sdk gphone64 x86 64. If you notice graphics artifacts, consider enabling software rendering with "--enable-software-rendering".
[  +74 ms] Initializing file store
[  +38 ms] Skipping target: gen_localizations
[   +9 ms] gen_dart_plugin_registrant: Starting due to {InvalidatedReasonKind.inputChanged: The following inputs have updated contents: C:\src\Projects\bug\.dart_tool\package_config_subset}
[  +47 ms] Found plugin in_app_purchase at C:\src\flutter\.pub-cache\hosted\pub.dartlang.org\in_app_purchase-3.0.6\
[   +9 ms] Found plugin in_app_purchase_android at C:\src\flutter\.pub-cache\hosted\pub.dartlang.org\in_app_purchase_android-0.2.3\
[   +4 ms] Found plugin in_app_purchase_storekit at C:\src\flutter\.pub-cache\hosted\pub.dartlang.org\in_app_purchase_storekit-0.3.1\
[  +38 ms] gen_dart_plugin_registrant: Complete
[   +7 ms] Skipping target: _composite
[  +13 ms] complete
[  +15 ms] Launching lib\main.dart on sdk gphone64 x86 64 in debug mode...
[  +11 ms] C:\src\flutter\bin\cache\dart-sdk\bin\dart.exe --disable-dart-dev C:\src\flutter\bin\cache\dart-sdk\bin\snapshots\frontend_server.dart.snapshot --sdk-root
C:\src\flutter\bin\cache\artifacts\engine\common\flutter_patched_sdk/ --incremental --target=flutter --debugger-module-names --experimental-emit-debug-metadata -DFLUTTER_WEB_AUTO_DETECT=true --output-dill
C:\Users\AppData\Local\Temp\flutter_tools.4382684f\flutter_tool.79e50f6a\app.dill --packages C:\src\Projects\bug\.dart_tool\package_config.json -Ddart.vm.profile=false -Ddart.vm.product=false
--enable-asserts --track-widget-creation --filesystem-scheme org-dartlang-root --initialize-from-dill build\c075001b96339384a97db4862b8ab8db.cache.dill.track.dill
--enable-experiment=alternative-invalidation-strategy
[  +33 ms] executing: C:\Users\AppData\Local\Android\sdk\build-tools\32.1.0-rc1\aapt dump xmltree C:\src\Projects\bug\build\app\outputs\flutter-apk\app.apk AndroidManifest.xml
[  +70 ms] Exit code 0 from: C:\Users\AppData\Local\Android\sdk\build-tools\32.1.0-rc1\aapt dump xmltree C:\src\Projects\bug\build\app\outputs\flutter-apk\app.apk AndroidManifest.xml
[        ] N: android=http://schemas.android.com/apk/res/android
             E: manifest (line=2)
               A: android:versionCode(0x0101021b)=(type 0x10)0x1
               A: android:versionName(0x0101021c)="1.0.0" (Raw: "1.0.0")
               A: android:compileSdkVersion(0x01010572)=(type 0x10)0x1f
               A: android:compileSdkVersionCodename(0x01010573)="12" (Raw: "12")
               A: package="com.example.bug" (Raw: "com.example.bug")
               A: platformBuildVersionCode=(type 0x10)0x1f
               A: platformBuildVersionName=(type 0x10)0xc
               E: uses-sdk (line=7)
                 A: android:minSdkVersion(0x0101020c)=(type 0x10)0x1d
                 A: android:targetSdkVersion(0x01010270)=(type 0x10)0x1f
               E: uses-permission (line=15)
                 A: android:name(0x01010003)="android.permission.INTERNET" (Raw: "android.permission.INTERNET")
               E: uses-permission (line=16)
                 A: android:name(0x01010003)="android.permission.WAKE_LOCK" (Raw: "android.permission.WAKE_LOCK")
               E: uses-permission (line=17)
                 A: android:name(0x01010003)="android.permission.ACCESS_NETWORK_STATE" (Raw: "android.permission.ACCESS_NETWORK_STATE")
               E: uses-permission (line=18)
                 A: android:name(0x01010003)="android.permission.RECEIVE_BOOT_COMPLETED" (Raw: "android.permission.RECEIVE_BOOT_COMPLETED")
               E: uses-permission (line=19)
                 A: android:name(0x01010003)="android.permission.FOREGROUND_SERVICE" (Raw: "android.permission.FOREGROUND_SERVICE")
               E: uses-permission (line=20)
                 A: android:name(0x01010003)="com.android.vending.BILLING" (Raw: "com.android.vending.BILLING")
               E: application (line=22)
                 A: android:label(0x01010001)="bug" (Raw: "bug")
                 A: android:icon(0x01010002)=@0x7f090000
                 A: android:name(0x01010003)="android.app.Application" (Raw: "android.app.Application")
                 A: android:debuggable(0x0101000f)=(type 0x12)0xffffffff
                 A: android:extractNativeLibs(0x010104ea)=(type 0x12)0x0
                 A: android:appComponentFactory(0x0101057a)="androidx.core.app.CoreComponentFactory" (Raw: "androidx.core.app.CoreComponentFactory")
                 E: activity (line=29)
                   A: android:theme(0x01010000)=@0x7f0b0000
                   A: android:name(0x01010003)="com.example.bug.MainActivity" (Raw: "com.example.bug.MainActivity")
                   A: android:exported(0x01010010)=(type 0x12)0xffffffff
                   A: android:launchMode(0x0101001d)=(type 0x10)0x1
                   A: android:configChanges(0x0101001f)=(type 0x11)0x40003fb4
                   A: android:windowSoftInputMode(0x0101022b)=(type 0x11)0x10
                   A: android:hardwareAccelerated(0x010102d3)=(type 0x12)0xffffffff
                   E: meta-data (line=44)
                     A: android:name(0x01010003)="io.flutter.embedding.android.NormalTheme" (Raw: "io.flutter.embedding.android.NormalTheme")
                     A: android:resource(0x01010025)=@0x7f0b0001
                   E: intent-filter (line=48)
                     E: action (line=49)
                       A: android:name(0x01010003)="android.intent.action.MAIN" (Raw: "android.intent.action.MAIN")
                     E: category (line=51)
                       A: android:name(0x01010003)="android.intent.category.LAUNCHER" (Raw: "android.intent.category.LAUNCHER")
                 E: meta-data (line=58)
                   A: android:name(0x01010003)="flutterEmbedding" (Raw: "flutterEmbedding")
                   A: android:value(0x01010024)=(type 0x10)0x2
                 E: uses-library (line=62)
                   A: android:name(0x01010003)="androidx.window.extensions" (Raw: "androidx.window.extensions")
                   A: android:required(0x0101028e)=(type 0x12)0x0
                 E: uses-library (line=65)
                   A: android:name(0x01010003)="androidx.window.sidecar" (Raw: "androidx.window.sidecar")
                   A: android:required(0x0101028e)=(type 0x12)0x0
                 E: provider (line=69)
                   A: android:name(0x01010003)="androidx.startup.InitializationProvider" (Raw: "androidx.startup.InitializationProvider")
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:authorities(0x01010018)="com.example.bug.androidx-startup" (Raw: "com.example.bug.androidx-startup")
                   E: meta-data (line=73)
                     A: android:name(0x01010003)="androidx.work.WorkManagerInitializer" (Raw: "androidx.work.WorkManagerInitializer")
                     A: android:value(0x01010024)="androidx.startup" (Raw: "androidx.startup")
                 E: service (line=78)
                   A: android:name(0x01010003)="androidx.work.impl.background.systemalarm.SystemAlarmService" (Raw: "androidx.work.impl.background.systemalarm.SystemAlarmService")
                   A: android:enabled(0x0101000e)=@0x7f020000
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                 E: service (line=83)
                   A: android:name(0x01010003)="androidx.work.impl.background.systemjob.SystemJobService" (Raw: "androidx.work.impl.background.systemjob.SystemJobService")
                   A: android:permission(0x01010006)="android.permission.BIND_JOB_SERVICE" (Raw: "android.permission.BIND_JOB_SERVICE")
                   A: android:enabled(0x0101000e)=@0x7f020002
                   A: android:exported(0x01010010)=(type 0x12)0xffffffff
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                 E: service (line=89)
                   A: android:name(0x01010003)="androidx.work.impl.foreground.SystemForegroundService" (Raw: "androidx.work.impl.foreground.SystemForegroundService")
                   A: android:enabled(0x0101000e)=@0x7f020001
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                 E: receiver (line=95)
                   A: android:name(0x01010003)="androidx.work.impl.utils.ForceStopRunnable$BroadcastReceiver" (Raw: "androidx.work.impl.utils.ForceStopRunnable$BroadcastReceiver")
                   A: android:enabled(0x0101000e)=(type 0x12)0xffffffff
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                 E: receiver (line=100)
                   A: android:name(0x01010003)="androidx.work.impl.background.systemalarm.ConstraintProxy$BatteryChargingProxy" (Raw:
                   "androidx.work.impl.background.systemalarm.ConstraintProxy$BatteryChargingProxy")
                   A: android:enabled(0x0101000e)=(type 0x12)0x0
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                   E: intent-filter (line=105)
                     E: action (line=106)
                       A: android:name(0x01010003)="android.intent.action.ACTION_POWER_CONNECTED" (Raw: "android.intent.action.ACTION_POWER_CONNECTED")
                     E: action (line=107)
                       A: android:name(0x01010003)="android.intent.action.ACTION_POWER_DISCONNECTED" (Raw: "android.intent.action.ACTION_POWER_DISCONNECTED")
                 E: receiver (line=110)
                   A: android:name(0x01010003)="androidx.work.impl.background.systemalarm.ConstraintProxy$BatteryNotLowProxy" (Raw: "androidx.work.impl.background.systemalarm.ConstraintProxy$BatteryNotLowProxy")  
                   A: android:enabled(0x0101000e)=(type 0x12)0x0
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                   E: intent-filter (line=115)
                     E: action (line=116)
                       A: android:name(0x01010003)="android.intent.action.BATTERY_OKAY" (Raw: "android.intent.action.BATTERY_OKAY")
                     E: action (line=117)
                       A: android:name(0x01010003)="android.intent.action.BATTERY_LOW" (Raw: "android.intent.action.BATTERY_LOW")
                 E: receiver (line=120)
                   A: android:name(0x01010003)="androidx.work.impl.background.systemalarm.ConstraintProxy$StorageNotLowProxy" (Raw: "androidx.work.impl.background.systemalarm.ConstraintProxy$StorageNotLowProxy")  
                   A: android:enabled(0x0101000e)=(type 0x12)0x0
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                   E: intent-filter (line=125)
                     E: action (line=126)
                       A: android:name(0x01010003)="android.intent.action.DEVICE_STORAGE_LOW" (Raw: "android.intent.action.DEVICE_STORAGE_LOW")
                     E: action (line=127)
                       A: android:name(0x01010003)="android.intent.action.DEVICE_STORAGE_OK" (Raw: "android.intent.action.DEVICE_STORAGE_OK")
                 E: receiver (line=130)
                   A: android:name(0x01010003)="androidx.work.impl.background.systemalarm.ConstraintProxy$NetworkStateProxy" (Raw: "androidx.work.impl.background.systemalarm.ConstraintProxy$NetworkStateProxy")    
                   A: android:enabled(0x0101000e)=(type 0x12)0x0
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                   E: intent-filter (line=135)
                     E: action (line=136)
                       A: android:name(0x01010003)="android.net.conn.CONNECTIVITY_CHANGE" (Raw: "android.net.conn.CONNECTIVITY_CHANGE")
                 E: receiver (line=139)
                   A: android:name(0x01010003)="androidx.work.impl.background.systemalarm.RescheduleReceiver" (Raw: "androidx.work.impl.background.systemalarm.RescheduleReceiver")
                   A: android:enabled(0x0101000e)=(type 0x12)0x0
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                   E: intent-filter (line=144)
                     E: action (line=145)
                       A: android:name(0x01010003)="android.intent.action.BOOT_COMPLETED" (Raw: "android.intent.action.BOOT_COMPLETED")
                     E: action (line=146)
                       A: android:name(0x01010003)="android.intent.action.TIME_SET" (Raw: "android.intent.action.TIME_SET")
                     E: action (line=147)
                       A: android:name(0x01010003)="android.intent.action.TIMEZONE_CHANGED" (Raw: "android.intent.action.TIMEZONE_CHANGED")
                 E: receiver (line=150)
                   A: android:name(0x01010003)="androidx.work.impl.background.systemalarm.ConstraintProxyUpdateReceiver" (Raw: "androidx.work.impl.background.systemalarm.ConstraintProxyUpdateReceiver")
                   A: android:enabled(0x0101000e)=@0x7f020000
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                   E: intent-filter (line=155)
                     E: action (line=156)
                       A: android:name(0x01010003)="androidx.work.impl.background.systemalarm.UpdateProxies" (Raw: "androidx.work.impl.background.systemalarm.UpdateProxies")
                 E: receiver (line=159)
                   A: android:name(0x01010003)="androidx.work.impl.diagnostics.DiagnosticsReceiver" (Raw: "androidx.work.impl.diagnostics.DiagnosticsReceiver")
                   A: android:permission(0x01010006)="android.permission.DUMP" (Raw: "android.permission.DUMP")
                   A: android:enabled(0x0101000e)=(type 0x12)0xffffffff
                   A: android:exported(0x01010010)=(type 0x12)0xffffffff
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                   E: intent-filter (line=165)
                     E: action (line=166)
                       A: android:name(0x01010003)="androidx.work.diagnostics.REQUEST_DIAGNOSTICS" (Raw: "androidx.work.diagnostics.REQUEST_DIAGNOSTICS")
                 E: service (line=170)
                   A: android:name(0x01010003)="androidx.room.MultiInstanceInvalidationService" (Raw: "androidx.room.MultiInstanceInvalidationService")
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:directBootAware(0x01010505)=(type 0x12)0xffffffff
                 E: meta-data (line=175)
                   A: android:name(0x01010003)="com.google.android.play.billingclient.version" (Raw: "com.google.android.play.billingclient.version")
                   A: android:value(0x01010024)="5.0.0" (Raw: "5.0.0")
                 E: activity (line=179)
                   A: android:theme(0x01010000)=@0x01030010
                   A: android:name(0x01010003)="com.android.billingclient.api.ProxyBillingActivity" (Raw: "com.android.billingclient.api.ProxyBillingActivity")
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:configChanges(0x0101001f)=(type 0x11)0x5b0
[  +46 ms] executing: C:\Users\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 shell -x logcat -v time -t 1
[  +43 ms] <- compile package:bug/main.dart
[ +539 ms] --------- beginning of main
                    07-12 20:50:31.421 D/WifiNative(  529): Scan result ready event
[  +42 ms] executing: C:\Users\AppData\Local\Android\sdk\platform-tools\adb.exe version
[ +299 ms] Android Debug Bridge version 1.0.41
                    Version 33.0.2-8557947
                    Installed as C:\Users\AppData\Local\Android\sdk\platform-tools\adb.exe
[   +7 ms] executing: C:\Users\AppData\Local\Android\sdk\platform-tools\adb.exe start-server
[ +267 ms] Building APK
[  +44 ms] Running Gradle task 'assembleDebug'...
[  +45 ms] Using gradle from C:\src\Projects\bug\android\gradlew.bat.
[  +73 ms] executing: C:\Program Files\Android\Android Studio\jre\bin\java -version
[ +312 ms] Exit code 0 from: C:\Program Files\Android\Android Studio\jre\bin\java -version
[        ] openjdk version "11.0.12" 2021-07-20
           OpenJDK Runtime Environment (build 11.0.12+7-b1504.28-7817840)
           OpenJDK 64-Bit Server VM (build 11.0.12+7-b1504.28-7817840, mixed mode)
[   +4 ms] executing: [C:\src\Projects\bug\android/] C:\src\Projects\bug\android\gradlew.bat -Pverbose=true -Ptarget-platform=android-x64 -Ptarget=C:\src\Projects\bug\lib\main.dart
-Pbase-application-name=android.app.Application -Pdart-defines=RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ== -Pdart-obfuscation=false -Ptrack-widget-creation=true -Ptree-shake-icons=false
-Pfilesystem-scheme=org-dartlang-root assembleDebug
[+3194 ms] ../../flutter/.pub-cache/hosted/pub.dartlang.org/in_app_purchase_android-0.2.3/lib/src/billing_client_wrappers/purchase_wrapper.g.dart:16:27: Warning: Operand of null-aware operation '?.' has type
'List<dynamic>' which excludes null.
[   +8 ms]  - 'List' is from 'dart:core'.
[ +171 ms]           ? (json['skus'] as List)?.map((item) => item as String)?.toList() ??
[ +143 ms]                           ^
[ +132 ms] ../../flutter/.pub-cache/hosted/pub.dartlang.org/in_app_purchase_android-0.2.3/lib/src/billing_client_wrappers/purchase_wrapper.g.dart:35:27: Warning: Operand of null-aware operation '?.' has type
'List<dynamic>' which excludes null.
[  +59 ms]  - 'List' is from 'dart:core'.
[   +2 ms]           ? (json['skus'] as List)?.map((item) => item as String)?.toList() ??
[   +1 ms]                           ^
[ +695 ms] > Task :app:preBuild UP-TO-DATE
[  +58 ms] > Task :app:preDebugBuild UP-TO-DATE
[  +51 ms] > Task :app:mergeDebugNativeDebugMetadata NO-SOURCE
[  +45 ms] > Task :app:compileFlutterBuildDebug UP-TO-DATE
[  +14 ms] > Task :app:packLibsflutterBuildDebug UP-TO-DATE
[        ] > Task :in_app_purchase_android:preBuild UP-TO-DATE
[   +4 ms] > Task :in_app_purchase_android:preDebugBuild UP-TO-DATE
[   +3 ms] > Task :in_app_purchase_android:compileDebugAidl NO-SOURCE
[   +7 ms] > Task :app:compileDebugAidl NO-SOURCE
[ +101 ms] > Task :in_app_purchase_android:packageDebugRenderscript NO-SOURCE
[ +348 ms] > Task :app:compileDebugRenderscript NO-SOURCE
[  +10 ms] > Task :app:generateDebugBuildConfig UP-TO-DATE
[  +67 ms] > Task :in_app_purchase_android:writeDebugAarMetadata UP-TO-DATE
[  +55 ms] > Task :app:checkDebugAarMetadata UP-TO-DATE
[  +22 ms] > Task :app:cleanMergeDebugAssets
[  +48 ms] > Task :app:mergeDebugShaders UP-TO-DATE
[  +47 ms] > Task :app:compileDebugShaders NO-SOURCE
[  +32 ms] > Task :app:generateDebugAssets UP-TO-DATE
[  +50 ms] > Task :in_app_purchase_android:mergeDebugShaders UP-TO-DATE
[  +40 ms] > Task :in_app_purchase_android:compileDebugShaders NO-SOURCE
[   +6 ms] > Task :in_app_purchase_android:generateDebugAssets UP-TO-DATE
[   +2 ms] > Task :in_app_purchase_android:packageDebugAssets UP-TO-DATE
[  +16 ms] > Task :app:mergeDebugAssets
[ +358 ms] > Task :app:copyFlutterAssetsDebug
[   +2 ms] > Task :app:generateDebugResValues UP-TO-DATE
[  +10 ms] > Task :app:generateDebugResources UP-TO-DATE
[  +16 ms] > Task :in_app_purchase_android:compileDebugRenderscript NO-SOURCE
[   +6 ms] > Task :in_app_purchase_android:generateDebugResValues UP-TO-DATE
[   +5 ms] > Task :in_app_purchase_android:generateDebugResources UP-TO-DATE
[  +12 ms] > Task :in_app_purchase_android:packageDebugResources UP-TO-DATE
[ +120 ms] > Task :app:mergeDebugResources UP-TO-DATE
[  +69 ms] > Task :app:createDebugCompatibleScreenManifests UP-TO-DATE
[  +25 ms] > Task :app:extractDeepLinksDebug UP-TO-DATE
[  +18 ms] > Task :in_app_purchase_android:extractDeepLinksDebug UP-TO-DATE
[ +148 ms] > Task :in_app_purchase_android:processDebugManifest UP-TO-DATE
[ +546 ms] > Task :app:processDebugMainManifest UP-TO-DATE
[ +461 ms] > Task :app:processDebugManifest UP-TO-DATE
[   +3 ms] > Task :app:processDebugManifestForPackage UP-TO-DATE
[   +1 ms] > Task :in_app_purchase_android:compileDebugLibraryResources UP-TO-DATE
[   +3 ms] > Task :in_app_purchase_android:parseDebugLocalResources UP-TO-DATE
[  +29 ms] > Task :in_app_purchase_android:generateDebugRFile UP-TO-DATE
[  +57 ms] > Task :app:processDebugResources UP-TO-DATE
[  +10 ms] > Task :in_app_purchase_android:generateDebugBuildConfig UP-TO-DATE
[  +19 ms] > Task :in_app_purchase_android:javaPreCompileDebug UP-TO-DATE
[  +10 ms] > Task :in_app_purchase_android:compileDebugJavaWithJavac UP-TO-DATE
[   +4 ms] > Task :in_app_purchase_android:bundleLibCompileToJarDebug UP-TO-DATE
[   +2 ms] > Task :app:compileDebugKotlin UP-TO-DATE
[   +2 ms] > Task :app:javaPreCompileDebug UP-TO-DATE
[  +17 ms] > Task :app:compileDebugJavaWithJavac UP-TO-DATE
[   +5 ms] > Task :app:processDebugJavaRes NO-SOURCE
[ +106 ms] > Task :in_app_purchase_android:processDebugJavaRes NO-SOURCE
[   +3 ms] > Task :in_app_purchase_android:bundleLibResDebug NO-SOURCE
[   +2 ms] > Task :app:mergeDebugJavaResource UP-TO-DATE
[   +2 ms] > Task :app:checkDebugDuplicateClasses UP-TO-DATE
[   +3 ms] > Task :app:desugarDebugFileDependencies UP-TO-DATE
[  +24 ms] > Task :app:mergeExtDexDebug UP-TO-DATE
[  +21 ms] > Task :in_app_purchase_android:bundleLibRuntimeToDirDebug UP-TO-DATE
[   +2 ms] > Task :app:dexBuilderDebug UP-TO-DATE
[   +2 ms] > Task :app:mergeLibDexDebug UP-TO-DATE
[   +2 ms] > Task :app:mergeProjectDexDebug UP-TO-DATE
[   +5 ms] > Task :app:mergeDebugJniLibFolders UP-TO-DATE
[   +3 ms] > Task :in_app_purchase_android:mergeDebugJniLibFolders UP-TO-DATE
[   +2 ms] > Task :in_app_purchase_android:mergeDebugNativeLibs NO-SOURCE
[  +10 ms] > Task :in_app_purchase_android:copyDebugJniLibsProjectOnly UP-TO-DATE
[   +2 ms] > Task :app:mergeDebugNativeLibs UP-TO-DATE
[   +3 ms] > Task :app:stripDebugDebugSymbols UP-TO-DATE
[  +11 ms] > Task :app:validateSigningDebug UP-TO-DATE
[   +3 ms] > Task :app:writeDebugAppMetadata UP-TO-DATE
[   +5 ms] > Task :app:writeDebugSigningConfigVersions UP-TO-DATE
[  +17 ms] > Task :in_app_purchase_android:stripDebugDebugSymbols NO-SOURCE
[   +4 ms] > Task :in_app_purchase_android:copyDebugJniLibsProjectAndLocalJars UP-TO-DATE
[   +7 ms] > Task :in_app_purchase_android:extractDebugAnnotations UP-TO-DATE
[   +3 ms] > Task :in_app_purchase_android:mergeDebugGeneratedProguardFiles UP-TO-DATE
[   +1 ms] > Task :in_app_purchase_android:mergeDebugConsumerProguardFiles UP-TO-DATE
[   +4 ms] > Task :in_app_purchase_android:prepareDebugArtProfile UP-TO-DATE
[   +2 ms] > Task :in_app_purchase_android:prepareLintJarForPublish UP-TO-DATE
[   +2 ms] > Task :in_app_purchase_android:mergeDebugJavaResource UP-TO-DATE
[  +35 ms] > Task :in_app_purchase_android:syncDebugLibJars UP-TO-DATE
[  +10 ms] > Task :in_app_purchase_android:bundleDebugAar UP-TO-DATE
[   +2 ms] > Task :in_app_purchase_android:assembleDebug UP-TO-DATE
[ +564 ms] > Task :app:compressDebugAssets
[   +1 ms] Execution optimizations have been disabled for task ':app:compressDebugAssets' to ensure correctness due to the following reasons:
[   +1 ms]   - Gradle detected a problem with the following location: 'C:\src\Projects\bug\build\app\intermediates\assets\debug\mergeDebugAssets'. Reason: Task ':app:compressDebugAssets' uses this output of task  
':app:copyFlutterAssetsDebug' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed. Please refer to
https://docs.gradle.org/7.4/userguide/validation_problems.html#implicit_dependency for more details about this problem.
[ +106 ms] > Task :app:packageDebug UP-TO-DATE
[   +1 ms] > Task :app:createDebugApkListingFileRedirect UP-TO-DATE
[ +601 ms] > Task :app:assembleDebug
[   +2 ms] Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
[   +2 ms] You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
[   +2 ms] See https://docs.gradle.org/7.4/userguide/command_line_interface.html#sec:command_line_warnings
[   +1 ms] Execution optimizations have been disabled for 1 invalid unit(s) of work during this build to ensure correctness.
[   +3 ms] Please consult deprecation warnings for more details.
[   +3 ms] BUILD SUCCESSFUL in 8s
[   +4 ms] 62 actionable tasks: 5 executed, 57 up-to-date
[ +602 ms] Running Gradle task 'assembleDebug'... (completed in 10.1s)
[ +499 ms] calculateSha: LocalDirectory: 'C:\src\Projects\bug\build\app\outputs\flutter-apk'/app.apk
[+1621 ms] √  Built build\app\outputs\flutter-apk\app-debug.apk.
[   +9 ms] executing: C:\Users\AppData\Local\Android\sdk\build-tools\32.1.0-rc1\aapt dump xmltree C:\src\Projects\bug\build\app\outputs\flutter-apk\app.apk AndroidManifest.xml
[ +109 ms] Exit code 0 from: C:\Users\AppData\Local\Android\sdk\build-tools\32.1.0-rc1\aapt dump xmltree C:\src\Projects\bug\build\app\outputs\flutter-apk\app.apk AndroidManifest.xml
[   +1 ms] N: android=http://schemas.android.com/apk/res/android
             E: manifest (line=2)
               A: android:versionCode(0x0101021b)=(type 0x10)0x1
               A: android:versionName(0x0101021c)="1.0.0" (Raw: "1.0.0")
               A: android:compileSdkVersion(0x01010572)=(type 0x10)0x1f
               A: android:compileSdkVersionCodename(0x01010573)="12" (Raw: "12")
               A: package="com.example.bug" (Raw: "com.example.bug")
               A: platformBuildVersionCode=(type 0x10)0x1f
               A: platformBuildVersionName=(type 0x10)0xc
               E: uses-sdk (line=7)
                 A: android:minSdkVersion(0x0101020c)=(type 0x10)0x1d
                 A: android:targetSdkVersion(0x01010270)=(type 0x10)0x1f
               E: uses-permission (line=15)
                 A: android:name(0x01010003)="android.permission.INTERNET" (Raw: "android.permission.INTERNET")
               E: uses-permission (line=16)
                 A: android:name(0x01010003)="android.permission.WAKE_LOCK" (Raw: "android.permission.WAKE_LOCK")
               E: uses-permission (line=17)
                 A: android:name(0x01010003)="android.permission.ACCESS_NETWORK_STATE" (Raw: "android.permission.ACCESS_NETWORK_STATE")
               E: uses-permission (line=18)
                 A: android:name(0x01010003)="android.permission.RECEIVE_BOOT_COMPLETED" (Raw: "android.permission.RECEIVE_BOOT_COMPLETED")
               E: uses-permission (line=19)
                 A: android:name(0x01010003)="android.permission.FOREGROUND_SERVICE" (Raw: "android.permission.FOREGROUND_SERVICE")
               E: uses-permission (line=20)
                 A: android:name(0x01010003)="com.android.vending.BILLING" (Raw: "com.android.vending.BILLING")
               E: application (line=22)
                 A: android:label(0x01010001)="bug" (Raw: "bug")
                 A: android:icon(0x01010002)=@0x7f090000
                 A: android:name(0x01010003)="android.app.Application" (Raw: "android.app.Application")
                 A: android:debuggable(0x0101000f)=(type 0x12)0xffffffff
                 A: android:extractNativeLibs(0x010104ea)=(type 0x12)0x0
                 A: android:appComponentFactory(0x0101057a)="androidx.core.app.CoreComponentFactory" (Raw: "androidx.core.app.CoreComponentFactory")
                 E: activity (line=29)
                   A: android:theme(0x01010000)=@0x7f0b0000
                   A: android:name(0x01010003)="com.example.bug.MainActivity" (Raw: "com.example.bug.MainActivity")
                   A: android:exported(0x01010010)=(type 0x12)0xffffffff
                   A: android:launchMode(0x0101001d)=(type 0x10)0x1
                   A: android:configChanges(0x0101001f)=(type 0x11)0x40003fb4
                   A: android:windowSoftInputMode(0x0101022b)=(type 0x11)0x10
                   A: android:hardwareAccelerated(0x010102d3)=(type 0x12)0xffffffff
                   E: meta-data (line=44)
                     A: android:name(0x01010003)="io.flutter.embedding.android.NormalTheme" (Raw: "io.flutter.embedding.android.NormalTheme")
                     A: android:resource(0x01010025)=@0x7f0b0001
                   E: intent-filter (line=48)
                     E: action (line=49)
                       A: android:name(0x01010003)="android.intent.action.MAIN" (Raw: "android.intent.action.MAIN")
                     E: category (line=51)
                       A: android:name(0x01010003)="android.intent.category.LAUNCHER" (Raw: "android.intent.category.LAUNCHER")
                 E: meta-data (line=58)
                   A: android:name(0x01010003)="flutterEmbedding" (Raw: "flutterEmbedding")
                   A: android:value(0x01010024)=(type 0x10)0x2
                 E: uses-library (line=62)
                   A: android:name(0x01010003)="androidx.window.extensions" (Raw: "androidx.window.extensions")
                   A: android:required(0x0101028e)=(type 0x12)0x0
                 E: uses-library (line=65)
                   A: android:name(0x01010003)="androidx.window.sidecar" (Raw: "androidx.window.sidecar")
                   A: android:required(0x0101028e)=(type 0x12)0x0
                 E: provider (line=69)
                   A: android:name(0x01010003)="androidx.startup.InitializationProvider" (Raw: "androidx.startup.InitializationProvider")
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:authorities(0x01010018)="com.example.bug.androidx-startup" (Raw: "com.example.bug.androidx-startup")
                   E: meta-data (line=73)
                     A: android:name(0x01010003)="androidx.work.WorkManagerInitializer" (Raw: "androidx.work.WorkManagerInitializer")
                     A: android:value(0x01010024)="androidx.startup" (Raw: "androidx.startup")
                 E: service (line=78)
                   A: android:name(0x01010003)="androidx.work.impl.background.systemalarm.SystemAlarmService" (Raw: "androidx.work.impl.background.systemalarm.SystemAlarmService")
                   A: android:enabled(0x0101000e)=@0x7f020000
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                 E: service (line=83)
                   A: android:name(0x01010003)="androidx.work.impl.background.systemjob.SystemJobService" (Raw: "androidx.work.impl.background.systemjob.SystemJobService")
                   A: android:permission(0x01010006)="android.permission.BIND_JOB_SERVICE" (Raw: "android.permission.BIND_JOB_SERVICE")
                   A: android:enabled(0x0101000e)=@0x7f020002
                   A: android:exported(0x01010010)=(type 0x12)0xffffffff
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                 E: service (line=89)
                   A: android:name(0x01010003)="androidx.work.impl.foreground.SystemForegroundService" (Raw: "androidx.work.impl.foreground.SystemForegroundService")
                   A: android:enabled(0x0101000e)=@0x7f020001
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                 E: receiver (line=95)
                   A: android:name(0x01010003)="androidx.work.impl.utils.ForceStopRunnable$BroadcastReceiver" (Raw: "androidx.work.impl.utils.ForceStopRunnable$BroadcastReceiver")
                   A: android:enabled(0x0101000e)=(type 0x12)0xffffffff
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                 E: receiver (line=100)
                   A: android:name(0x01010003)="androidx.work.impl.background.systemalarm.ConstraintProxy$BatteryChargingProxy" (Raw:
                   "androidx.work.impl.background.systemalarm.ConstraintProxy$BatteryChargingProxy")
                   A: android:enabled(0x0101000e)=(type 0x12)0x0
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                   E: intent-filter (line=105)
                     E: action (line=106)
                       A: android:name(0x01010003)="android.intent.action.ACTION_POWER_CONNECTED" (Raw: "android.intent.action.ACTION_POWER_CONNECTED")
                     E: action (line=107)
                       A: android:name(0x01010003)="android.intent.action.ACTION_POWER_DISCONNECTED" (Raw: "android.intent.action.ACTION_POWER_DISCONNECTED")
                 E: receiver (line=110)
                   A: android:name(0x01010003)="androidx.work.impl.background.systemalarm.ConstraintProxy$BatteryNotLowProxy" (Raw: "androidx.work.impl.background.systemalarm.ConstraintProxy$BatteryNotLowProxy")  
                   A: android:enabled(0x0101000e)=(type 0x12)0x0
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                   E: intent-filter (line=115)
                     E: action (line=116)
                       A: android:name(0x01010003)="android.intent.action.BATTERY_OKAY" (Raw: "android.intent.action.BATTERY_OKAY")
                     E: action (line=117)
                       A: android:name(0x01010003)="android.intent.action.BATTERY_LOW" (Raw: "android.intent.action.BATTERY_LOW")
                 E: receiver (line=120)
                   A: android:name(0x01010003)="androidx.work.impl.background.systemalarm.ConstraintProxy$StorageNotLowProxy" (Raw: "androidx.work.impl.background.systemalarm.ConstraintProxy$StorageNotLowProxy")  
                   A: android:enabled(0x0101000e)=(type 0x12)0x0
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                   E: intent-filter (line=125)
                     E: action (line=126)
                       A: android:name(0x01010003)="android.intent.action.DEVICE_STORAGE_LOW" (Raw: "android.intent.action.DEVICE_STORAGE_LOW")
                     E: action (line=127)
                       A: android:name(0x01010003)="android.intent.action.DEVICE_STORAGE_OK" (Raw: "android.intent.action.DEVICE_STORAGE_OK")
                 E: receiver (line=130)
                   A: android:name(0x01010003)="androidx.work.impl.background.systemalarm.ConstraintProxy$NetworkStateProxy" (Raw: "androidx.work.impl.background.systemalarm.ConstraintProxy$NetworkStateProxy")    
                   A: android:enabled(0x0101000e)=(type 0x12)0x0
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                   E: intent-filter (line=135)
                     E: action (line=136)
                       A: android:name(0x01010003)="android.net.conn.CONNECTIVITY_CHANGE" (Raw: "android.net.conn.CONNECTIVITY_CHANGE")
                 E: receiver (line=139)
                   A: android:name(0x01010003)="androidx.work.impl.background.systemalarm.RescheduleReceiver" (Raw: "androidx.work.impl.background.systemalarm.RescheduleReceiver")
                   A: android:enabled(0x0101000e)=(type 0x12)0x0
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                   E: intent-filter (line=144)
                     E: action (line=145)
                       A: android:name(0x01010003)="android.intent.action.BOOT_COMPLETED" (Raw: "android.intent.action.BOOT_COMPLETED")
                     E: action (line=146)
                       A: android:name(0x01010003)="android.intent.action.TIME_SET" (Raw: "android.intent.action.TIME_SET")
                     E: action (line=147)
                       A: android:name(0x01010003)="android.intent.action.TIMEZONE_CHANGED" (Raw: "android.intent.action.TIMEZONE_CHANGED")
                 E: receiver (line=150)
                   A: android:name(0x01010003)="androidx.work.impl.background.systemalarm.ConstraintProxyUpdateReceiver" (Raw: "androidx.work.impl.background.systemalarm.ConstraintProxyUpdateReceiver")
                   A: android:enabled(0x0101000e)=@0x7f020000
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                   E: intent-filter (line=155)
                     E: action (line=156)
                       A: android:name(0x01010003)="androidx.work.impl.background.systemalarm.UpdateProxies" (Raw: "androidx.work.impl.background.systemalarm.UpdateProxies")
                 E: receiver (line=159)
                   A: android:name(0x01010003)="androidx.work.impl.diagnostics.DiagnosticsReceiver" (Raw: "androidx.work.impl.diagnostics.DiagnosticsReceiver")
                   A: android:permission(0x01010006)="android.permission.DUMP" (Raw: "android.permission.DUMP")
                   A: android:enabled(0x0101000e)=(type 0x12)0xffffffff
                   A: android:exported(0x01010010)=(type 0x12)0xffffffff
                   A: android:directBootAware(0x01010505)=(type 0x12)0x0
                   E: intent-filter (line=165)
                     E: action (line=166)
                       A: android:name(0x01010003)="androidx.work.diagnostics.REQUEST_DIAGNOSTICS" (Raw: "androidx.work.diagnostics.REQUEST_DIAGNOSTICS")
                 E: service (line=170)
                   A: android:name(0x01010003)="androidx.room.MultiInstanceInvalidationService" (Raw: "androidx.room.MultiInstanceInvalidationService")
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:directBootAware(0x01010505)=(type 0x12)0xffffffff
                 E: meta-data (line=175)
                   A: android:name(0x01010003)="com.google.android.play.billingclient.version" (Raw: "com.google.android.play.billingclient.version")
                   A: android:value(0x01010024)="5.0.0" (Raw: "5.0.0")
                 E: activity (line=179)
                   A: android:theme(0x01010000)=@0x01030010
                   A: android:name(0x01010003)="com.android.billingclient.api.ProxyBillingActivity" (Raw: "com.android.billingclient.api.ProxyBillingActivity")
                   A: android:exported(0x01010010)=(type 0x12)0x0
                   A: android:configChanges(0x0101001f)=(type 0x11)0x5b0
[  +35 ms] Stopping app 'app.apk' on sdk gphone64 x86 64.
[   +1 ms] executing: C:\Users\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 shell am force-stop com.example.bug
[ +338 ms] executing: C:\Users\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 shell pm list packages com.example.bug
[ +249 ms] package:com.example.bug
[   +3 ms] executing: C:\Users\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 shell cat /data/local/tmp/sky.com.example.bug.sha1
[ +237 ms] 7320c4c6bd45f39dce63f13b4a3d2d76c0b46de7
[   +2 ms] Latest build already installed.
[        ] executing: C:\Users\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 shell -x logcat -v time -t 1
[ +316 ms] --------- beginning of main
                    07-12 20:50:54.359 D/CarrierSvcBindHelper(  914): No carrier app for: 0
[  +12 ms] executing: C:\Users\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 shell am start -a android.intent.action.RUN -f 0x20000000 --ez enable-dart-profiling true --ez
enable-checked-mode true --ez verify-entry-points true com.example.bug/com.example.bug.MainActivity
[ +555 ms] Starting: Intent { act=android.intent.action.RUN flg=0x20000000 cmp=com.example.bug/com.example.bug.MainActivity (has extras) }
[   +1 ms] Waiting for observatory port to be available...
[+2156 ms] Observatory URL on device: http://127.0.0.1:40137/TragUJuC9tw=/
[   +2 ms] executing: C:\Users\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 forward tcp:0 tcp:40137
[ +271 ms] 64898
[   +1 ms] Forwarded host port 64898 to device port 40137 for Observatory
[  +25 ms] Caching compiled dill
[ +124 ms] Connecting to service protocol: http://127.0.0.1:64898/TragUJuC9tw=/
[+1061 ms] Launching a Dart Developer Service (DDS) instance at http://127.0.0.1:0, connecting to VM service at http://127.0.0.1:64898/TragUJuC9tw=/.
[ +994 ms] DDS is listening at http://127.0.0.1:64903/HXcpz4a5VHo=/.
[ +127 ms] Successfully connected to service protocol: http://127.0.0.1:64898/TragUJuC9tw=/
[ +212 ms] DevFS: Creating new filesystem on the device (null)
[ +180 ms] DevFS: Created new filesystem on the device (file:///data/user/0/com.example.bug/code_cache/bugAVUHCK/bug/)
[  +32 ms] Updating assets
[ +239 ms] Syncing files to device sdk gphone64 x86 64...
[   +7 ms] <- reset
[   +3 ms] Compiling dart to kernel with 0 updated files
[  +11 ms] Processing bundle.
[  +11 ms] <- recompile package:bug/main.dart 7b7653b2-ba13-4a80-8351-a1a9aac2802f
[   +8 ms] <- 7b7653b2-ba13-4a80-8351-a1a9aac2802f
[  +37 ms] Bundle processing done.
[ +113 ms] ../../flutter/.pub-cache/hosted/pub.dartlang.org/in_app_purchase_android-0.2.3/lib/src/billing_client_wrappers/purchase_wrapper.g.dart:16:27: Warning: Operand of null-aware operation '?.' has type
'List<dynamic>'
                    which excludes null.
[  +62 ms]  - 'List' is from 'dart:core'.
[  +31 ms]           ? (json['skus'] as List)?.map((item) => item as String)?.toList() ??
[  +27 ms]                           ^
[   +1 ms] ../../flutter/.pub-cache/hosted/pub.dartlang.org/in_app_purchase_android-0.2.3/lib/src/billing_client_wrappers/purchase_wrapper.g.dart:35:27: Warning: Operand of null-aware operation '?.' has type
'List<dynamic>'
           which excludes null.
[  +58 ms]  - 'List' is from 'dart:core'.
[  +23 ms]           ? (json['skus'] as List)?.map((item) => item as String)?.toList() ??
[   +9 ms]                           ^
[  +28 ms] Updating files.
[   +2 ms] DevFS: Sync finished
[   +6 ms] Syncing files to device sdk gphone64 x86 64... (completed in 440ms)
[  +11 ms] Synced 0.0MB.
[   +8 ms] <- accept
[  +43 ms] Connected to _flutterView/0x7e3b5765fcf0.
[  +26 ms] Flutter run key commands.
[  +12 ms] r Hot reload. 
[  +13 ms] R Hot restart.
[   +6 ms] h List all available interactive commands.
[   +5 ms] d Detach (terminate "flutter run" but leave application running).
[   +2 ms] c Clear the screen
[   +2 ms] q Quit (terminate the application on the device).
[   +6 ms]  Running with sound null safety 
[   +9 ms] An Observatory debugger and profiler on sdk gphone64 x86 64 is available at: http://127.0.0.1:64903/HXcpz4a5VHo=/
[+3241 ms] I/flutter (11197): store is available: true
[ +132 ms] The Flutter DevTools debugger and profiler on sdk gphone64 x86 64 is available at: http://127.0.0.1:9102?uri=http://127.0.0.1:64903/HXcpz4a5VHo=/

C:\src\Projects\bug>flutter analyze
Analyzing bug...                                                        

   info - Avoid `print` calls in production code - lib\main.dart:61:5 - avoid_print
   info - Avoid `print` calls in production code - lib\main.dart:63:7 - avoid_print
   info - Avoid `print` calls in production code - lib\main.dart:79:7 - avoid_print
   info - Avoid `print` calls in production code - lib\main.dart:93:7 - avoid_print

4 issues found. (ran in 5.8s)
C:\src\Projects\bug>flutter doctor -v
[√] Flutter (Channel stable, 3.0.4, on Microsoft Windows [Version 10.0.19044.1806], locale en-US)
    • Flutter version 3.0.4 at C:\src\flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 85684f9300 (12 days ago), 2022-06-30 13:22:47 -0700
    • Engine revision 6ba2af10bb
    • Dart version 2.17.5
    • DevTools version 2.12.2

[√] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1)
    • Android SDK at C:\Users\dejan\AppData\Local\Android\sdk
    • Platform android-32, build-tools 32.1.0-rc1
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 11.0.12+7-b1504.28-7817840)
    • All Android licenses accepted.

[X] Chrome - develop for the web (Cannot find Chrome executable at .\Google\Chrome\Application\chrome.exe)
    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.

[X] Visual Studio - develop for Windows
    X Visual Studio not installed; this is necessary for Windows development.
      Download at https://visualstudio.microsoft.com/downloads/.
      Please install the "Desktop development with C++" workload, including all of its default components

[√] Android Studio (version 2021.2)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.12+7-b1504.28-7817840)

[√] VS Code (version 1.69.0)
    • VS Code at C:\Users\dejan\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.44.0

[√] Connected device (3 available)
    • sdk gphone64 x86 64 (mobile) • emulator-5554 • android-x64    • Android 12 (API 32) (emulator)
    • Windows (desktop)            • windows       • windows-x64    • Microsoft Windows [Version 10.0.19044.1806]
    • Edge (web)                   • edge          • web-javascript • Microsoft Edge 103.0.1264.49

[√] HTTP Host Availability
    • All required HTTP hosts are available

! Doctor found issues in 2 categories.

Metadata

Metadata

Assignees

Labels

P0Critical issues such as a build break or regressionc: regressionIt was better in the past than it is nowp: in_app_purchasePlugin for in-app purchasepackageflutter/packages repository. See also p: labels.platform-androidAndroid applications specifically

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions