From c080ca3607678de65b61100b9c1e5815e2066e7a Mon Sep 17 00:00:00 2001 From: provokateurin Date: Fri, 10 May 2024 18:33:16 +0200 Subject: [PATCH] refactor(neon_framework): Separate account settings sections Signed-off-by: provokateurin --- .../lib/src/pages/account_settings.dart | 117 ++++++++++-------- 1 file changed, 65 insertions(+), 52 deletions(-) diff --git a/packages/neon_framework/lib/src/pages/account_settings.dart b/packages/neon_framework/lib/src/pages/account_settings.dart index e4397acb0c0..be4d4e807c9 100644 --- a/packages/neon_framework/lib/src/pages/account_settings.dart +++ b/packages/neon_framework/lib/src/pages/account_settings.dart @@ -5,12 +5,14 @@ import 'package:meta/meta.dart'; import 'package:neon_framework/models.dart'; import 'package:neon_framework/src/bloc/result.dart'; import 'package:neon_framework/src/blocs/accounts.dart'; +import 'package:neon_framework/src/blocs/user_details.dart'; import 'package:neon_framework/src/router.dart'; import 'package:neon_framework/src/settings/widgets/custom_settings_tile.dart'; import 'package:neon_framework/src/settings/widgets/option_settings_tile.dart'; import 'package:neon_framework/src/settings/widgets/settings_category.dart'; import 'package:neon_framework/src/settings/widgets/settings_list.dart'; import 'package:neon_framework/src/theme/dialog.dart'; +import 'package:neon_framework/src/utils/account_options.dart'; import 'package:neon_framework/src/widgets/dialog.dart'; import 'package:neon_framework/src/widgets/error.dart'; import 'package:neon_framework/utils.dart'; @@ -102,58 +104,8 @@ class AccountSettingsPage extends StatelessWidget { final body = SettingsList( categories: [ - SettingsCategory( - title: Text(NeonLocalizations.of(context).accountOptionsCategoryStorageInfo), - tiles: [ - ResultBuilder.behaviorSubject( - subject: userDetailsBloc.userDetails, - builder: (context, userDetails) { - if (userDetails.hasError) { - return NeonError( - userDetails.error ?? 'Something went wrong', - type: NeonErrorType.listTile, - onRetry: userDetailsBloc.refresh, - ); - } - - double? value; - Widget? subtitle; - if (userDetails.hasData) { - final quotaRelative = userDetails.data?.quota.relative ?? 0; - final quotaTotal = userDetails.data?.quota.total ?? 0; - final quotaUsed = userDetails.data?.quota.used ?? 0; - - value = quotaRelative / 100; - subtitle = Text( - NeonLocalizations.of(context).accountOptionsQuotaUsedOf( - filesize(quotaUsed, 1), - filesize(quotaTotal, 1), - quotaRelative.toString(), - ), - ); - } - - return CustomSettingsTile( - title: LinearProgressIndicator( - value: value, - minHeight: isCupertino(context) ? 15 : null, - borderRadius: BorderRadius.circular(isCupertino(context) ? 5 : 3), - backgroundColor: Theme.of(context).colorScheme.primary.withOpacity(0.3), - ), - subtitle: subtitle, - ); - }, - ), - ], - ), - SettingsCategory( - title: Text(NeonLocalizations.of(context).optionsCategoryGeneral), - tiles: [ - SelectSettingsTile( - option: options.initialApp, - ), - ], - ), + _buildGeneralSection(context, options), + _buildStorageSection(context, userDetailsBloc), ], ); @@ -173,4 +125,65 @@ class AccountSettingsPage extends StatelessWidget { ), ); } + + Widget _buildGeneralSection(BuildContext context, AccountOptions options) { + return SettingsCategory( + title: Text(NeonLocalizations.of(context).optionsCategoryGeneral), + tiles: [ + SelectSettingsTile( + option: options.initialApp, + ), + ], + ); + } + + Widget _buildStorageSection( + BuildContext context, + UserDetailsBloc userDetailsBloc, + ) { + return SettingsCategory( + title: Text(NeonLocalizations.of(context).accountOptionsCategoryStorageInfo), + tiles: [ + ResultBuilder.behaviorSubject( + subject: userDetailsBloc.userDetails, + builder: (context, userDetails) { + if (userDetails.hasError) { + return NeonError( + userDetails.error, + type: NeonErrorType.listTile, + onRetry: userDetailsBloc.refresh, + ); + } + + double? value; + Widget? subtitle; + if (userDetails.hasData) { + final quotaRelative = userDetails.data?.quota.relative ?? 0; + final quotaTotal = userDetails.data?.quota.total ?? 0; + final quotaUsed = userDetails.data?.quota.used ?? 0; + + value = quotaRelative / 100; + subtitle = Text( + NeonLocalizations.of(context).accountOptionsQuotaUsedOf( + filesize(quotaUsed, 1), + filesize(quotaTotal, 1), + quotaRelative.toString(), + ), + ); + } + + return CustomSettingsTile( + title: LinearProgressIndicator( + value: value, + minHeight: isCupertino(context) ? 15 : null, + borderRadius: BorderRadius.circular(isCupertino(context) ? 5 : 3), + backgroundColor: Theme.of(context).colorScheme.primary.withOpacity(0.3), + ), + subtitle: subtitle, + ); + }, + ), + ], + ); + } }