activate trial with button on paywall

pull/795/head
ggurdin 2 years ago
parent 749daca14b
commit 46ff2f3d4c

@ -3948,5 +3948,7 @@
"placeholders": {
"expiration": {}
}
}
},
"freeTrialDesc": "New users recieve a one week free trial of Pangea Chat",
"activateTrial": "Activate Trial"
}

@ -60,8 +60,8 @@ class SubscriptionController extends BaseController {
: MobileSubscriptionInfo(pangeaController: _pangeaController);
await subscription!.configure();
if (!isSubscribed) {
addNewAccountTrial();
if (activatedNewUserTrial) {
setNewUserTrial();
}
initialized = true;
@ -78,31 +78,26 @@ class SubscriptionController extends BaseController {
}
}
void addNewAccountTrial() {
// determine when profile was created
final String? profileCreatedAt =
_pangeaController.userController.userModel?.profile?.createdAt;
if (profileCreatedAt == null) {
ErrorHandler.logError(
m: "Null profileCreatedAt in addNewAccountTrial",
s: StackTrace.current,
);
return;
}
final String activatedTrialKey = 'activatedTrial';
final DateTime creationTimestamp = DateTime.parse(profileCreatedAt);
final bool accountIsNew = creationTimestamp.isAfter(
DateTime.now().subtract(const Duration(days: 7)),
);
bool get activatedNewUserTrial =>
_pangeaController.userController.inTrialWindow &&
(_pangeaController.pStoreService.read(activatedTrialKey) ?? false);
// if account qualifies, grant trial
if (accountIsNew) {
final int daysRemaining = DateTime.now()
.add(const Duration(days: 7))
.difference(creationTimestamp)
.inDays;
subscription?.setTrial(daysRemaining);
}
void activateNewUserTrial() {
_pangeaController.pStoreService.save(activatedTrialKey, true);
setNewUserTrial();
}
void setNewUserTrial() {
final String profileCreatedAt =
_pangeaController.userController.userModel!.profile!.createdAt;
final DateTime creationTimestamp = DateTime.parse(profileCreatedAt);
final int daysRemaining = DateTime.now()
.add(const Duration(days: 7))
.difference(creationTimestamp)
.inDays;
subscription?.setTrial(daysRemaining);
}
Future<void> updateCustomerInfo() async {

@ -4,14 +4,14 @@ import 'dart:developer';
// Package imports:
import 'package:collection/collection.dart';
import 'package:jwt_decode/jwt_decode.dart';
import 'package:matrix/matrix.dart' as matrix;
// Project imports:
import 'package:fluffychat/pangea/constants/model_keys.dart';
import 'package:fluffychat/pangea/controllers/base_controller.dart';
import 'package:fluffychat/pangea/controllers/pangea_controller.dart';
import 'package:fluffychat/widgets/fluffy_chat_app.dart';
import 'package:jwt_decode/jwt_decode.dart';
import 'package:matrix/matrix.dart' as matrix;
import '../constants/local.key.dart';
import '../models/user_model.dart';
import '../repo/user_repo.dart';
@ -111,6 +111,16 @@ class UserController extends BaseController {
}
}
bool get inTrialWindow {
final String? createdAt = userModel?.profile?.createdAt;
if (createdAt == null) {
return false;
}
return DateTime.parse(createdAt).isAfter(
DateTime.now().subtract(const Duration(days: 7)),
);
}
redirectToUserInfo() {
// _pangeaController.matrix.router!.currentState!.to(
// "/home/connect/user_age",

@ -1,19 +1,18 @@
// Flutter imports:
import 'package:flutter/material.dart';
// Package imports:
import 'package:flutter_gen/gen_l10n/l10n.dart';
// Project imports:
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/pangea/controllers/pangea_controller.dart';
import 'package:fluffychat/pangea/widgets/subscription/subscription_options.dart';
import 'package:flutter/material.dart';
// Package imports:
import 'package:flutter_gen/gen_l10n/l10n.dart';
class SubscriptionPaywall extends StatelessWidget {
final PangeaController pangeaController;
const SubscriptionPaywall({
Key? key,
super.key,
required this.pangeaController,
}) : super(key: key);
});
@override
Widget build(BuildContext context) {
@ -31,26 +30,79 @@ class SubscriptionPaywall extends StatelessWidget {
),
body: Padding(
padding: const EdgeInsets.all(20),
child: Column(
children: [
if (pangeaController.matrixState.client.rooms.length > 1) ...[
child: SingleChildScrollView(
child: Column(
children: [
if (pangeaController.matrixState.client.rooms.length > 1) ...[
Text(
L10n.of(context)!.welcomeBack,
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 16),
),
const SizedBox(height: 20),
],
Text(
L10n.of(context)!.welcomeBack,
L10n.of(context)!.subscriptionDesc,
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 16),
),
const SizedBox(height: 20),
pangeaController.userController.inTrialWindow
? FreeTrialCard(
pangeaController: pangeaController,
)
: SubscriptionOptions(
pangeaController: pangeaController,
),
],
),
),
),
);
}
}
class FreeTrialCard extends StatelessWidget {
final PangeaController pangeaController;
const FreeTrialCard({super.key, required this.pangeaController});
@override
Widget build(BuildContext context) {
return Card(
shape: RoundedRectangleBorder(
side: BorderSide(
color: AppConfig.primaryColorLight.withAlpha(64),
),
borderRadius: const BorderRadius.all(Radius.zero),
),
child: SizedBox(
height: 250,
width: AppConfig.columnWidth * 0.75,
child: Padding(
padding: const EdgeInsets.all(25),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
L10n.of(context)!.freeTrial,
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 24),
),
Text(
L10n.of(context)!.freeTrialDesc,
textAlign: TextAlign.center,
),
OutlinedButton(
onPressed: () {
pangeaController.subscriptionController
.activateNewUserTrial();
Navigator.of(context).pop();
},
child: Text(L10n.of(context)!.activateTrial),
),
],
Text(
L10n.of(context)!.subscriptionDesc,
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 16),
),
const SizedBox(height: 20),
SubscriptionOptions(
pangeaController: pangeaController,
),
],
),
),
),
);

