Skip to content

Commit 5e19099

Browse files
author
Clement Guyon
committed
refacto: settings, router code hygiene
1 parent 304e72b commit 5e19099

File tree

41 files changed

+1165
-1155
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1165
-1155
lines changed

lib/config/go_routes/app_route_paths.dart

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,60 @@
33
/// This file contains all route paths used in go_router configuration
44
/// and navigation calls to ensure consistency and prevent typos.
55
abstract class AppRoutePaths {
6+
// Settings prefix check
7+
static const String roomsSettings = '/rooms/settings';
8+
9+
// Profile routes
10+
static const String profileSegment = 'profile';
11+
static const String profileFull = '/rooms/$profileSegment';
12+
static const String profileQrSegment = 'qr';
13+
static const String profileQrFull = '$profileFull/$profileQrSegment';
14+
15+
// Chat settings routes
16+
static const String chatSegment = 'chat';
17+
static const String chatFull = '/rooms/$chatSegment';
18+
static const String emotesSegment = 'emotes';
19+
static const String chatEmotesFull = '$chatFull/$emotesSegment';
20+
621
// Security routes
7-
static const String roomsSecurityFull = '/rooms/security';
22+
static const String securitySegment = 'security';
23+
static const String roomsSecurityFull = '/rooms/$securitySegment';
824
static const String contactsVisibilitySegment = 'contactsVisibility';
925
static const String contactsVisibilityFull =
1026
'$roomsSecurityFull/$contactsVisibilitySegment';
27+
static const String storiesSegment = 'stories';
28+
static const String securityStoriesFull =
29+
'$roomsSecurityFull/$storiesSegment';
30+
static const String blockedUsersSegment = 'blockedUsers';
31+
static const String securityBlockedUsersFull =
32+
'$roomsSecurityFull/$blockedUsersSegment';
33+
static const String threePidSegment = '3pid';
34+
static const String securityThreePidFull =
35+
'$roomsSecurityFull/$threePidSegment';
36+
37+
// Notifications routes
38+
static const String notificationsSegment = 'notifications';
39+
static const String notificationsFull = '/rooms/$notificationsSegment';
40+
41+
// Style routes
42+
static const String styleSegment = 'style';
43+
static const String styleFull = '/rooms/$styleSegment';
44+
45+
// App language routes
46+
static const String appLanguageSegment = 'appLanguage';
47+
static const String appLanguageFull = '/rooms/$appLanguageSegment';
48+
49+
// Devices routes
50+
static const String devicesSegment = 'devices';
51+
static const String devicesFull = '/rooms/$devicesSegment';
52+
53+
// Add account routes
54+
static const String addAccountSegment = 'addaccount';
55+
static const String addAccountFull = '/rooms/$addAccountSegment';
56+
static const String addAccountLoginSegment = 'login';
57+
static const String addAccountLoginFull =
58+
'$addAccountFull/$addAccountLoginSegment';
59+
static const String addAccountHomeserverPickerSegment = 'homeserverpicker';
60+
static const String addAccountHomeserverPickerFull =
61+
'$addAccountFull/$addAccountHomeserverPickerSegment';
1162
}

