From b4f700d56a718935e4c01909af9639a8ca362647 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Wed, 21 Feb 2024 02:03:53 +0300 Subject: [PATCH] feat(ui): Select device icon depending on the platform we are runnning on --- lib/ui/pages/more/about_application.dart | 633 ++++++++++++----------- 1 file changed, 326 insertions(+), 307 deletions(-) diff --git a/lib/ui/pages/more/about_application.dart b/lib/ui/pages/more/about_application.dart index 06bf1100..bcddcfa4 100644 --- a/lib/ui/pages/more/about_application.dart +++ b/lib/ui/pages/more/about_application.dart @@ -1,3 +1,5 @@ +import 'dart:io'; + import 'package:auto_route/auto_route.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; @@ -12,32 +14,70 @@ class AboutApplicationPage extends StatelessWidget { const AboutApplicationPage({super.key}); @override - Widget build(final BuildContext context) => BrandHeroScreen( - hasBackButton: true, - hasFlashButton: false, - heroTitle: 'about_application_page.title'.tr(), - bodyPadding: const EdgeInsets.symmetric(vertical: 16), - children: [ - Padding( - padding: const EdgeInsets.all(16), - child: Text( - 'about_application_page.versions'.tr(), - style: Theme.of(context).textTheme.labelLarge!.copyWith( - color: Theme.of(context).colorScheme.secondary, - ), - ), + Widget build(final BuildContext context) { + IconData getPlatformIcon() { + if (Platform.isAndroid) { + return Icons.phone_android_outlined; + } else if (Platform.isIOS) { + return Icons.phone_iphone_outlined; + } else if (Platform.isWindows || Platform.isLinux) { + return Icons.desktop_windows_outlined; + } else if (Platform.isMacOS) { + return Icons.desktop_mac_outlined; + } else { + return Icons.devices_other_outlined; + } + } + + final deviceIcon = getPlatformIcon(); + + return BrandHeroScreen( + hasBackButton: true, + hasFlashButton: false, + heroTitle: 'about_application_page.title'.tr(), + bodyPadding: const EdgeInsets.symmetric(vertical: 16), + children: [ + Padding( + padding: const EdgeInsets.all(16), + child: Text( + 'about_application_page.versions'.tr(), + style: Theme.of(context).textTheme.labelLarge!.copyWith( + color: Theme.of(context).colorScheme.secondary, + ), ), + ), + FutureBuilder( + future: _packageVersion(), + builder: (final context, final snapshot) => ListTile( + title: Text( + 'about_application_page.application_version_text'.tr(), + ), + subtitle: Text( + snapshot.data.toString(), + ), + leading: Icon( + deviceIcon, + ), + onLongPress: () { + PlatformAdapter.setClipboard( + snapshot.data.toString(), + ); + getIt().showSnackBar( + 'basis.copied_to_clipboard'.tr(), + ); + }, + ), + ), + if (getIt().apiData.apiVersion.data != null) FutureBuilder( - future: _packageVersion(), + future: _apiVersion(), builder: (final context, final snapshot) => ListTile( title: Text( - 'about_application_page.application_version_text'.tr(), - ), - subtitle: Text( - snapshot.data.toString(), + 'about_application_page.api_version_text'.tr(), ), + subtitle: Text(snapshot.data.toString()), leading: const Icon( - Icons.phone_android_outlined, + Icons.api_outlined, ), onLongPress: () { PlatformAdapter.setClipboard( @@ -49,313 +89,292 @@ class AboutApplicationPage extends StatelessWidget { }, ), ), - if (getIt().apiData.apiVersion.data != null) - FutureBuilder( - future: _apiVersion(), - builder: (final context, final snapshot) => ListTile( - title: Text( - 'about_application_page.api_version_text'.tr(), + FutureBuilder( + future: _packageVersion(), + builder: (final context, final snapshot) => ListTile( + title: Text('about_application_page.open_source_licenses'.tr()), + onTap: () => showLicensePage( + context: context, + applicationName: 'SelfPrivacy', + applicationVersion: snapshot.data.toString(), + applicationLegalese: '© 2024 SelfPrivacy', + ), + leading: const Icon( + Icons.copyright_outlined, + ), + ), + ), + Padding( + padding: const EdgeInsets.all(16), + child: Text( + 'about_application_page.links'.tr(), + style: Theme.of(context).textTheme.labelLarge!.copyWith( + color: Theme.of(context).colorScheme.secondary, ), - subtitle: Text(snapshot.data.toString()), - leading: const Icon( - Icons.api_outlined, + ), + ), + ListTile( + title: Text('about_application_page.website'.tr()), + subtitle: const Text('selfprivacy.org'), + onTap: () => launchUrl( + Uri.parse('https://selfprivacy.org/'), + mode: LaunchMode.externalApplication, + ), + leading: const Icon( + Icons.language_outlined, + ), + onLongPress: () { + PlatformAdapter.setClipboard( + 'https://selfprivacy.org/', + ); + getIt().showSnackBar( + 'basis.copied_to_clipboard'.tr(), + ); + }, + ), + ListTile( + title: Text('about_application_page.documentation'.tr()), + subtitle: const Text('selfprivacy.org/docs'), + onTap: () => launchUrl( + Uri.parse('https://selfprivacy.org/docs/'), + mode: LaunchMode.externalApplication, + ), + leading: const Icon( + Icons.library_books_outlined, + ), + onLongPress: () { + PlatformAdapter.setClipboard( + 'https://selfprivacy.org/docs/', + ); + getIt().showSnackBar( + 'basis.copied_to_clipboard'.tr(), + ); + }, + ), + ListTile( + title: Text('about_application_page.privacy_policy'.tr()), + subtitle: const Text('selfprivacy.org/privacy-policy'), + onTap: () => launchUrl( + Uri.parse('https://selfprivacy.org/privacy-policy/'), + mode: LaunchMode.externalApplication, + ), + leading: const Icon( + Icons.policy_outlined, + ), + onLongPress: () { + PlatformAdapter.setClipboard( + 'https://selfprivacy.org/privacy-policy/', + ); + getIt().showSnackBar( + 'basis.copied_to_clipboard'.tr(), + ); + }, + ), + // Matrix channel + ListTile( + title: Text('about_application_page.matrix_channel'.tr()), + subtitle: const Text('#news:selfprivacy.org'), + onTap: () => launchUrl( + Uri.parse('https://matrix.to/#/#news:selfprivacy.org'), + mode: LaunchMode.externalApplication, + ), + leading: const Icon( + Icons.feed_outlined, + ), + onLongPress: () { + PlatformAdapter.setClipboard( + '#news:selfprivacy.org', + ); + getIt().showSnackBar( + 'basis.copied_to_clipboard'.tr(), + ); + }, + ), + // Telegram channel + ListTile( + title: Text('about_application_page.telegram_channel'.tr()), + subtitle: const Text('@selfprivacy'), + onTap: () => launchUrl( + Uri.parse('https://t.me/selfprivacy'), + mode: LaunchMode.externalApplication, + ), + leading: const Icon( + Icons.feed_outlined, + ), + onLongPress: () { + PlatformAdapter.setClipboard( + '@selfprivacy', + ); + getIt().showSnackBar( + 'basis.copied_to_clipboard'.tr(), + ); + }, + ), + Padding( + padding: const EdgeInsets.all(16), + child: Text( + 'about_application_page.get_support'.tr(), + style: Theme.of(context).textTheme.labelLarge!.copyWith( + color: Theme.of(context).colorScheme.secondary, ), - onLongPress: () { - PlatformAdapter.setClipboard( - snapshot.data.toString(), - ); - getIt().showSnackBar( - 'basis.copied_to_clipboard'.tr(), - ); - }, - ), - ), - FutureBuilder( - future: _packageVersion(), - builder: (final context, final snapshot) => ListTile( - title: Text('about_application_page.open_source_licenses'.tr()), - onTap: () => showLicensePage( - context: context, - applicationName: 'SelfPrivacy', - applicationVersion: snapshot.data.toString(), - applicationLegalese: '© 2024 SelfPrivacy', - ), - leading: const Icon( - Icons.copyright_outlined, - ), - ), ), - Padding( - padding: const EdgeInsets.all(16), - child: Text( - 'about_application_page.links'.tr(), - style: Theme.of(context).textTheme.labelLarge!.copyWith( - color: Theme.of(context).colorScheme.secondary, - ), - ), + ), + // Matrix + ListTile( + title: Text('about_application_page.matrix_support_chat'.tr()), + subtitle: const Text('#chat:selfprivacy.org'), + onTap: () => launchUrl( + Uri.parse('https://matrix.to/#/#chat:selfprivacy.org'), + mode: LaunchMode.externalApplication, ), - ListTile( - title: Text('about_application_page.website'.tr()), - subtitle: const Text('selfprivacy.org'), - onTap: () => launchUrl( - Uri.parse('https://selfprivacy.org/'), - mode: LaunchMode.externalApplication, - ), - leading: const Icon( - Icons.language_outlined, - ), - onLongPress: () { - PlatformAdapter.setClipboard( - 'https://selfprivacy.org/', - ); - getIt().showSnackBar( - 'basis.copied_to_clipboard'.tr(), - ); - }, + leading: const Icon( + Icons.question_answer_outlined, ), - ListTile( - title: Text('about_application_page.documentation'.tr()), - subtitle: const Text('selfprivacy.org/docs'), - onTap: () => launchUrl( - Uri.parse('https://selfprivacy.org/docs/'), - mode: LaunchMode.externalApplication, - ), - leading: const Icon( - Icons.library_books_outlined, - ), - onLongPress: () { - PlatformAdapter.setClipboard( - 'https://selfprivacy.org/docs/', - ); - getIt().showSnackBar( - 'basis.copied_to_clipboard'.tr(), - ); - }, + onLongPress: () { + PlatformAdapter.setClipboard( + '#chat:selfprivacy.org', + ); + getIt().showSnackBar( + 'basis.copied_to_clipboard'.tr(), + ); + }, + ), + // Telegram + ListTile( + title: Text('about_application_page.telegram_support_chat'.tr()), + subtitle: const Text('@selfprivacy_chat'), + onTap: () => launchUrl( + Uri.parse('https://t.me/selfprivacy_chat'), + mode: LaunchMode.externalApplication, ), - ListTile( - title: Text('about_application_page.privacy_policy'.tr()), - subtitle: const Text('selfprivacy.org/privacy-policy'), - onTap: () => launchUrl( - Uri.parse('https://selfprivacy.org/privacy-policy/'), - mode: LaunchMode.externalApplication, - ), - leading: const Icon( - Icons.policy_outlined, - ), - onLongPress: () { - PlatformAdapter.setClipboard( - 'https://selfprivacy.org/privacy-policy/', - ); - getIt().showSnackBar( - 'basis.copied_to_clipboard'.tr(), - ); - }, + leading: const Icon( + Icons.question_answer_outlined, ), - // Matrix channel - ListTile( - title: Text('about_application_page.matrix_channel'.tr()), - subtitle: const Text('#news:selfprivacy.org'), - onTap: () => launchUrl( - Uri.parse('https://matrix.to/#/#news:selfprivacy.org'), - mode: LaunchMode.externalApplication, - ), - leading: const Icon( - Icons.feed_outlined, - ), - onLongPress: () { - PlatformAdapter.setClipboard( - '#news:selfprivacy.org', - ); - getIt().showSnackBar( - 'basis.copied_to_clipboard'.tr(), - ); - }, + onLongPress: () { + PlatformAdapter.setClipboard( + '@selfprivacy_chat', + ); + getIt().showSnackBar( + 'basis.copied_to_clipboard'.tr(), + ); + }, + ), + // Email + ListTile( + title: Text('about_application_page.email_support'.tr()), + subtitle: const Text('support@selfprivacy.org'), + onTap: () => launchUrl( + Uri.parse('mailto:support@selfprivacy.org'), + mode: LaunchMode.externalApplication, ), - // Telegram channel - ListTile( - title: Text('about_application_page.telegram_channel'.tr()), - subtitle: const Text('@selfprivacy'), - onTap: () => launchUrl( - Uri.parse('https://t.me/selfprivacy'), - mode: LaunchMode.externalApplication, - ), - leading: const Icon( - Icons.feed_outlined, - ), - onLongPress: () { - PlatformAdapter.setClipboard( - '@selfprivacy', - ); - getIt().showSnackBar( - 'basis.copied_to_clipboard'.tr(), - ); - }, + leading: const Icon( + Icons.email_outlined, ), - Padding( - padding: const EdgeInsets.all(16), - child: Text( - 'about_application_page.get_support'.tr(), - style: Theme.of(context).textTheme.labelLarge!.copyWith( - color: Theme.of(context).colorScheme.secondary, - ), - ), + onLongPress: () { + PlatformAdapter.setClipboard( + 'support@selfprivacy.org', + ); + getIt().showSnackBar( + 'basis.copied_to_clipboard'.tr(), + ); + }, + ), + Padding( + padding: const EdgeInsets.all(16), + child: Text( + 'about_application_page.contribute'.tr(), + style: Theme.of(context).textTheme.labelLarge!.copyWith( + color: Theme.of(context).colorScheme.secondary, + ), ), - // Matrix - ListTile( - title: Text('about_application_page.matrix_support_chat'.tr()), - subtitle: const Text('#chat:selfprivacy.org'), - onTap: () => launchUrl( - Uri.parse('https://matrix.to/#/#chat:selfprivacy.org'), - mode: LaunchMode.externalApplication, + ), + // Source code + ListTile( + title: Text('about_application_page.source_code'.tr()), + subtitle: const Text('git.selfprivacy.org'), + onTap: () => launchUrl( + Uri.parse( + 'https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app', ), - leading: const Icon( - Icons.question_answer_outlined, - ), - onLongPress: () { - PlatformAdapter.setClipboard( - '#chat:selfprivacy.org', - ); - getIt().showSnackBar( - 'basis.copied_to_clipboard'.tr(), - ); - } + mode: LaunchMode.externalApplication, ), - // Telegram - ListTile( - title: Text('about_application_page.telegram_support_chat'.tr()), - subtitle: const Text('@selfprivacy_chat'), - onTap: () => launchUrl( - Uri.parse('https://t.me/selfprivacy_chat'), - mode: LaunchMode.externalApplication, - ), - leading: const Icon( - Icons.question_answer_outlined, - ), - onLongPress: () { - PlatformAdapter.setClipboard( - '@selfprivacy_chat', - ); - getIt().showSnackBar( - 'basis.copied_to_clipboard'.tr(), - ); - }, + leading: const Icon( + Icons.code_outlined, ), - // Email - ListTile( - title: Text('about_application_page.email_support'.tr()), - subtitle: const Text('support@selfprivacy.org'), - onTap: () => launchUrl( - Uri.parse('mailto:support@selfprivacy.org'), - mode: LaunchMode.externalApplication, + onLongPress: () { + PlatformAdapter.setClipboard( + 'https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app', + ); + getIt().showSnackBar( + 'basis.copied_to_clipboard'.tr(), + ); + }, + ), + // translate + ListTile( + title: Text('about_application_page.help_translate'.tr()), + subtitle: const Text('weblate.selfprivacy.org'), + onTap: () => launchUrl( + Uri.parse( + 'https://weblate.selfprivacy.org/projects/selfprivacy/', ), - leading: const Icon( - Icons.email_outlined, - ), - onLongPress: () { - PlatformAdapter.setClipboard( - 'support@selfprivacy.org', - ); - getIt().showSnackBar( - 'basis.copied_to_clipboard'.tr(), - ); - }, + mode: LaunchMode.externalApplication, ), - Padding( - padding: const EdgeInsets.all(16), - child: Text( - 'about_application_page.contribute'.tr(), - style: Theme.of(context).textTheme.labelLarge!.copyWith( - color: Theme.of(context).colorScheme.secondary, - ), - ), + leading: const Icon( + Icons.translate_outlined, ), - // Source code - ListTile( - title: Text('about_application_page.source_code'.tr()), - subtitle: const Text('git.selfprivacy.org'), - onTap: () => launchUrl( - Uri.parse( - 'https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app', - ), - mode: LaunchMode.externalApplication, - ), - leading: const Icon( - Icons.code_outlined, - ), - onLongPress: () { - PlatformAdapter.setClipboard( - 'https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app', - ); - getIt().showSnackBar( - 'basis.copied_to_clipboard'.tr(), - ); - }, + onLongPress: () { + PlatformAdapter.setClipboard( + 'https://weblate.selfprivacy.org/projects/selfprivacy/', + ); + getIt().showSnackBar( + 'basis.copied_to_clipboard'.tr(), + ); + }, + ), + // matrix chat + ListTile( + title: Text('about_application_page.matrix_contributors_chat'.tr()), + subtitle: const Text('#dev:selfprivacy.org'), + onTap: () => launchUrl( + Uri.parse('https://matrix.to/#/#dev:selfprivacy.org'), + mode: LaunchMode.externalApplication, ), - // translate - ListTile( - title: Text('about_application_page.help_translate'.tr()), - subtitle: const Text('weblate.selfprivacy.org'), - onTap: () => launchUrl( - Uri.parse( - 'https://weblate.selfprivacy.org/projects/selfprivacy/', - ), - mode: LaunchMode.externalApplication, - ), - leading: const Icon( - Icons.translate_outlined, - ), - onLongPress: () { - PlatformAdapter.setClipboard( - 'https://weblate.selfprivacy.org/projects/selfprivacy/', - ); - getIt().showSnackBar( - 'basis.copied_to_clipboard'.tr(), - ); - }, + leading: const Icon( + Icons.question_answer_outlined, ), - // matrix chat - ListTile( - title: Text('about_application_page.matrix_contributors_chat'.tr()), - subtitle: const Text('#dev:selfprivacy.org'), - onTap: () => launchUrl( - Uri.parse('https://matrix.to/#/#dev:selfprivacy.org'), - mode: LaunchMode.externalApplication, - ), - leading: const Icon( - Icons.question_answer_outlined, - ), - onLongPress: () { - PlatformAdapter.setClipboard( - '#dev:selfprivacy.org', - ); - getIt().showSnackBar( - 'basis.copied_to_clipboard'.tr(), - ); - }, + onLongPress: () { + PlatformAdapter.setClipboard( + '#dev:selfprivacy.org', + ); + getIt().showSnackBar( + 'basis.copied_to_clipboard'.tr(), + ); + }, + ), + // telegram + ListTile( + title: Text('about_application_page.telegram_contributors_chat'.tr()), + subtitle: const Text('@selfprivacy_dev'), + onTap: () => launchUrl( + Uri.parse('https://t.me/selfprivacy_dev'), + mode: LaunchMode.externalApplication, ), - // telegram - ListTile( - title: - Text('about_application_page.telegram_contributors_chat'.tr()), - subtitle: const Text('@selfprivacy_dev'), - onTap: () => launchUrl( - Uri.parse('https://t.me/selfprivacy_dev'), - mode: LaunchMode.externalApplication, - ), - leading: const Icon( - Icons.question_answer_outlined, - ), - onLongPress: () { - PlatformAdapter.setClipboard( - '@selfprivacy_dev', - ); - getIt().showSnackBar( - 'basis.copied_to_clipboard'.tr(), - ); - }, + leading: const Icon( + Icons.question_answer_outlined, ), - ], - ); + onLongPress: () { + PlatformAdapter.setClipboard( + '@selfprivacy_dev', + ); + getIt().showSnackBar( + 'basis.copied_to_clipboard'.tr(), + ); + }, + ), + ], + ); + } Future _packageVersion() async { String packageVersion = 'unknown';