build method

  1. @override
dynamic build(
  1. dynamic context,
  2. dynamic ref
)

Implementation

@override
Widget build(BuildContext context, WidgetRef ref) {
  final isBackupEnabled =
      ref.watch(featuresProvider).isActive(LabsFeature.encryptionBackup);

  return Column(
    crossAxisAlignment: CrossAxisAlignment.stretch,
    children: [
      _settingMenuSection(
        context: context,
        sectionTitle: L10n.of(context).account,
        children: [
          MenuItemWidget(
            iconData: Atlas.bell_mobile_thin,
            iconColor: routedColor(context, ref, Routes.settingNotifications),
            title: L10n.of(context).notifications,
            subTitle: L10n.of(context).notificationsSettingsAndTargets,
            titleStyles: TextStyle(
              color: routedColor(context, ref, Routes.settingNotifications),
            ),
            onTap: () {
              if (!isFullPage && context.isLargeScreen) {
                context
                    .pushReplacementNamed(Routes.settingNotifications.name);
              } else {
                context.pushNamed(Routes.settingNotifications.name);
              }
            },
          ),
          MenuItemWidget(
            innerKey: SettingsMenu.emailAddresses,
            iconData: Atlas.envelope_paper_email_thin,
            iconColor: routedColor(context, ref, Routes.emailAddresses),
            title: L10n.of(context).emailAddresses,
            subTitle: L10n.of(context).connectedToYourAccount,
            titleStyles: TextStyle(
              color: routedColor(context, ref, Routes.emailAddresses),
            ),
            onTap: () {
              if (!isFullPage && context.isLargeScreen) {
                context.pushReplacementNamed(Routes.emailAddresses.name);
              } else {
                context.pushNamed(Routes.emailAddresses.name);
              }
            },
          ),
        ],
      ),
      _settingMenuSection(
        context: context,
        sectionTitle: L10n.of(context).securityAndPrivacy,
        children: [
          MenuItemWidget(
            iconData: Atlas.key_monitor_thin,
            iconColor: routedColor(context, ref, Routes.settingSessions),
            title: L10n.of(context).sessions,
            subTitle: L10n.of(context).yourActiveDevices,
            titleStyles: TextStyle(
              color: routedColor(context, ref, Routes.settingSessions),
            ),
            onTap: () {
              if (!isFullPage && context.isLargeScreen) {
                context.pushReplacementNamed(Routes.settingSessions.name);
              } else {
                context.pushNamed(Routes.settingSessions.name);
              }
            },
          ),
          if (isBackupEnabled)
            MenuItemWidget(
              iconData: Atlas.key_website_thin,
              iconColor: routedColor(context, ref, Routes.settingBackup),
              title: L10n.of(context).settingsKeyBackUpTitle,
              subTitle: L10n.of(context).settingsKeyBackUpDesc,
              titleStyles: TextStyle(
                color: routedColor(context, ref, Routes.settingBackup),
              ),
              onTap: () {
                if (!isFullPage && context.isLargeScreen) {
                  context.pushReplacementNamed(Routes.settingBackup.name);
                } else {
                  context.pushNamed(Routes.settingBackup.name);
                }
              },
            ),
          MenuItemWidget(
            iconData: Atlas.users_thin,
            iconColor: routedColor(context, ref, Routes.blockedUsers),
            title: L10n.of(context).blockedUsers,
            subTitle: L10n.of(context).usersYouBlocked,
            titleStyles: TextStyle(
              color: routedColor(context, ref, Routes.blockedUsers),
            ),
            onTap: () {
              if (!isFullPage && context.isLargeScreen) {
                context.pushReplacementNamed(Routes.blockedUsers.name);
              } else {
                context.pushNamed(Routes.blockedUsers.name);
              }
            },
          ),
          MenuItemWidget(
            iconData: Atlas.passcode,
            iconColor: routedColor(context, ref, Routes.changePassword),
            title: L10n.of(context).changePassword,
            subTitle: L10n.of(context).changePasswordDescription,
            titleStyles: TextStyle(
              color: routedColor(context, ref, Routes.changePassword),
            ),
            onTap: () {
              if (!isFullPage && context.isLargeScreen) {
                context.pushReplacementNamed(Routes.changePassword.name);
              } else {
                context.pushNamed(Routes.changePassword.name);
              }
            },
          ),
        ],
      ),
      _settingMenuSection(
        context: context,
        sectionTitle: L10n.of(context).community,
        children: [
          MenuItemWidget(
            innerKey: SettingsMenu.superInvitations,
            iconData: Atlas.plus_envelope_thin,
            enabled: ref.watch(hasSuperTokensAccess).valueOrNull == true,
            iconColor: routedColor(context, ref, Routes.settingsSuperInvites),
            title: L10n.of(context).superInvitations,
            subTitle: L10n.of(context).manageYourInvitationCodes,
            titleStyles: TextStyle(
              color: routedColor(
                context,
                ref,
                Routes.settingsSuperInvites,
              ),
            ),
            onTap: () {
              if (ref.read(hasSuperTokensAccess).valueOrNull != true) return;
              if (!isFullPage && context.isLargeScreen) {
                context
                    .pushReplacementNamed(Routes.settingsSuperInvites.name);
              } else {
                context.pushNamed(Routes.settingsSuperInvites.name);
              }
            },
          ),
        ],
      ),
      _settingMenuSection(
        context: context,
        sectionTitle: L10n.of(context).acterApp,
        children: [
          MenuItemWidget(
            key: SettingsMenu.chat,
            iconData: Atlas.chat_conversation_thin,
            iconColor: routedColor(context, ref, Routes.settingsChat),
            title: L10n.of(context).chat,
            subTitle: L10n.of(context).chatSettingsExplainer,
            titleStyles: TextStyle(
              color: routedColor(
                context,
                ref,
                Routes.settingsChat,
              ),
            ),
            onTap: () {
              if (!isFullPage && context.isLargeScreen) {
                context.pushReplacementNamed(Routes.settingsChat.name);
              } else {
                context.pushNamed(Routes.settingsChat.name);
              }
            },
          ),
          MenuItemWidget(
            iconData: Atlas.language_translation,
            iconColor: routedColor(context, ref, Routes.settingLanguage),
            title: L10n.of(context).language,
            subTitle: L10n.of(context).changeAppLanguage,
            titleStyles: TextStyle(
              color: routedColor(
                context,
                ref,
                Routes.settingLanguage,
              ),
            ),
            onTap: () {
              if (!isFullPage && context.isLargeScreen) {
                context.pushReplacementNamed(Routes.settingLanguage.name);
              } else {
                context.pushNamed(Routes.settingLanguage.name);
              }
            },
          ),
          MenuItemWidget(
            key: SettingsMenu.labs,
            iconData: Atlas.lab_appliance_thin,
            iconColor: routedColor(context, ref, Routes.settingsLabs),
            title: L10n.of(context).labs,
            subTitle: L10n.of(context).experimentalActerFeatures,
            titleStyles: TextStyle(
              color: routedColor(
                context,
                ref,
                Routes.settingsLabs,
              ),
            ),
            onTap: () {
              if (!isFullPage && context.isLargeScreen) {
                context.pushReplacementNamed(Routes.settingsLabs.name);
              } else {
                context.pushNamed(Routes.settingsLabs.name);
              }
            },
          ),
          MenuItemWidget(
            iconData: Atlas.info_circle_thin,
            iconColor: routedColor(context, ref, Routes.info),
            title: L10n.of(context).info,
            titleStyles: TextStyle(
              color: routedColor(
                context,
                ref,
                Routes.info,
              ),
            ),
            onTap: () {
              if (!isFullPage && context.isLargeScreen) {
                context.pushReplacementNamed(Routes.info.name);
              } else {
                context.pushNamed(Routes.info.name);
              }
            },
          ),
          if (helpUrl != null)
            MenuItemWidget(
              iconData: PhosphorIcons.question(),
              title: L10n.of(context).helpCenterTitle,
              subTitle: L10n.of(context).helpCenterDesc,
              trailing: Icon(PhosphorIcons.arrowSquareOut()),
              onTap: () => launchUrl(helpUrl!),
            ),
        ],
      ),
      _settingMenuSection(
        context: context,
        sectionTitle: L10n.of(context).dangerZone,
        isDanderZone: true,
        children: [
          MenuItemWidget(
            key: SettingsMenu.logoutAccount,
            iconData: Atlas.exit_thin,
            iconColor: Theme.of(context).colorScheme.error,
            title: L10n.of(context).logOut,
            subTitle: L10n.of(context).closeSessionAndDeleteData,
            titleStyles: TextStyle(
              color: Theme.of(context).colorScheme.error,
            ),
            onTap: () => logoutConfirmationDialog(context, ref),
          ),
          MenuItemWidget(
            key: SettingsMenu.deactivateAccount,
            iconData: Atlas.trash_can_thin,
            iconColor: Theme.of(context).colorScheme.error,
            title: L10n.of(context).deactivateAccount,
            subTitle: L10n.of(context).irreversiblyDeactivateAccount,
            titleStyles: TextStyle(
              color: Theme.of(context).colorScheme.error,
            ),
            onTap: () => deactivationConfirmationDialog(context, ref),
          ),
        ],
      ),
      const SizedBox(height: 20),
    ],
  );
}