lib/config/go_routes/go_router.dart

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ abstract class AppRoutes {
143143
pageBuilder: (context, state, child) => defaultPageBuilder(
144144
context,
145145
!_responsive.isMobile(context) &&
146-
state.fullPath?.startsWith('/rooms/settings') == false
146+
state.fullPath?.startsWith(AppRoutePaths.roomsSettings) == false
147147
? AppAdaptiveScaffold(
148148
body: AppAdaptiveScaffoldBody(
149149
activeRoomId: state.pathParameters['roomid'],
@@ -296,58 +296,58 @@ abstract class AppRoutes {
296296
},
297297
),
298298
GoRoute(
299-
path: 'profile',
299+
path: AppRoutePaths.profileSegment,
300300
pageBuilder: (context, state) =>
301301
defaultPageBuilder(context, const SettingsProfile()),
302302
routes: [
303303
if (PlatformInfos.isMobile)
304304
GoRoute(
305-
path: 'qr',
305+
path: AppRoutePaths.profileQrSegment,
306306
pageBuilder: (context, state) =>
307307
defaultPageBuilder(context, const PersonalQr()),
308308
redirect: loggedOutRedirect,
309309
),
310310
],
311311
),
312312
GoRoute(
313-
path: 'notifications',
313+
path: AppRoutePaths.notificationsSegment,
314314
pageBuilder: (context, state) =>
315315
defaultPageBuilder(context, const SettingsNotifications()),
316316
redirect: loggedOutRedirect,
317317
),
318318
GoRoute(
319-
path: 'style',
319+
path: AppRoutePaths.styleSegment,
320320
pageBuilder: (context, state) =>
321321
defaultPageBuilder(context, const SettingsStyle()),
322322
redirect: loggedOutRedirect,
323323
),
324324
GoRoute(
325-
path: 'devices',
325+
path: AppRoutePaths.devicesSegment,
326326
pageBuilder: (context, state) =>
327327
defaultPageBuilder(context, const DevicesSettings()),
328328
redirect: loggedOutRedirect,
329329
),
330330
GoRoute(
331-
path: 'appLanguage',
331+
path: AppRoutePaths.appLanguageSegment,
332332
pageBuilder: (context, state) =>
333333
defaultPageBuilder(context, const SettingsAppLanguage()),
334334
redirect: loggedOutRedirect,
335335
),
336336
GoRoute(
337-
path: 'chat',
337+
path: AppRoutePaths.chatSegment,
338338
pageBuilder: (context, state) =>
339339
defaultPageBuilder(context, const SettingsChat()),
340340
routes: [
341341
GoRoute(
342-
path: 'emotes',
342+
path: AppRoutePaths.emotesSegment,
343343
pageBuilder: (context, state) =>
344344
defaultPageBuilder(context, const EmotesSettings()),
345345
),
346346
],
347347
redirect: loggedOutRedirect,
348348
),
349349
GoRoute(
350-
path: 'addaccount',
350+
path: AppRoutePaths.addAccountSegment,
351351
redirect: loggedOutRedirect,
352352
pageBuilder: (context, state) => defaultPageBuilder(
353353
context,
@@ -359,38 +359,38 @@ abstract class AppRoutes {
359359
),
360360
routes: [
361361
GoRoute(
362-
path: 'login',
362+
path: AppRoutePaths.addAccountLoginSegment,
363363
pageBuilder: (context, state) =>
364364
defaultPageBuilder(context, const Login()),
365365
redirect: loggedOutRedirect,
366366
),
367367
GoRoute(
368-
path: 'homeserverpicker',
368+
path: AppRoutePaths.addAccountHomeserverPickerSegment,
369369
pageBuilder: (context, state) =>
370370
defaultPageBuilder(context, const HomeserverPicker()),
371371
),
372372
],
373373
),
374374
GoRoute(
375-
path: 'security',
375+
path: AppRoutePaths.securitySegment,
376376
redirect: loggedOutRedirect,
377377
pageBuilder: (context, state) =>
378378
defaultPageBuilder(context, const SettingsSecurity()),
379379
routes: [
380380
GoRoute(
381-
path: 'stories',
381+
path: AppRoutePaths.storiesSegment,
382382
pageBuilder: (context, state) =>
383383
defaultPageBuilder(context, const SettingsStories()),
384384
redirect: loggedOutRedirect,
385385
),
386386
GoRoute(
387-
path: 'blockedUsers',
387+
path: AppRoutePaths.blockedUsersSegment,
388388
pageBuilder: (context, state) =>
389389
defaultPageBuilder(context, const BlockedUsers()),
390390
redirect: loggedOutRedirect,
391391
),
392392
GoRoute(
393-
path: '3pid',
393+
path: AppRoutePaths.threePidSegment,
394394
pageBuilder: (context, state) =>
395395
defaultPageBuilder(context, const Settings3Pid()),
396396
redirect: loggedOutRedirect,

lib/pages/chat_list/chat_list.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'dart:async';
22

33
import 'package:adaptive_dialog/adaptive_dialog.dart';
4+
import 'package:fluffychat/config/go_routes/app_route_paths.dart';
45
import 'package:collection/collection.dart';
56
import 'package:fluffychat/config/app_config.dart';
67
import 'package:fluffychat/config/first_column_inner_routes.dart';
@@ -741,7 +742,7 @@ class ChatListController extends State<ChatList>
741742
}
742743

743744
void onClickAvatar() {
744-
context.push('/rooms/profile');
745+
context.push(AppRoutePaths.profileFull);
745746
}
746747

747748
void _handleRecovery() {

lib/pages/contacts_tab/contacts_tab.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'package:fluffychat/config/go_routes/app_route_paths.dart';
12
import 'package:fluffychat/di/global/get_it_initializer.dart';
23
import 'package:fluffychat/presentation/mixins/address_book_mixin.dart';
34
import 'package:fluffychat/presentation/mixins/comparable_presentation_contact_mixin.dart';
@@ -89,7 +90,7 @@ class ContactsTabController extends State<ContactsTab>
8990
}
9091

9192
void goToSettingsProfile() {
92-
context.go('/rooms/profile');
93+
context.go(AppRoutePaths.profileFull);
9394
}
9495

9596
void goToDraftChat({

lib/pages/multiple_accounts/multiple_accounts_picker.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:collection/collection.dart';
2+
import 'package:fluffychat/config/go_routes/app_route_paths.dart';
23
import 'package:fluffychat/pages/twake_welcome/twake_welcome.dart';
34
import 'package:fluffychat/presentation/multiple_account/twake_chat_presentation_account.dart';
45
import 'package:fluffychat/utils/dialog/twake_dialog.dart';
@@ -79,7 +80,7 @@ class MultipleAccountsPickerController {
7980

8081
void _onAddAnotherAccount() {
8182
context.push(
82-
'/rooms/addaccount',
83+
AppRoutePaths.addAccountFull,
8384
extra: const TwakeWelcomeArg(twakeIdType: TwakeWelcomeType.otherAccounts),
8485
);
8586
}

lib/pages/search/search.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:dartz/dartz.dart' hide State;
2+
import 'package:fluffychat/config/go_routes/app_route_paths.dart';
23
import 'package:fluffychat/app_state/failure.dart';
34
import 'package:fluffychat/app_state/success.dart';
45
import 'package:fluffychat/di/global/get_it_initializer.dart';
@@ -103,7 +104,7 @@ class SearchController extends State<Search> with WidgetsBindingObserver {
103104
}
104105

105106
void goToSettingsProfile() {
106-
context.go('/rooms/profile');
107+
context.go(AppRoutePaths.profileFull);
107108
}
108109

109110
void onContactTap(ContactPresentationSearch contactPresentationSearch) {

lib/pages/settings_dashboard/settings/settings.dart

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,25 @@
11
import 'dart:async';
22

3+
import 'package:adaptive_dialog/adaptive_dialog.dart';
34
import 'package:fluffychat/config/app_config.dart';
5+
import 'package:fluffychat/config/go_routes/app_route_paths.dart';
46
import 'package:fluffychat/di/global/get_it_initializer.dart';
57
import 'package:fluffychat/domain/model/extensions/common_settings/common_settings_extensions.dart';
68
import 'package:fluffychat/domain/model/extensions/homeserver_summary_extensions.dart';
79
import 'package:fluffychat/domain/repository/federation_configurations_repository.dart';
810
import 'package:fluffychat/domain/repository/tom_configurations_repository.dart';
911
import 'package:fluffychat/event/twake_inapp_event_types.dart';
12+
import 'package:fluffychat/generated/l10n/app_localizations.dart';
1013
import 'package:fluffychat/pages/bootstrap/bootstrap_dialog.dart';
11-
import 'package:fluffychat/presentation/mixins/connect_page_mixin.dart';
1214
import 'package:fluffychat/presentation/enum/settings/settings_enum.dart';
1315
import 'package:fluffychat/presentation/extensions/client_extension.dart';
16+
import 'package:fluffychat/presentation/mixins/connect_page_mixin.dart';
1417
import 'package:fluffychat/utils/dialog/twake_dialog.dart';
1518
import 'package:fluffychat/utils/platform_infos.dart';
1619
import 'package:fluffychat/utils/url_launcher.dart';
1720
import 'package:fluffychat/widgets/matrix.dart';
1821
import 'package:fluffychat/widgets/twake_app.dart';
1922
import 'package:flutter/material.dart';
20-
21-
import 'package:adaptive_dialog/adaptive_dialog.dart';
22-
import 'package:fluffychat/generated/l10n/app_localizations.dart';
23-
2423
import 'package:go_router/go_router.dart';
2524
import 'package:linagora_design_flutter/linagora_design_flutter.dart';
2625
import 'package:matrix/matrix.dart';
@@ -81,13 +80,14 @@ class SettingsController extends State<Settings> with ConnectPageMixin {
8180
if (twakeContext == null) {
8281
Logs().e('SettingsController()::logoutAction - Twake context is null');
8382
}
83+
final l10n = L10n.of(context)!;
8484
if (await showConfirmAlertDialog(
8585
useRootNavigator: false,
8686
context: twakeContext!,
87-
title: L10n.of(context)!.areYouSureYouWantToLogout,
88-
message: L10n.of(context)!.logoutDialogWarning,
89-
okLabel: L10n.of(context)!.logout,
90-
cancelLabel: L10n.of(context)!.cancel,
87+
title: l10n.areYouSureYouWantToLogout,
88+
message: l10n.logoutDialogWarning,
89+
okLabel: l10n.logout,
90+
cancelLabel: l10n.cancel,
9191
) ==
9292
ConfirmResult.cancel) {
9393
return;
@@ -199,12 +199,13 @@ class SettingsController extends State<Settings> with ConnectPageMixin {
199199
}
200200

201201
void firstRunBootstrapAction([_]) async {
202+
final l10n = L10n.of(context)!;
202203
if (showChatBackupSwitch.value != true) {
203204
showOkAlertDialog(
204205
context: context,
205-
title: L10n.of(context)!.chatBackup,
206-
message: L10n.of(context)!.onlineKeyBackupEnabled,
207-
okLabel: L10n.of(context)!.close,
206+
title: l10n.chatBackup,
207+
message: l10n.onlineKeyBackupEnabled,
208+
okLabel: l10n.close,
208209
);
209210
return;
210211
}
@@ -214,7 +215,7 @@ class SettingsController extends State<Settings> with ConnectPageMixin {
214215

215216
void goToSettingsProfile() async {
216217
optionsSelectNotifier.value = SettingEnum.profile;
217-
final result = await context.push('/rooms/profile');
218+
final result = await context.push(AppRoutePaths.profileFull);
218219
if (result == null) {
219220
optionsSelectNotifier.value = null;
220221
}
@@ -224,33 +225,33 @@ class SettingsController extends State<Settings> with ConnectPageMixin {
224225
optionsSelectNotifier.value = settingEnum;
225226
switch (settingEnum) {
226227
case SettingEnum.chatSettings:
227-
final result = await context.push('/rooms/chat');
228+
final result = await context.push(AppRoutePaths.chatFull);
228229
if (result == null) {
229230
optionsSelectNotifier.value = null;
230231
}
231232
break;
232233
case SettingEnum.privacyAndSecurity:
233-
final result = await context.push('/rooms/security');
234+
final result = await context.push(AppRoutePaths.roomsSecurityFull);
234235
if (result == null) {
235236
optionsSelectNotifier.value = null;
236237
}
237238
break;
238239
case SettingEnum.notificationAndSounds:
239-
final result = await context.push('/rooms/notifications');
240+
final result = await context.push(AppRoutePaths.notificationsFull);
240241
if (result == null) {
241242
optionsSelectNotifier.value = null;
242243
}
243244
break;
244245
case SettingEnum.chatFolders:
245246
break;
246247
case SettingEnum.appLanguage:
247-
final result = await context.push('/rooms/appLanguage');
248+
final result = await context.push(AppRoutePaths.appLanguageFull);
248249
if (result == null) {
249250
optionsSelectNotifier.value = null;
250251
}
251252
break;
252253
case SettingEnum.devices:
253-
final result = await context.push('/rooms/devices');
254+
final result = await context.push(AppRoutePaths.devicesFull);
254255
if (result == null) {
255256
optionsSelectNotifier.value = null;
256257
}
@@ -277,17 +278,22 @@ class SettingsController extends State<Settings> with ConnectPageMixin {
277278
launchUrl(Uri.parse(commonSettingsUrl), webOnlyWindowName: '_blank');
278279
return;
279280
}
281+
282+
final l10n = L10n.of(context)!;
283+
final sysColor = LinagoraSysColors.material();
284+
final primaryColor = sysColor.primary;
285+
280286
if (await showConfirmAlertDialog(
281287
useRootNavigator: false,
282288
context: context,
283-
title: L10n.of(context)!.areYouSureYouWantToDeleteAccount,
284-
message: L10n.of(context)!.deleteAccountMessage,
285-
okLabel: L10n.of(context)!.continueProcess,
289+
title: l10n.areYouSureYouWantToDeleteAccount,
290+
message: l10n.deleteAccountMessage,
291+
okLabel: l10n.continueProcess,
286292
okLabelButtonColor: Colors.transparent,
287-
okTextColor: LinagoraSysColors.material().primary,
288-
cancelLabel: L10n.of(context)!.deleteLater,
289-
cancelLabelButtonColor: LinagoraSysColors.material().primary,
290-
cancelTextColor: LinagoraSysColors.material().onPrimary,
293+
okTextColor: primaryColor,
294+
cancelLabel: l10n.deleteLater,
295+
cancelLabelButtonColor: primaryColor,
296+
cancelTextColor: sysColor.onPrimary,
291297
) ==
292298
ConfirmResult.cancel) {
293299
return;

0 commit comments

Comments
 (0)