Как вызвать функцию только один раз при прослушивании потока в флаттере? - PullRequest
0 голосов
/ 24 марта 2020

У меня есть StreamSubscription, которая прослушивает обновления покупки в приложении покупки. Я отправляю информацию о подписке на сервер. Проблема в том, что конечная точка API продолжает получать удар. Прежде чем попасть в конечную точку, я проверил, завершена ли покупка.

Вот код:

StreamSubscription<List<PurchaseDetails>> _subscription;


    final Stream<List<PurchaseDetails>> purchaseUpdates =
        InAppPurchaseConnection.instance.purchaseUpdatedStream;
    _subscription =
        purchaseUpdates.listen((List<PurchaseDetails> purchases) async {
      _handlePurchaseUpdates(purchases);
    });

Вот функция _handlePurchaseUpdates:


  void _handlePurchaseUpdates(List<PurchaseDetails> purchases) async {

    if (purchases[0].status == PurchaseStatus.purchased) {
      await _subscription.cancel();
      final NavigationService _navigationService = locator<NavigationService>();


      try {
        final response = await _apiLocator.subscribeUser(
            purchase: purchases[0],
            subscriptionType: selected == 0 ? 'monthly' : 'yearly',
            uid: _userData.uid);


      } catch (e) {
        print(e);
      }

      if (Platform.isIOS) {
        InAppPurchaseConnection.instance.completePurchase(purchases[0]);
      }

      _navigationService.navigateToReplaceAll(routeName: 'home');
    } else {
      // print('purchase failed');
    }

    // notifyListeners();
  }
Things I have tried:
1. Canceling the stream when the purchase status is complete.
2. Adding a count variable and checking before hitting api endpoint.
But none of them are working



...