Skip to content

Commit a15fbb7

Browse files
authored
Merge pull request #1012 from nextcloud/refactor/neon/settings
Refactor/neon/settings
2 parents b5c1ef2 + 08c6d21 commit a15fbb7

20 files changed

+790
-422
lines changed

.cspell/dart_flutter.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
autofocus
2+
cupertino
23
endtemplate
34
expando
45
gapless

packages/app/pubspec.lock

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,14 @@ packages:
185185
url: "https://pub.dev"
186186
source: hosted
187187
version: "0.17.3"
188+
cupertino_icons:
189+
dependency: transitive
190+
description:
191+
name: cupertino_icons
192+
sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d
193+
url: "https://pub.dev"
194+
source: hosted
195+
version: "1.0.6"
188196
dbus:
189197
dependency: transitive
190198
description:

packages/neon/neon/lib/src/pages/account_settings.dart

Lines changed: 53 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ import 'package:neon/src/blocs/accounts.dart';
88
import 'package:neon/src/models/account.dart';
99
import 'package:neon/src/router.dart';
1010
import 'package:neon/src/settings/widgets/custom_settings_tile.dart';
11-
import 'package:neon/src/settings/widgets/select_settings_tile.dart';
11+
import 'package:neon/src/settings/widgets/option_settings_tile.dart';
1212
import 'package:neon/src/settings/widgets/settings_category.dart';
1313
import 'package:neon/src/settings/widgets/settings_list.dart';
1414
import 'package:neon/src/theme/dialog.dart';
15+
import 'package:neon/src/utils/adaptive.dart';
1516
import 'package:neon/src/utils/confirmation_dialog.dart';
1617
import 'package:neon/src/widgets/error.dart';
17-
import 'package:neon/src/widgets/linear_progress_indicator.dart';
1818
import 'package:nextcloud/provisioning_api.dart' as provisioning_api;
1919

2020
/// Account settings page.
@@ -84,61 +84,62 @@ class AccountSettingsPage extends StatelessWidget {
8484
],
8585
);
8686

87-
final body = ResultBuilder<provisioning_api.UserDetails>.behaviorSubject(
88-
subject: userDetailsBloc.userDetails,
89-
builder: (final context, final userDetails) {
90-
final quotaRelative = userDetails.data?.quota.relative?.$int ?? userDetails.data?.quota.relative?.$double ?? 0;
91-
final quotaTotal = userDetails.data?.quota.total?.$int ?? userDetails.data?.quota.total?.$double ?? 0;
92-
final quotaUsed = userDetails.data?.quota.used?.$int ?? userDetails.data?.quota.used?.$double ?? 0;
87+
final body = SettingsList(
88+
categories: [
89+
SettingsCategory(
90+
title: Text(NeonLocalizations.of(context).accountOptionsCategoryStorageInfo),
91+
tiles: [
92+
ResultBuilder<provisioning_api.UserDetails>.behaviorSubject(
93+
subject: userDetailsBloc.userDetails,
94+
builder: (final context, final userDetails) {
95+
if (userDetails.hasError) {
96+
return NeonError(
97+
userDetails.error ?? 'Something went wrong',
98+
type: NeonErrorType.listTile,
99+
onRetry: userDetailsBloc.refresh,
100+
);
101+
}
93102

94-
return SettingsList(
95-
categories: [
96-
SettingsCategory(
97-
title: Text(NeonLocalizations.of(context).accountOptionsCategoryStorageInfo),
98-
tiles: [
99-
CustomSettingsTile(
100-
title: Column(
101-
crossAxisAlignment: CrossAxisAlignment.start,
102-
children: [
103-
if (userDetails.hasData) ...[
104-
LinearProgressIndicator(
105-
value: quotaRelative / 100,
106-
backgroundColor: Theme.of(context).colorScheme.primary.withOpacity(0.3),
107-
),
108-
const SizedBox(
109-
height: 10,
110-
),
111-
Text(
112-
NeonLocalizations.of(context).accountOptionsQuotaUsedOf(
113-
filesize(quotaUsed, 1),
114-
filesize(quotaTotal, 1),
115-
quotaRelative.toString(),
116-
),
117-
),
118-
],
119-
NeonError(
120-
userDetails.error,
121-
onRetry: userDetailsBloc.refresh,
122-
),
123-
NeonLinearProgressIndicator(
124-
visible: userDetails.isLoading,
125-
),
126-
],
103+
double? value;
104+
Widget? subtitle;
105+
if (userDetails.hasData) {
106+
final quotaRelative =
107+
userDetails.data?.quota.relative?.$int ?? userDetails.data?.quota.relative?.$double ?? 0;
108+
final quotaTotal = userDetails.data?.quota.total?.$int ?? userDetails.data?.quota.total?.$double ?? 0;
109+
final quotaUsed = userDetails.data?.quota.used?.$int ?? userDetails.data?.quota.used?.$double ?? 0;
110+
111+
value = quotaRelative / 100;
112+
subtitle = Text(
113+
NeonLocalizations.of(context).accountOptionsQuotaUsedOf(
114+
filesize(quotaUsed, 1),
115+
filesize(quotaTotal, 1),
116+
quotaRelative.toString(),
117+
),
118+
);
119+
}
120+
121+
return CustomSettingsTile(
122+
title: LinearProgressIndicator(
123+
value: value,
124+
minHeight: isCupertino(context) ? 15 : null,
125+
borderRadius: BorderRadius.circular(isCupertino(context) ? 5 : 3),
126+
backgroundColor: Theme.of(context).colorScheme.primary.withOpacity(0.3),
127127
),
128-
),
129-
],
128+
subtitle: subtitle,
129+
);
130+
},
130131
),
131-
SettingsCategory(
132-
title: Text(NeonLocalizations.of(context).optionsCategoryGeneral),
133-
tiles: [
134-
SelectSettingsTile(
135-
option: options.initialApp,
136-
),
137-
],
132+
],
133+
),
134+
SettingsCategory(
135+
title: Text(NeonLocalizations.of(context).optionsCategoryGeneral),
136+
tiles: [
137+
SelectSettingsTile(
138+
option: options.initialApp,
138139
),
139140
],
140-
);
141-
},
141+
),
142+
],
142143
);
143144

144145
return Scaffold(

0 commit comments

Comments
 (0)