@ -756,7 +756,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"bn": [
@ -1521,7 +1523,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"bo": [
@ -2286,7 +2290,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"ca": [
@ -3046,7 +3052,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"cs": [
@ -3806,7 +3814,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"de": [
@ -4566,7 +4576,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"el": [
@ -5331,7 +5343,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"eo": [
@ -6091,7 +6105,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"es": [
@ -6115,7 +6131,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"et": [
@ -6875,7 +6893,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"eu": [
@ -7635,7 +7655,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"fa": [
@ -8395,7 +8417,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"fi": [
@ -9155,7 +9179,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"fr": [
@ -9915,7 +9941,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"ga": [
@ -10675,7 +10703,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"gl": [
@ -11435,7 +11465,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"he": [
@ -12195,7 +12227,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"hi": [
@ -12960,7 +12994,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"hr": [
@ -13720,7 +13756,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"hu": [
@ -14480,7 +14518,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"id": [
@ -15240,7 +15280,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"ie": [
@ -16002,7 +16044,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"it": [
@ -16762,7 +16806,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"ja": [
@ -17522,7 +17568,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"ko": [
@ -18282,7 +18330,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"lt": [
@ -19042,7 +19092,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"lv": [
@ -19807,7 +19859,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"nb": [
@ -20567,7 +20621,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"nl": [
@ -21327,7 +21383,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"pl": [
@ -22087,7 +22145,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"pt": [
@ -22852,7 +22912,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"pt_BR": [
@ -23612,7 +23674,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"pt_PT": [
@ -24372,7 +24436,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"ro": [
@ -25132,7 +25198,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"ru": [
@ -25892,7 +25960,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"sk": [
@ -26653,7 +26723,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"sl": [
@ -27416,7 +27488,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"sr": [
@ -28176,7 +28250,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"sv": [
@ -28936,7 +29012,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"ta": [
@ -29701,7 +29779,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"th": [
@ -30466,7 +30546,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"tr": [
@ -31226,7 +31308,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"uk": [
@ -31986,7 +32070,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"vi": [
@ -32749,7 +32835,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"zh": [
@ -33509,7 +33597,9 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
],
"zh_Hant": [
@ -34269,6 +34359,8 @@
"groupName",
"createGroupAndInviteUsers",
"groupCanBeFoundViaSearch",
"trialExpiration"
"trialExpiration",
"freeTrialDesc",
"activateTrial"
]
}

Loading…
Cancel
Save