ensure that subscription initalization finishes before running customer update
This commit is contained in:
parent
aca6f62eac
commit
31b90eab0c
4 changed files with 33 additions and 14 deletions
|
|
@ -32,8 +32,6 @@ enum CanSendStatus {
|
|||
class SubscriptionController extends BaseController {
|
||||
late PangeaController _pangeaController;
|
||||
SubscriptionInfo? subscription;
|
||||
|
||||
bool initialized = false;
|
||||
final StreamController subscriptionStream = StreamController.broadcast();
|
||||
|
||||
SubscriptionController(PangeaController pangeaController) : super() {
|
||||
|
|
@ -45,7 +43,28 @@ class SubscriptionController extends BaseController {
|
|||
(subscription!.currentSubscriptionId != null ||
|
||||
subscription!.currentSubscription != null);
|
||||
|
||||
bool _isInitializing = false;
|
||||
Completer<void> initialized = Completer<void>();
|
||||
|
||||
Future<void> initialize() async {
|
||||
if (initialized.isCompleted) return;
|
||||
if (_isInitializing) {
|
||||
await initialized.future;
|
||||
return;
|
||||
}
|
||||
_isInitializing = true;
|
||||
await _initialize();
|
||||
_isInitializing = false;
|
||||
initialized.complete();
|
||||
}
|
||||
|
||||
Future<void> reinitialize() async {
|
||||
initialized = Completer<void>();
|
||||
_isInitializing = false;
|
||||
await initialize();
|
||||
}
|
||||
|
||||
Future<void> _initialize() async {
|
||||
try {
|
||||
if (_pangeaController.matrixState.client.userID == null) {
|
||||
debugPrint(
|
||||
|
|
@ -63,8 +82,6 @@ class SubscriptionController extends BaseController {
|
|||
setNewUserTrial();
|
||||
}
|
||||
|
||||
initialized = true;
|
||||
|
||||
if (!kIsWeb) {
|
||||
Purchases.addCustomerInfoUpdateListener(
|
||||
(CustomerInfo info) async {
|
||||
|
|
@ -186,6 +203,9 @@ class SubscriptionController extends BaseController {
|
|||
}
|
||||
|
||||
Future<void> updateCustomerInfo() async {
|
||||
if (!initialized.isCompleted) {
|
||||
await initialize();
|
||||
}
|
||||
if (subscription == null) {
|
||||
ErrorHandler.logError(
|
||||
m: "Null subscription info in subscription settings",
|
||||
|
|
@ -220,7 +240,7 @@ class SubscriptionController extends BaseController {
|
|||
}
|
||||
|
||||
bool get _shouldShowPaywall {
|
||||
return initialized &&
|
||||
return initialized.isCompleted &&
|
||||
!isSubscribed &&
|
||||
(_lastDismissedPaywall == null ||
|
||||
DateTime.now().difference(_lastDismissedPaywall!).inHours >
|
||||
|
|
@ -245,7 +265,7 @@ class SubscriptionController extends BaseController {
|
|||
|
||||
Future<void> showPaywall(BuildContext context) async {
|
||||
try {
|
||||
if (!initialized) {
|
||||
if (!initialized.isCompleted) {
|
||||
await initialize();
|
||||
}
|
||||
if (subscription?.availableSubscriptions.isEmpty ?? true) {
|
||||
|
|
|
|||
|
|
@ -1,15 +1,13 @@
|
|||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:purchases_flutter/purchases_flutter.dart';
|
||||
import 'package:sentry_flutter/sentry_flutter.dart';
|
||||
|
||||
import 'package:fluffychat/pangea/config/environment.dart';
|
||||
import 'package:fluffychat/pangea/controllers/subscription_controller.dart';
|
||||
import 'package:fluffychat/pangea/models/base_subscription_info.dart';
|
||||
import 'package:fluffychat/pangea/utils/error_handler.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:purchases_flutter/purchases_flutter.dart';
|
||||
import 'package:sentry_flutter/sentry_flutter.dart';
|
||||
|
||||
class MobileSubscriptionInfo extends SubscriptionInfo {
|
||||
MobileSubscriptionInfo({required super.pangeaController}) : super();
|
||||
|
|
@ -119,11 +117,11 @@ class MobileSubscriptionInfo extends SubscriptionInfo {
|
|||
Future<void> setCustomerInfo() async {
|
||||
if (allProducts == null) {
|
||||
ErrorHandler.logError(
|
||||
m: "Null appProducts in setCustomerInfo",
|
||||
m: "Null allProducts in setCustomerInfo",
|
||||
s: StackTrace.current,
|
||||
);
|
||||
debugPrint(
|
||||
"Null appProducts in setCustomerInfo",
|
||||
"Null allProducts in setCustomerInfo",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ class SubscriptionManagementController extends State<SubscriptionManagement> {
|
|||
|
||||
@override
|
||||
void initState() {
|
||||
if (!subscriptionController.initialized) {
|
||||
if (!subscriptionController.initialized.isCompleted) {
|
||||
subscriptionController.initialize().then((_) => setState(() {}));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -335,6 +335,7 @@ class MatrixState extends State<Matrix> with WidgetsBindingObserver {
|
|||
// #Pangea
|
||||
if (state == LoginState.loggedIn) {
|
||||
await (await pangeaController.userController.completer).future;
|
||||
await pangeaController.subscriptionController.reinitialize();
|
||||
}
|
||||
String routeDestination;
|
||||
if (state == LoginState.loggedIn) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue