PostHog last fixes hopefully

This commit is contained in:
Arseni
2025-12-12 16:39:18 +03:00
parent 67b52af150
commit 6ee146b95a
18 changed files with 317 additions and 54 deletions

View File

@@ -1,3 +1,5 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:collection/collection.dart';
@@ -14,6 +16,7 @@ import 'package:pshared/provider/recipient/pmethods.dart';
import 'package:pshared/provider/recipient/provider.dart';
import 'package:pweb/pages/address_book/form/view.dart';
import 'package:pweb/services/posthog.dart';
import 'package:pweb/utils/error/snackbar.dart';
import 'package:pweb/utils/payment/label.dart';
import 'package:pweb/utils/snackbar.dart';
@@ -106,11 +109,11 @@ class _AdressBookRecipientFormState extends State<AdressBookRecipientForm> {
return;
}
// AmplitudeService.recipientAddCompleted(
// _type,
// _status,
// _methods.keys.toSet(),
// );
unawaited(PosthogService.recipientAddCompleted(
_type,
_status,
_methods.keys.toSet(),
));
final recipient = await executeActionWithNotification(
context: context,
action: _doSave,

View File

@@ -1,5 +1,7 @@
import 'package:flutter/material.dart';
import 'package:logging/logging.dart';
import 'package:provider/provider.dart';
import 'package:pshared/provider/account.dart';
@@ -12,24 +14,56 @@ import 'package:pweb/generated/i18n/app_localizations.dart';
class AccountLoader extends StatelessWidget {
final Widget child;
const AccountLoader({super.key, required this.child});
@override
Widget build(BuildContext context) => Consumer<AccountProvider>(builder: (context, provider, _) {
if (provider.isLoading) return const Center(child: CircularProgressIndicator());
if (provider.error != null) {
static final _logger = Logger('loader.account');
void _notifyErrorAndRedirect(BuildContext context, Object error) {
WidgetsBinding.instance.addPostFrameCallback((_) {
if (!context.mounted) return;
postNotifyUserOfErrorX(
context: context,
errorSituation: AppLocalizations.of(context)!.errorLogin,
exception: provider.error!,
context: context,
errorSituation: AppLocalizations.of(context)!.errorLogin,
exception: error,
);
navigateAndReplace(context, Pages.login);
}
if (provider.account == null) {
WidgetsBinding.instance.addPostFrameCallback((_) => navigateAndReplace(context, Pages.login));
});
}
void _restoreAndHandleResult(BuildContext context, AccountProvider provider) {
WidgetsBinding.instance.addPostFrameCallback((_) async {
try {
await provider.restoreIfPossible();
} catch (error, stack) {
_logger.warning('Account restore failed: $error', error, stack);
}
if (!context.mounted) return;
final latest = Provider.of<AccountProvider>(context, listen: false);
if (latest.account != null) return;
if (latest.error != null) {
_notifyErrorAndRedirect(context, latest.error!);
return;
}
if (!latest.isLoading) {
navigateAndReplace(context, Pages.login);
}
});
}
@override
Widget build(BuildContext context) {
return Consumer<AccountProvider>(builder: (context, provider, _) {
if (provider.account != null) return child;
if (provider.error != null) {
_notifyErrorAndRedirect(context, provider.error!);
return const Center(child: CircularProgressIndicator());
}
if (!provider.isLoading) {
_restoreAndHandleResult(context, provider);
}
if (provider.isLoading) return const Center(child: CircularProgressIndicator());
// In case of error or missing account we show loader while side effects handle navigation.
return const Center(child: CircularProgressIndicator());
}
return child;
});
});
}
}

View File

@@ -13,28 +13,32 @@ import 'package:pweb/generated/i18n/app_localizations.dart';
class PermissionsLoader extends StatelessWidget {
final Widget child;
const PermissionsLoader({super.key, required this.child});
@override
Widget build(BuildContext context) => Consumer2<PermissionsProvider, AccountProvider>(builder: (context, provider, accountProvider, _) {
if (provider.isLoading) {
return const Center(child: CircularProgressIndicator());
}
if (provider.error != null) {
void _notifyError(BuildContext context, Exception exception) {
WidgetsBinding.instance.addPostFrameCallback((_) {
postNotifyUserOfErrorX(
context: context,
errorSituation: AppLocalizations.of(context)!.errorLogin,
exception: provider.error!,
context: context,
errorSituation: AppLocalizations.of(context)!.errorLogin,
exception: exception,
);
navigateAndReplace(context, Pages.login);
}
if (provider.error == null && !provider.isReady && accountProvider.account != null) {
WidgetsBinding.instance.addPostFrameCallback((_) {
provider.load();
});
return const Center(child: CircularProgressIndicator());
}
return child;
});
});
}
@override
Widget build(BuildContext context) {
return Consumer2<PermissionsProvider, AccountProvider>(
builder: (context, provider, accountProvider, _) {
if (provider.isLoading) {
return const Center(child: CircularProgressIndicator());
}
if (provider.error != null) {
_notifyError(context, provider.error!);
return const Center(child: CircularProgressIndicator());
}
return child;
},
);
}
}

View File

@@ -1,3 +1,5 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
@@ -14,6 +16,7 @@ import 'package:pweb/widgets/password/password.dart';
import 'package:pweb/widgets/username.dart';
import 'package:pweb/widgets/vspacer.dart';
import 'package:pweb/widgets/error/snackbar.dart';
import 'package:pweb/services/posthog.dart';
import 'package:pweb/generated/i18n/app_localizations.dart';
@@ -43,6 +46,7 @@ class _LoginFormState extends State<LoginForm> {
password: _passwordController.text,
locale: context.read<LocaleProvider>().locale.languageCode,
);
unawaited(PosthogService.login(pending: outcome.isPending));
if (outcome.isPending) {
// TODO: fix context usage
navigateAndReplace(context, Pages.sfactor);

View File

@@ -16,6 +16,7 @@ import 'package:pweb/providers/payment_flow.dart';
import 'package:pweb/pages/payment_methods/payment_page/body.dart';
import 'package:pweb/providers/wallets.dart';
import 'package:pweb/widgets/sidebar/destinations.dart';
import 'package:pweb/services/posthog.dart';
class PaymentPage extends StatefulWidget {
@@ -109,7 +110,7 @@ class _PaymentPageState extends State<PaymentPage> {
void _handleSendPayment() {
// TODO: Handle Payment logic
// AmplitudeService.paymentInitiated();
PosthogService.paymentInitiated(method: _flowProvider.selectedType);
}
@override
@@ -195,4 +196,4 @@ class _PaymentPageState extends State<PaymentPage> {
(method.description?.contains(wallet.walletUserID) ?? false),
);
}
}
}

View File

@@ -1,10 +1,12 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:pshared/provider/locale.dart';
// import 'package:pweb/services/amplitude.dart';
import 'package:pweb/services/posthog.dart';
import 'package:pweb/generated/i18n/app_localizations.dart';
@@ -58,7 +60,7 @@ class LocalePicker extends StatelessWidget {
onChanged: (locale) {
if (locale != null) {
localeProvider.setLocale(locale);
// AmplitudeService.localeChanged(locale);
unawaited(PosthogService.localeChanged(locale));
}
},
decoration: const InputDecoration(