Compare commits
5 Commits
SEND004
...
4ec934c96b
| Author | SHA1 | Date | |
|---|---|---|---|
| 4ec934c96b | |||
|
|
19df740550 | ||
| 1079ad7d0a | |||
|
|
660f689a7a | ||
|
|
8115abb569 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -9,3 +9,4 @@ untranslated.txt
|
|||||||
generate_protos.sh
|
generate_protos.sh
|
||||||
update_dep.sh
|
update_dep.sh
|
||||||
.vscode/
|
.vscode/
|
||||||
|
.gocache/
|
||||||
@@ -16,8 +16,7 @@ api:
|
|||||||
CORS:
|
CORS:
|
||||||
max_age: 300
|
max_age: 300
|
||||||
allowed_origins:
|
allowed_origins:
|
||||||
- "http://*"
|
- "*"
|
||||||
- "https://*"
|
|
||||||
allowed_methods:
|
allowed_methods:
|
||||||
- "GET"
|
- "GET"
|
||||||
- "POST"
|
- "POST"
|
||||||
|
|||||||
@@ -11,8 +11,6 @@ class CommonConstants {
|
|||||||
static String apiEndpoint = '/api/v1';
|
static String apiEndpoint = '/api/v1';
|
||||||
static String amplitudeSecret = 'c3d75b3e2520d708440acbb16b923e79';
|
static String amplitudeSecret = 'c3d75b3e2520d708440acbb16b923e79';
|
||||||
static String amplitudeServerZone = 'EU';
|
static String amplitudeServerZone = 'EU';
|
||||||
static String posthogApiKey = '';
|
|
||||||
static String posthogHost = 'https://eu.i.posthog.com';
|
|
||||||
static Locale defaultLocale = const Locale('en');
|
static Locale defaultLocale = const Locale('en');
|
||||||
static String defaultCurrency = 'EUR';
|
static String defaultCurrency = 'EUR';
|
||||||
static int defaultDimensionLength = 500;
|
static int defaultDimensionLength = 500;
|
||||||
@@ -38,8 +36,6 @@ class CommonConstants {
|
|||||||
apiEndpoint = configJson['apiEndpoint'] ?? apiEndpoint;
|
apiEndpoint = configJson['apiEndpoint'] ?? apiEndpoint;
|
||||||
amplitudeSecret = configJson['amplitudeSecret'] ?? amplitudeSecret;
|
amplitudeSecret = configJson['amplitudeSecret'] ?? amplitudeSecret;
|
||||||
amplitudeServerZone = configJson['amplitudeServerZone'] ?? amplitudeServerZone;
|
amplitudeServerZone = configJson['amplitudeServerZone'] ?? amplitudeServerZone;
|
||||||
posthogApiKey = configJson['posthogApiKey'] ?? posthogApiKey;
|
|
||||||
posthogHost = configJson['posthogHost'] ?? posthogHost;
|
|
||||||
defaultLocale = Locale(configJson['defaultLocale'] ?? defaultLocale.languageCode);
|
defaultLocale = Locale(configJson['defaultLocale'] ?? defaultLocale.languageCode);
|
||||||
defaultCurrency = configJson['defaultCurrency'] ?? defaultCurrency;
|
defaultCurrency = configJson['defaultCurrency'] ?? defaultCurrency;
|
||||||
wsProto = configJson['wsProto'] ?? wsProto;
|
wsProto = configJson['wsProto'] ?? wsProto;
|
||||||
|
|||||||
@@ -15,8 +15,6 @@ class Constants extends CommonConstants {
|
|||||||
static String get currentOrgKey => CommonConstants.currentOrgKey;
|
static String get currentOrgKey => CommonConstants.currentOrgKey;
|
||||||
static String get apiUrl => CommonConstants.apiUrl;
|
static String get apiUrl => CommonConstants.apiUrl;
|
||||||
static String get serviceUrl => CommonConstants.serviceUrl;
|
static String get serviceUrl => CommonConstants.serviceUrl;
|
||||||
static String get posthogApiKey => CommonConstants.posthogApiKey;
|
|
||||||
static String get posthogHost => CommonConstants.posthogHost;
|
|
||||||
static int get defaultDimensionLength => CommonConstants.defaultDimensionLength;
|
static int get defaultDimensionLength => CommonConstants.defaultDimensionLength;
|
||||||
static String get deviceIdStorageKey => CommonConstants.deviceIdStorageKey;
|
static String get deviceIdStorageKey => CommonConstants.deviceIdStorageKey;
|
||||||
static String get nilObjectRef => CommonConstants.nilObjectRef;
|
static String get nilObjectRef => CommonConstants.nilObjectRef;
|
||||||
|
|||||||
@@ -21,8 +21,6 @@ extension AppConfigExtension on AppConfig {
|
|||||||
external String? get apiEndpoint;
|
external String? get apiEndpoint;
|
||||||
external String? get amplitudeSecret;
|
external String? get amplitudeSecret;
|
||||||
external String? get amplitudeServerZone;
|
external String? get amplitudeServerZone;
|
||||||
external String? get posthogApiKey;
|
|
||||||
external String? get posthogHost;
|
|
||||||
external String? get defaultLocale;
|
external String? get defaultLocale;
|
||||||
external String? get wsProto;
|
external String? get wsProto;
|
||||||
external String? get wsEndpoint;
|
external String? get wsEndpoint;
|
||||||
@@ -42,8 +40,6 @@ class Constants extends CommonConstants {
|
|||||||
static String get currentOrgKey => CommonConstants.currentOrgKey;
|
static String get currentOrgKey => CommonConstants.currentOrgKey;
|
||||||
static String get apiUrl => CommonConstants.apiUrl;
|
static String get apiUrl => CommonConstants.apiUrl;
|
||||||
static String get serviceUrl => CommonConstants.serviceUrl;
|
static String get serviceUrl => CommonConstants.serviceUrl;
|
||||||
static String get posthogApiKey => CommonConstants.posthogApiKey;
|
|
||||||
static String get posthogHost => CommonConstants.posthogHost;
|
|
||||||
static int get defaultDimensionLength => CommonConstants.defaultDimensionLength;
|
static int get defaultDimensionLength => CommonConstants.defaultDimensionLength;
|
||||||
static String get deviceIdStorageKey => CommonConstants.deviceIdStorageKey;
|
static String get deviceIdStorageKey => CommonConstants.deviceIdStorageKey;
|
||||||
static String get nilObjectRef => CommonConstants.nilObjectRef;
|
static String get nilObjectRef => CommonConstants.nilObjectRef;
|
||||||
@@ -61,8 +57,6 @@ class Constants extends CommonConstants {
|
|||||||
'apiEndpoint': config.apiEndpoint,
|
'apiEndpoint': config.apiEndpoint,
|
||||||
'amplitudeSecret': config.amplitudeSecret,
|
'amplitudeSecret': config.amplitudeSecret,
|
||||||
'amplitudeServerZone': config.amplitudeServerZone,
|
'amplitudeServerZone': config.amplitudeServerZone,
|
||||||
'posthogApiKey': config.posthogApiKey,
|
|
||||||
'posthogHost': config.posthogHost,
|
|
||||||
'defaultLocale': config.defaultLocale,
|
'defaultLocale': config.defaultLocale,
|
||||||
'wsProto': config.wsProto,
|
'wsProto': config.wsProto,
|
||||||
'wsEndpoint': config.wsEndpoint,
|
'wsEndpoint': config.wsEndpoint,
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ class AccountProvider extends ChangeNotifier {
|
|||||||
Resource<Account?> get resource => _resource;
|
Resource<Account?> get resource => _resource;
|
||||||
late LocaleProvider _localeProvider;
|
late LocaleProvider _localeProvider;
|
||||||
PendingLogin? _pendingLogin;
|
PendingLogin? _pendingLogin;
|
||||||
Future<void>? _restoreFuture;
|
|
||||||
|
|
||||||
Account? get account => _resource.data;
|
Account? get account => _resource.data;
|
||||||
PendingLogin? get pendingLogin => _pendingLogin;
|
PendingLogin? get pendingLogin => _pendingLogin;
|
||||||
@@ -35,7 +34,6 @@ class AccountProvider extends ChangeNotifier {
|
|||||||
bool get isLoading => _resource.isLoading;
|
bool get isLoading => _resource.isLoading;
|
||||||
Object? get error => _resource.error;
|
Object? get error => _resource.error;
|
||||||
bool get isReady => (!isLoading) && (account != null);
|
bool get isReady => (!isLoading) && (account != null);
|
||||||
Future<void>? get restoreFuture => _restoreFuture;
|
|
||||||
|
|
||||||
Account? currentUser() {
|
Account? currentUser() {
|
||||||
final acc = account;
|
final acc = account;
|
||||||
@@ -222,12 +220,4 @@ class AccountProvider extends ChangeNotifier {
|
|||||||
rethrow;
|
rethrow;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> restoreIfPossible() {
|
|
||||||
return _restoreFuture ??= () async {
|
|
||||||
final hasAuth = await AuthorizationService.isAuthorizationStored();
|
|
||||||
if (!hasAuth) return;
|
|
||||||
await restore();
|
|
||||||
}();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -35,6 +35,8 @@ class OrganizationsProvider extends ChangeNotifier {
|
|||||||
_setResource(_resource.copyWith(isLoading: true, error: null));
|
_setResource(_resource.copyWith(isLoading: true, error: null));
|
||||||
try {
|
try {
|
||||||
final orgs = await OrganizationService.list();
|
final orgs = await OrganizationService.list();
|
||||||
|
// keep fetched organizations so _org can resolve against them
|
||||||
|
_setResource(Resource(data: orgs, isLoading: true));
|
||||||
// fetch stored org
|
// fetch stored org
|
||||||
String? org = await SecureStorageService.get(Constants.currentOrgKey);
|
String? org = await SecureStorageService.get(Constants.currentOrgKey);
|
||||||
// check stored org availability
|
// check stored org availability
|
||||||
@@ -54,6 +56,7 @@ class OrganizationsProvider extends ChangeNotifier {
|
|||||||
_setResource(_resource.copyWith(isLoading: true, error: null));
|
_setResource(_resource.copyWith(isLoading: true, error: null));
|
||||||
try {
|
try {
|
||||||
final org = await OrganizationService.loadByInvitation(invitationRef);
|
final org = await OrganizationService.loadByInvitation(invitationRef);
|
||||||
|
_setResource(Resource(data: [org], isLoading: true));
|
||||||
await setCurrentOrganization(org.id);
|
await setCurrentOrganization(org.id);
|
||||||
_setResource(Resource(data: [org], isLoading: false));
|
_setResource(Resource(data: [org], isLoading: false));
|
||||||
return org;
|
return org;
|
||||||
|
|||||||
@@ -24,9 +24,9 @@ import 'package:pweb/providers/two_factor.dart';
|
|||||||
import 'package:pweb/providers/upload_history.dart';
|
import 'package:pweb/providers/upload_history.dart';
|
||||||
import 'package:pweb/providers/wallets.dart';
|
import 'package:pweb/providers/wallets.dart';
|
||||||
import 'package:pweb/providers/wallet_transactions.dart';
|
import 'package:pweb/providers/wallet_transactions.dart';
|
||||||
|
// import 'package:pweb/services/amplitude.dart';
|
||||||
import 'package:pweb/services/operations.dart';
|
import 'package:pweb/services/operations.dart';
|
||||||
import 'package:pweb/services/payments/history.dart';
|
import 'package:pweb/services/payments/history.dart';
|
||||||
import 'package:pweb/services/posthog.dart';
|
|
||||||
import 'package:pweb/services/wallet_transactions.dart';
|
import 'package:pweb/services/wallet_transactions.dart';
|
||||||
import 'package:pweb/services/wallets.dart';
|
import 'package:pweb/services/wallets.dart';
|
||||||
|
|
||||||
@@ -40,9 +40,11 @@ void _setupLogging() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
|
||||||
await Constants.initialize();
|
await Constants.initialize();
|
||||||
await PosthogService.initialize();
|
|
||||||
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
|
|
||||||
|
// await AmplitudeService.initialize();
|
||||||
|
|
||||||
|
|
||||||
_setupLogging();
|
_setupLogging();
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import 'package:pshared/provider/recipient/pmethods.dart';
|
|||||||
import 'package:pshared/provider/recipient/provider.dart';
|
import 'package:pshared/provider/recipient/provider.dart';
|
||||||
|
|
||||||
import 'package:pweb/pages/address_book/form/view.dart';
|
import 'package:pweb/pages/address_book/form/view.dart';
|
||||||
import 'package:pweb/services/posthog.dart';
|
// import 'package:pweb/services/amplitude.dart';
|
||||||
import 'package:pweb/utils/error/snackbar.dart';
|
import 'package:pweb/utils/error/snackbar.dart';
|
||||||
import 'package:pweb/utils/payment/label.dart';
|
import 'package:pweb/utils/payment/label.dart';
|
||||||
import 'package:pweb/utils/snackbar.dart';
|
import 'package:pweb/utils/snackbar.dart';
|
||||||
@@ -105,11 +105,11 @@ class _AdressBookRecipientFormState extends State<AdressBookRecipientForm> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await PosthogService.recipientAddCompleted(
|
// AmplitudeService.recipientAddCompleted(
|
||||||
_type,
|
// _type,
|
||||||
_status,
|
// _status,
|
||||||
_methods.keys.toSet(),
|
// _methods.keys.toSet(),
|
||||||
);
|
// );
|
||||||
final recipient = await executeActionWithNotification(
|
final recipient = await executeActionWithNotification(
|
||||||
context: context,
|
context: context,
|
||||||
action: _doSave,
|
action: _doSave,
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import 'package:pshared/provider/account.dart';
|
|||||||
|
|
||||||
import 'package:pweb/app/router/pages.dart';
|
import 'package:pweb/app/router/pages.dart';
|
||||||
import 'package:pweb/widgets/error/snackbar.dart';
|
import 'package:pweb/widgets/error/snackbar.dart';
|
||||||
import 'package:pweb/services/posthog.dart';
|
|
||||||
|
|
||||||
import 'package:pweb/generated/i18n/app_localizations.dart';
|
import 'package:pweb/generated/i18n/app_localizations.dart';
|
||||||
|
|
||||||
@@ -18,38 +17,15 @@ class AccountLoader extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) => Consumer<AccountProvider>(builder: (context, provider, _) {
|
Widget build(BuildContext context) => Consumer<AccountProvider>(builder: (context, provider, _) {
|
||||||
if (provider.account != null) {
|
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
|
||||||
final account = provider.account;
|
|
||||||
if (account != null) {
|
|
||||||
PosthogService.identify(account);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return child;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (provider.error != null) {
|
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
|
||||||
postNotifyUserOfErrorX(
|
|
||||||
context: context,
|
|
||||||
errorSituation: AppLocalizations.of(context)!.errorLogin,
|
|
||||||
exception: provider.error!,
|
|
||||||
);
|
|
||||||
navigateAndReplace(context, Pages.login);
|
|
||||||
});
|
|
||||||
return const Center(child: CircularProgressIndicator());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (provider.restoreFuture == null) {
|
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
|
||||||
provider.restoreIfPossible().catchError((error, stack) {
|
|
||||||
debugPrint('Account restore failed: $error');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
return const Center(child: CircularProgressIndicator());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (provider.isLoading) return const Center(child: CircularProgressIndicator());
|
if (provider.isLoading) return const Center(child: CircularProgressIndicator());
|
||||||
|
if (provider.error != null) {
|
||||||
|
postNotifyUserOfErrorX(
|
||||||
|
context: context,
|
||||||
|
errorSituation: AppLocalizations.of(context)!.errorLogin,
|
||||||
|
exception: provider.error!,
|
||||||
|
);
|
||||||
|
navigateAndReplace(context, Pages.login);
|
||||||
|
}
|
||||||
if (provider.account == null) {
|
if (provider.account == null) {
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) => navigateAndReplace(context, Pages.login));
|
WidgetsBinding.instance.addPostFrameCallback((_) => navigateAndReplace(context, Pages.login));
|
||||||
return const Center(child: CircularProgressIndicator());
|
return const Center(child: CircularProgressIndicator());
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import 'package:pweb/widgets/password/password.dart';
|
|||||||
import 'package:pweb/widgets/username.dart';
|
import 'package:pweb/widgets/username.dart';
|
||||||
import 'package:pweb/widgets/vspacer.dart';
|
import 'package:pweb/widgets/vspacer.dart';
|
||||||
import 'package:pweb/widgets/error/snackbar.dart';
|
import 'package:pweb/widgets/error/snackbar.dart';
|
||||||
import 'package:pweb/services/posthog.dart';
|
|
||||||
|
|
||||||
import 'package:pweb/generated/i18n/app_localizations.dart';
|
import 'package:pweb/generated/i18n/app_localizations.dart';
|
||||||
|
|
||||||
@@ -44,14 +43,10 @@ class _LoginFormState extends State<LoginForm> {
|
|||||||
password: _passwordController.text,
|
password: _passwordController.text,
|
||||||
locale: context.read<LocaleProvider>().locale.languageCode,
|
locale: context.read<LocaleProvider>().locale.languageCode,
|
||||||
);
|
);
|
||||||
await PosthogService.login(pending: outcome.isPending);
|
|
||||||
if (outcome.isPending) {
|
if (outcome.isPending) {
|
||||||
// TODO: fix context usage
|
// TODO: fix context usage
|
||||||
navigateAndReplace(context, Pages.sfactor);
|
navigateAndReplace(context, Pages.sfactor);
|
||||||
} else {
|
} else {
|
||||||
if (outcome.account != null) {
|
|
||||||
await PosthogService.identify(outcome.account!);
|
|
||||||
}
|
|
||||||
onLogin();
|
onLogin();
|
||||||
}
|
}
|
||||||
return 'ok';
|
return 'ok';
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import 'package:pweb/providers/payment_flow.dart';
|
|||||||
import 'package:pweb/pages/payment_methods/payment_page/body.dart';
|
import 'package:pweb/pages/payment_methods/payment_page/body.dart';
|
||||||
import 'package:pweb/providers/wallets.dart';
|
import 'package:pweb/providers/wallets.dart';
|
||||||
import 'package:pweb/widgets/sidebar/destinations.dart';
|
import 'package:pweb/widgets/sidebar/destinations.dart';
|
||||||
import 'package:pweb/services/posthog.dart';
|
|
||||||
|
|
||||||
|
|
||||||
class PaymentPage extends StatefulWidget {
|
class PaymentPage extends StatefulWidget {
|
||||||
@@ -110,7 +109,7 @@ class _PaymentPageState extends State<PaymentPage> {
|
|||||||
|
|
||||||
void _handleSendPayment() {
|
void _handleSendPayment() {
|
||||||
// TODO: Handle Payment logic
|
// TODO: Handle Payment logic
|
||||||
PosthogService.paymentInitiated(method: _flowProvider.selectedType);
|
// AmplitudeService.paymentInitiated();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import 'package:provider/provider.dart';
|
|||||||
|
|
||||||
import 'package:pshared/provider/locale.dart';
|
import 'package:pshared/provider/locale.dart';
|
||||||
|
|
||||||
import 'package:pweb/services/posthog.dart';
|
// import 'package:pweb/services/amplitude.dart';
|
||||||
|
|
||||||
import 'package:pweb/generated/i18n/app_localizations.dart';
|
import 'package:pweb/generated/i18n/app_localizations.dart';
|
||||||
|
|
||||||
@@ -58,7 +58,7 @@ class LocalePicker extends StatelessWidget {
|
|||||||
onChanged: (locale) {
|
onChanged: (locale) {
|
||||||
if (locale != null) {
|
if (locale != null) {
|
||||||
localeProvider.setLocale(locale);
|
localeProvider.setLocale(locale);
|
||||||
PosthogService.localeChanged(locale);
|
// AmplitudeService.localeChanged(locale);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
decoration: const InputDecoration(
|
decoration: const InputDecoration(
|
||||||
|
|||||||
@@ -1,136 +0,0 @@
|
|||||||
import 'package:flutter/material.dart';
|
|
||||||
|
|
||||||
import 'package:logging/logging.dart';
|
|
||||||
|
|
||||||
import 'package:posthog_flutter/posthog_flutter.dart';
|
|
||||||
|
|
||||||
import 'package:pshared/config/constants.dart';
|
|
||||||
import 'package:pshared/models/account/account.dart';
|
|
||||||
import 'package:pshared/models/payment/type.dart';
|
|
||||||
import 'package:pshared/models/recipient/status.dart';
|
|
||||||
import 'package:pshared/models/recipient/type.dart';
|
|
||||||
|
|
||||||
import 'package:pweb/widgets/sidebar/destinations.dart';
|
|
||||||
|
|
||||||
|
|
||||||
class PosthogService {
|
|
||||||
static final _logger = Logger('service.posthog');
|
|
||||||
static String? _identifiedUserId;
|
|
||||||
static bool _initialized = false;
|
|
||||||
|
|
||||||
static bool get isEnabled => _initialized;
|
|
||||||
|
|
||||||
static Future<void> initialize() async {
|
|
||||||
final apiKey = Constants.posthogApiKey;
|
|
||||||
if (apiKey.isEmpty) {
|
|
||||||
_logger.warning('PostHog API key is not configured, analytics disabled.');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
final config = PostHogConfig(apiKey)
|
|
||||||
..host = Constants.posthogHost
|
|
||||||
..captureApplicationLifecycleEvents = true;
|
|
||||||
await Posthog().setup(config);
|
|
||||||
await Posthog().register('client_id', Constants.clientId);
|
|
||||||
_initialized = true;
|
|
||||||
_logger.info('PostHog initialized with host ${Constants.posthogHost}');
|
|
||||||
} catch (e, st) {
|
|
||||||
_initialized = false;
|
|
||||||
_logger.warning('Failed to initialize PostHog: $e', e, st);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static Future<void> identify(Account account) async {
|
|
||||||
if (!_initialized) return;
|
|
||||||
if (_identifiedUserId == account.id) return;
|
|
||||||
|
|
||||||
await Posthog().identify(
|
|
||||||
userId: account.id,
|
|
||||||
userProperties: {
|
|
||||||
'email': account.login,
|
|
||||||
'name': account.name,
|
|
||||||
'locale': account.locale,
|
|
||||||
'created_at': account.createdAt.toIso8601String(),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
_identifiedUserId = account.id;
|
|
||||||
}
|
|
||||||
|
|
||||||
static Future<void> reset() async {
|
|
||||||
if (!_initialized) return;
|
|
||||||
_identifiedUserId = null;
|
|
||||||
await Posthog().reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
static Future<void> login({required bool pending}) async {
|
|
||||||
if (!_initialized) return;
|
|
||||||
await _capture(
|
|
||||||
'login',
|
|
||||||
properties: {
|
|
||||||
'result': pending ? 'pending' : 'success',
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
static Future<void> pageOpened(PayoutDestination page, {String? path, String? uiSource}) async {
|
|
||||||
if (!_initialized) return;
|
|
||||||
return _capture(
|
|
||||||
'pageOpened',
|
|
||||||
properties: {
|
|
||||||
'page': page.name,
|
|
||||||
if (path != null) 'path': path,
|
|
||||||
if (uiSource != null) 'uiSource': uiSource,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
static Future<void> localeChanged(Locale locale) async {
|
|
||||||
if (!_initialized) return;
|
|
||||||
return _capture(
|
|
||||||
'localeChanged',
|
|
||||||
properties: {'locale': locale.toLanguageTag()},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
static Future<void> recipientAddCompleted(
|
|
||||||
RecipientType type,
|
|
||||||
RecipientStatus status,
|
|
||||||
Set<PaymentType> methods,
|
|
||||||
) async {
|
|
||||||
if (!_initialized) return;
|
|
||||||
return _capture(
|
|
||||||
'recipientAddCompleted',
|
|
||||||
properties: {
|
|
||||||
'methods': methods.map((m) => m.name).toList(),
|
|
||||||
'type': type.name,
|
|
||||||
'status': status.name,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
static Future<void> paymentInitiated({PaymentType? method}) async {
|
|
||||||
if (!_initialized) return;
|
|
||||||
return _capture(
|
|
||||||
'paymentInitiated',
|
|
||||||
properties: {
|
|
||||||
if (method != null) 'method': method.name,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
static Future<void> _capture(
|
|
||||||
String eventName, {
|
|
||||||
Map<String, Object?>? properties,
|
|
||||||
}) async {
|
|
||||||
if (!_initialized) return;
|
|
||||||
final filtered = <String, Object>{};
|
|
||||||
if (properties != null) {
|
|
||||||
for (final entry in properties.entries) {
|
|
||||||
final value = entry.value;
|
|
||||||
if (value != null) filtered[entry.key] = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
await Posthog().capture(eventName: eventName, properties: filtered.isEmpty ? null : filtered);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -6,12 +6,10 @@ import 'package:pshared/provider/account.dart';
|
|||||||
import 'package:pshared/provider/permissions.dart';
|
import 'package:pshared/provider/permissions.dart';
|
||||||
|
|
||||||
import 'package:pweb/app/router/pages.dart';
|
import 'package:pweb/app/router/pages.dart';
|
||||||
import 'package:pweb/services/posthog.dart';
|
|
||||||
|
|
||||||
|
|
||||||
void logoutUtil(BuildContext context) {
|
void logoutUtil(BuildContext context) {
|
||||||
context.read<AccountProvider>().logout();
|
context.read<AccountProvider>().logout();
|
||||||
context.read<PermissionsProvider>().reset();
|
context.read<PermissionsProvider>().reset();
|
||||||
PosthogService.reset();
|
|
||||||
navigateAndReplace(context, Pages.login);
|
navigateAndReplace(context, Pages.login);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:pweb/services/posthog.dart';
|
// import 'package:pweb/services/amplitude.dart';
|
||||||
import 'package:pweb/widgets/sidebar/destinations.dart';
|
import 'package:pweb/widgets/sidebar/destinations.dart';
|
||||||
|
|
||||||
|
|
||||||
@@ -49,7 +49,7 @@ class SideMenuColumn extends StatelessWidget {
|
|||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
onSelected(item);
|
onSelected(item);
|
||||||
PosthogService.pageOpened(item, uiSource: 'sidebar');
|
// AmplitudeService.pageOpened(item, uiSource: 'sidebar');
|
||||||
},
|
},
|
||||||
borderRadius: BorderRadius.circular(12),
|
borderRadius: BorderRadius.circular(12),
|
||||||
hoverColor: theme.colorScheme.primaryContainer,
|
hoverColor: theme.colorScheme.primaryContainer,
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import amplitude_flutter
|
|||||||
import file_selector_macos
|
import file_selector_macos
|
||||||
import flutter_timezone
|
import flutter_timezone
|
||||||
import path_provider_foundation
|
import path_provider_foundation
|
||||||
import posthog_flutter
|
|
||||||
import share_plus
|
import share_plus
|
||||||
import shared_preferences_foundation
|
import shared_preferences_foundation
|
||||||
import sqflite_darwin
|
import sqflite_darwin
|
||||||
@@ -20,7 +19,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
|||||||
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
|
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
|
||||||
FlutterTimezonePlugin.register(with: registry.registrar(forPlugin: "FlutterTimezonePlugin"))
|
FlutterTimezonePlugin.register(with: registry.registrar(forPlugin: "FlutterTimezonePlugin"))
|
||||||
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
||||||
PosthogFlutterPlugin.register(with: registry.registrar(forPlugin: "PosthogFlutterPlugin"))
|
|
||||||
SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))
|
SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))
|
||||||
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
||||||
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
|
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ dependencies:
|
|||||||
sdk: flutter
|
sdk: flutter
|
||||||
pshared:
|
pshared:
|
||||||
path: ../pshared
|
path: ../pshared
|
||||||
posthog_flutter: ^4.0.1
|
|
||||||
|
|
||||||
# The following adds the Cupertino Icons font to your application.
|
# The following adds the Cupertino Icons font to your application.
|
||||||
# Use with the CupertinoIcons class for iOS style icons.
|
# Use with the CupertinoIcons class for iOS style icons.
|
||||||
|
|||||||
Reference in New Issue
Block a user