diff --git a/lib/src/localization/generated/app_localizations.dart b/lib/src/localization/generated/app_localizations.dart index 27e1e730..ada1cac6 100644 --- a/lib/src/localization/generated/app_localizations.dart +++ b/lib/src/localization/generated/app_localizations.dart @@ -3434,6 +3434,12 @@ abstract class AppLocalizations { /// **'Zero ads. Total privacy.'** String get subscriptionPledgeSubtitle; + /// No description provided for @subscriptionManage. + /// + /// In en, this message translates to: + /// **'Manage subscription'** + String get subscriptionManage; + /// No description provided for @dragToZoom. /// /// In en, this message translates to: diff --git a/lib/src/localization/generated/app_localizations_de.dart b/lib/src/localization/generated/app_localizations_de.dart index 22e2e94c..4cc7472e 100644 --- a/lib/src/localization/generated/app_localizations_de.dart +++ b/lib/src/localization/generated/app_localizations_de.dart @@ -1980,6 +1980,9 @@ class AppLocalizationsDe extends AppLocalizations { @override String get subscriptionPledgeSubtitle => 'Keine Werbung. Volle Privatsphäre.'; + @override + String get subscriptionManage => 'Abonnement verwalten'; + @override String get dragToZoom => 'Zum Zoomen ziehen'; diff --git a/lib/src/localization/generated/app_localizations_en.dart b/lib/src/localization/generated/app_localizations_en.dart index f5f04aa9..516a7d10 100644 --- a/lib/src/localization/generated/app_localizations_en.dart +++ b/lib/src/localization/generated/app_localizations_en.dart @@ -1965,6 +1965,9 @@ class AppLocalizationsEn extends AppLocalizations { @override String get subscriptionPledgeSubtitle => 'Zero ads. Total privacy.'; + @override + String get subscriptionManage => 'Manage subscription'; + @override String get dragToZoom => 'Drag to Zoom'; diff --git a/lib/src/localization/translations b/lib/src/localization/translations index 659bfb08..2f37f6cd 160000 --- a/lib/src/localization/translations +++ b/lib/src/localization/translations @@ -1 +1 @@ -Subproject commit 659bfb084ea26d5471dea6c6d8e1c950c95ecea2 +Subproject commit 2f37f6cd8ebd07dbc113bab0d5816bd37fb4fca6 diff --git a/lib/src/visual/views/settings/subscription/additional_users.view.dart b/lib/src/visual/views/settings/subscription/additional_users.view.dart index 483cad30..8ec1d889 100644 --- a/lib/src/visual/views/settings/subscription/additional_users.view.dart +++ b/lib/src/visual/views/settings/subscription/additional_users.view.dart @@ -13,6 +13,7 @@ import 'package:twonly/src/services/subscription.service.dart'; import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/visual/components/alert.dialog.dart'; import 'package:twonly/src/visual/components/snackbar.dart'; +import 'package:twonly/src/visual/elements/my_button.element.dart'; import 'package:twonly/src/visual/views/settings/subscription/select_additional_users.view.dart'; class AdditionalUsersView extends StatefulWidget { @@ -57,16 +58,18 @@ class _AdditionalUsersViewState extends State { } Future addAdditionalUser() async { - final selectedUserIds = await context.navPush( - SelectAdditionalUsers( - limit: _planLimit, - alreadySelected: - ballance?.additionalAccounts - .map((e) => e.userId.toInt()) - .toList() ?? - [], - ), - ) as List?; + final selectedUserIds = + await context.navPush( + SelectAdditionalUsers( + limit: _planLimit, + alreadySelected: + ballance?.additionalAccounts + .map((e) => e.userId.toInt()) + .toList() ?? + [], + ), + ) + as List?; if (selectedUserIds == null) return; for (final selectedUserId in selectedUserIds) { final res = await apiService.addAdditionalUser(Int64(selectedUserId)); @@ -110,7 +113,8 @@ class _AdditionalUsersViewState extends State { Center( child: Padding( padding: const EdgeInsets.all(12), - child: FilledButton( + child: MyButton( + variant: MyButtonVariant.primaryMiddle, onPressed: addAdditionalUser, child: Text( context.lang.additionalUserAddButton( diff --git a/lib/src/visual/views/settings/subscription/select_additional_users.view.dart b/lib/src/visual/views/settings/subscription/select_additional_users.view.dart index e62bb2e2..cddf355e 100644 --- a/lib/src/visual/views/settings/subscription/select_additional_users.view.dart +++ b/lib/src/visual/views/settings/subscription/select_additional_users.view.dart @@ -14,6 +14,7 @@ import 'package:twonly/src/visual/components/flame_counter.comp.dart'; import 'package:twonly/src/visual/context_menu/user.context_menu.dart'; import 'package:twonly/src/visual/decorations/input_text.decoration.dart'; import 'package:twonly/src/visual/elements/contact_chip.element.dart'; +import 'package:twonly/src/visual/elements/my_button.element.dart'; class SelectAdditionalUsers extends StatefulWidget { const SelectAdditionalUsers({ @@ -101,17 +102,24 @@ class _SelectAdditionalUsers extends State { title: Text(context.lang.additionalUserSelectTitle), ), floatingActionButtonAnimator: FloatingActionButtonAnimator.noAnimation, - floatingActionButton: FilledButton.icon( + floatingActionButton: MyButton( + variant: MyButtonVariant.primaryMiddle, onPressed: selectedUsers.isEmpty ? null : () => Navigator.pop(context, selectedUsers.toList()), - label: Text( - context.lang.additionalUserSelectButton( - widget.limit, - selectedUsers.length + widget.alreadySelected.length, - ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + const FaIcon(FontAwesomeIcons.userPlus, size: 16), + const SizedBox(width: 8), + Text( + context.lang.additionalUserSelectButton( + widget.limit, + selectedUsers.length + widget.alreadySelected.length, + ), + ), + ], ), - icon: const FaIcon(FontAwesomeIcons.userPlus), ), body: SafeArea( child: Padding( diff --git a/lib/src/visual/views/settings/subscription/subscription.view.dart b/lib/src/visual/views/settings/subscription/subscription.view.dart index 587e3f4c..1be08eaf 100644 --- a/lib/src/visual/views/settings/subscription/subscription.view.dart +++ b/lib/src/visual/views/settings/subscription/subscription.view.dart @@ -11,6 +11,7 @@ import 'package:twonly/src/providers/purchases.provider.dart'; import 'package:twonly/src/services/subscription.service.dart'; import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/visual/elements/better_list_title.element.dart'; +import 'package:twonly/src/visual/elements/my_button.element.dart'; import 'package:twonly/src/visual/views/settings/subscription/additional_users.view.dart'; import 'package:url_launcher/url_launcher.dart'; @@ -141,6 +142,23 @@ class _SubscriptionViewState extends State { ), ], const SizedBox(height: 30), + if (isPayingUser(currentPlan) || + currentPlan == SubscriptionPlan.Tester) ...[ + BetterListTile( + icon: FontAwesomeIcons.userPlus, + text: context.lang.manageAdditionalUsers, + subtitle: loaded ? Text('${context.lang.open}: 3') : null, + onTap: () async { + await context.navPush( + AdditionalUsersView( + ballance: ballance, + ), + ); + await initAsync(); + }, + ), + const Divider(), + ], BetterListTile( icon: FontAwesomeIcons.fileContract, text: context.lang.termsOfService, @@ -172,24 +190,6 @@ class _SubscriptionViewState extends State { ); }, ), - if (isPayingUser(currentPlan) || - currentPlan == SubscriptionPlan.Tester) - const Divider(), - if (isPayingUser(currentPlan) || - currentPlan == SubscriptionPlan.Tester) - BetterListTile( - icon: FontAwesomeIcons.userPlus, - text: context.lang.manageAdditionalUsers, - subtitle: loaded ? Text('${context.lang.open}: 3') : null, - onTap: () async { - await context.navPush( - AdditionalUsersView( - ballance: ballance, - ), - ); - await initAsync(); - }, - ), ], ), ); @@ -310,8 +310,10 @@ class _PlanCardState extends State { ), ), const SizedBox(height: 10), - if (currentPlan == widget.plan) - FilledButton.icon( + if (currentPlan == widget.plan && + widget.plan != SubscriptionPlan.Tester) + MyButton( + variant: MyButtonVariant.primaryMiddle, onPressed: () async { var url = 'https://apps.apple.com/account/subscriptions'; if (Platform.isAndroid) { @@ -323,53 +325,77 @@ class _PlanCardState extends State { mode: LaunchMode.externalApplication, ); }, - label: const Text('Manage subscription'), + child: Text(context.lang.subscriptionManage), ), if (widget.onPurchase != null && monthlyProduct != null && - !isPayingUser(currentPlan)) - OutlinedButton.icon( + !isPayingUser(currentPlan)) ...[ + const SizedBox(height: 8), + MyButton( + variant: MyButtonVariant.primaryMiddle, onPressed: _isLoading != null ? null : () => onButtonPressed(monthlyProduct), - icon: _isLoading == monthlyProduct - ? const SizedBox( - width: 10, - height: 10, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + if (_isLoading == monthlyProduct) ...[ + const SizedBox( + width: 14, + height: 14, child: CircularProgressIndicator.adaptive( - strokeWidth: 1, + strokeWidth: 2, ), - ) - : null, - label: Text( - context.lang.upgradeToPaidPlanButton( - widget.plan.name, - ' (${getFormattedPrice(monthlyProduct)}/${context.lang.month})', - ), + ), + const SizedBox(width: 8), + ], + Flexible( + child: Text( + context.lang.upgradeToPaidPlanButton( + widget.plan.name, + ' (${getFormattedPrice(monthlyProduct)}/${context.lang.month})', + ), + textAlign: TextAlign.center, + ), + ), + ], ), ), + ], if (widget.onPurchase != null && - (yearlyProduct != null && !isPayingUser(currentPlan))) - FilledButton.icon( + (yearlyProduct != null && !isPayingUser(currentPlan))) ...[ + const SizedBox(height: 8), + MyButton( + variant: MyButtonVariant.primaryMiddle, onPressed: _isLoading != null ? null : () => onButtonPressed(yearlyProduct), - icon: _isLoading == yearlyProduct - ? const SizedBox( - width: 10, - height: 10, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + if (_isLoading == yearlyProduct) ...[ + const SizedBox( + width: 14, + height: 14, child: CircularProgressIndicator.adaptive( - strokeWidth: 1, + strokeWidth: 2, ), - ) - : null, - label: Text( - context.lang.upgradeToPaidPlanButton( - widget.plan.name, - ' (${getFormattedPrice(yearlyProduct)}/${context.lang.year})', - ), + ), + const SizedBox(width: 8), + ], + Flexible( + child: Text( + context.lang.upgradeToPaidPlanButton( + widget.plan.name, + ' (${getFormattedPrice(yearlyProduct)}/${context.lang.year})', + ), + textAlign: TextAlign.center, + ), + ), + ], ), ), + ], ], ), ), diff --git a/pubspec.yaml b/pubspec.yaml index 3ab160ed..0e46b764 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: "twonly, a privacy-friendly way to connect with friends through sec publish_to: 'none' -version: 0.4.3+163 +version: 0.4.3+164 environment: sdk: ^3.11.0