Flutter 在应用程序中抖动购买0.2.1 purchaseUpdatedStream.listen在Android上不工作

Flutter 在应用程序中抖动购买0.2.1 purchaseUpdatedStream.listen在Android上不工作,flutter,in-app-purchase,Flutter,In App Purchase,我可以在Android上购买订阅,订阅会显示在QueryCastPurchases()中,但购买产品后不会触发_ListentPurchaseUpdated()方法。我知道这是以前版本的flutter in_app_purchase中的一个bug,但据说它在0.2.1中已经修复。然而,它似乎不适合我。。。我的代码有问题吗 /// The In App Purchase plugin InAppPurchaseConnection _iap = InAppPurchaseConnectio

我可以在Android上购买订阅,订阅会显示在QueryCastPurchases()中,但购买产品后不会触发_ListentPurchaseUpdated()方法。我知道这是以前版本的flutter in_app_purchase中的一个bug,但据说它在0.2.1中已经修复。然而,它似乎不适合我。。。我的代码有问题吗

  /// The In App Purchase plugin
  InAppPurchaseConnection _iap = InAppPurchaseConnection.instance

  /// Updates to purchases
  StreamSubscription<List<PurchaseDetails>> _subscription;

  @override
  initState() {

    final Stream purchaseUpdates = InAppPurchaseConnection.instance.purchaseUpdatedStream;
    _subscription = purchaseUpdates.listen((purchases) {
      _purchases.addAll(purchases);
      _listenToPurchaseUpdated(_purchases);
    });

    super.initState();
  }

  /// Get all products available for sale
  Future<void> _getProducts() async {
    Set<String> ids = Set.from(['subscription_product']);
    ProductDetailsResponse response = await _iap.queryProductDetails(ids);

    setState(() {
      _products = response.productDetails;
    });

    if(response.error != null && response.error.message != null){
      setState(() {
        _iapStoreProblem = response.error.message;
      });
    }
  }

  void _buyProduct(ProductDetails prod) {
    final PurchaseParam purchaseParam = PurchaseParam(productDetails: prod);
    _iap.buyNonConsumable(purchaseParam: purchaseParam);
  }
///应用内购买插件
InAppPurchaseConnection _iap=InAppPurchaseConnection.instance
///购买更新
流动认购(流动认购);;
@凌驾
initState(){
final Stream purchaseUpdates=InAppPurchaseConnection.instance.purchaseUpdatedStream;
_订阅=购买更新。侦听((购买){
_采购。addAll(采购);
_ListentPurchaseUpdated(_采购);
});
super.initState();
}
///获得所有可供销售的产品
Future\u getProducts()异步{
Set id=Set.from(['subscription\u product']);
ProductDetailsResponse-response=等待iap.queryProductDetails(ID);
设置状态(){
_products=response.productDetails;
});
if(response.error!=null&&response.error.message!=null){
设置状态(){
_iapStoreProblem=response.error.message;
});
}
}
void\u购买产品(产品详细信息产品){
最终PurchaseParam PurchaseParam=PurchaseParam(产品详细信息:产品);
_iap.BuyUnconsummable(purchaseParam:purchaseParam);
}
我找到了解决方案

结果我不得不使用

StreamSubscription\u订阅

而不是

StreamSubscription<List<PurchaseDetails>> _subscription;
StreamSubscription\u订阅;
然后:

_subscription = _iap.purchaseUpdatedStream.listen((data) => setState(() {
    _purchases.addAll(data);
    _listenToPurchaseUpdated(data);
}));


void _listenToPurchaseUpdated(List<PurchaseDetails> purchaseDetailsList) {
    purchaseDetailsList.forEach((PurchaseDetails purchaseDetails) async {
      ...
    });
}
\u subscription=\u iap.purchaseUpdatedStream.listen((数据)=>setState(){
_采购.添加所有(数据);
_ListentPurchaseUpdated(数据);
}));
void _listenToPurchaseUpdated(列表purchaseDetailsList){
forEach((PurchaseDetails PurchaseDetails)异步{
...
});
}
还有一个小提示:Android上的PurchaseDetails.status为空