You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fluffychat/lib/pangea/widgets/subscription/subscription_options.dart

144 lines
4.6 KiB
Dart

// Flutter imports:
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/pangea/controllers/pangea_controller.dart';
import 'package:fluffychat/pangea/controllers/subscription_controller.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
class SubscriptionOptions extends StatelessWidget {
final PangeaController pangeaController;
const SubscriptionOptions({
super.key,
required this.pangeaController,
});
@override
Widget build(BuildContext context) {
return Wrap(
alignment: WrapAlignment.center,
direction: Axis.horizontal,
spacing: 10,
children: pangeaController.userController.inTrialWindow
? [
SubscriptionCard(
onTap: () => pangeaController.subscriptionController
.submitSubscriptionChange(
SubscriptionDetails(
price: 0,
id: "",
periodType: 'trial',
),
context,
),
title: L10n.of(context)!.freeTrial,
description: L10n.of(context)!.freeTrialDesc,
buttonText: L10n.of(context)!.activateTrial,
),
]
: pangeaController
.subscriptionController.subscription!.availableSubscriptions
.map(
(subscription) => SubscriptionCard(
subscription: subscription,
onTap: () {
pangeaController.subscriptionController
.submitSubscriptionChange(
subscription,
context,
);
},
title: subscription.isTrial
? L10n.of(context)!.oneWeekTrial
: subscription.displayName(context),
enabled: !subscription.isTrial,
description: subscription.isTrial
? L10n.of(context)!.trialPeriodExpired
: null,
),
)
.toList(),
);
}
}
class SubscriptionCard extends StatelessWidget {
final SubscriptionDetails? subscription;
final void Function()? onTap;
final String? title;
final String? description;
final String? buttonText;
final bool enabled;
const SubscriptionCard({
super.key,
this.subscription,
required this.onTap,
this.title,
this.description,
this.buttonText,
this.enabled = true,
});
@override
Widget build(BuildContext context) {
final ButtonStyle buttonStyle = OutlinedButton.styleFrom(
side: enabled ? null : BorderSide(color: Colors.grey[600]!),
foregroundColor: Colors.white,
backgroundColor: AppConfig.primaryColor,
disabledForegroundColor: const Color.fromARGB(255, 200, 200, 200),
disabledBackgroundColor: Colors.grey[600],
);
return Card(
color: enabled ? null : const Color.fromARGB(255, 245, 244, 244),
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(10)),
),
child: SizedBox(
width: AppConfig.columnWidth * 0.6,
height: 200,
child: Padding(
padding: const EdgeInsets.all(25),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
title ?? subscription?.displayName(context) ?? '',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 20,
color:
enabled ? null : const Color.fromARGB(255, 174, 174, 174),
),
),
Text(
description ?? subscription?.displayPrice(context) ?? '',
textAlign: TextAlign.center,
style: TextStyle(
color:
enabled ? null : const Color.fromARGB(255, 174, 174, 174),
),
),
OutlinedButton(
onPressed: enabled
? () {
if (onTap != null) onTap!();
Navigator.of(context).pop();
}
: null,
style: buttonStyle,
child: Text(
buttonText ?? L10n.of(context)!.subscribe,
),
),
],
),
),
),
);
}
}