in app logo icon override option added so the stack wallet logo in the standard themes can be replaced specifically for duo but possibly other options as well

This commit is contained in:
julian 2024-05-23 15:38:37 -06:00
parent 1a51661d72
commit 9398a09533
21 changed files with 168 additions and 161 deletions

View file

@ -0,0 +1 @@
<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m256.77 256c0 30.12-20.56 55.43-48.4 62.67-10.43-18.52-16.38-39.9-16.38-62.67s5.95-44.15 16.38-62.67c27.84 7.24 48.4 32.55 48.4 62.67z"/><path d="m447.99 256c0 70.69-57.31 128-128 128-23.31 0-45.16-6.23-63.99-17.12 38.26-22.13 64.01-63.5 64.01-110.88s-25.75-88.75-64.01-110.88c18.83-10.89 40.68-17.12 63.99-17.12 70.69 0 128 57.31 128 128z"/><path d="m208.37 318.67c-5.22 1.37-10.71 2.09-16.36 2.09-35.77 0-64.77-28.99-64.77-64.76s29-64.76 64.77-64.76c5.65 0 11.14.72 16.36 2.09 11.26-20.03 27.76-36.72 47.63-48.21-18.83-10.89-40.68-17.12-63.99-17.12-70.7 0-128 57.31-128 128s57.3 128 128 128c23.31 0 45.16-6.23 63.99-17.12-19.87-11.49-36.37-28.18-47.63-48.21z" fill="#b3b3b3"/><path d="m320.01 256c0 47.38-25.75 88.75-64.01 110.88-19.87-11.49-36.37-28.18-47.63-48.21 27.84-7.24 48.4-32.55 48.4-62.67s-20.56-55.43-48.4-62.67c11.26-20.03 27.76-36.72 47.63-48.21 38.26 22.13 64.01 63.5 64.01 110.88z" fill="#666"/></svg>

After

Width:  |  Height:  |  Size: 989 B

View file

@ -0,0 +1 @@
<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m256.77 256c0 30.12-20.56 55.43-48.4 62.67-10.43-18.52-16.38-39.9-16.38-62.67s5.95-44.15 16.38-62.67c27.84 7.24 48.4 32.55 48.4 62.67z"/><path d="m447.99 256c0 70.69-57.31 128-128 128-23.31 0-45.16-6.23-63.99-17.12 38.26-22.13 64.01-63.5 64.01-110.88s-25.75-88.75-64.01-110.88c18.83-10.89 40.68-17.12 63.99-17.12 70.69 0 128 57.31 128 128z"/><path d="m208.37 318.67c-5.22 1.37-10.71 2.09-16.36 2.09-35.77 0-64.77-28.99-64.77-64.76s29-64.76 64.77-64.76c5.65 0 11.14.72 16.36 2.09 11.26-20.03 27.76-36.72 47.63-48.21-18.83-10.89-40.68-17.12-63.99-17.12-70.7 0-128 57.31-128 128s57.3 128 128 128c23.31 0 45.16-6.23 63.99-17.12-19.87-11.49-36.37-28.18-47.63-48.21z" fill="#b3b3b3"/><path d="m320.01 256c0 47.38-25.75 88.75-64.01 110.88-19.87-11.49-36.37-28.18-47.63-48.21 27.84-7.24 48.4-32.55 48.4-62.67s-20.56-55.43-48.4-62.67c11.26-20.03 27.76-36.72 47.63-48.21 38.26 22.13 64.01 63.5 64.01 110.88z" fill="#666"/></svg>

After

Width:  |  Height:  |  Size: 989 B

View file

@ -0,0 +1 @@
Dummy file to ensure dir structure is preserved. Stack app icon is in standard themes.

View file

@ -11,6 +11,8 @@ abstract class AppConfig {
static String get appDefaultDataDirName => _appDataDirName; static String get appDefaultDataDirName => _appDataDirName;
static ({String light, String dark})? get appIconAsset => _appIconAsset;
static List<CryptoCurrency> get coins => _supportedCoins; static List<CryptoCurrency> get coins => _supportedCoins;
static CryptoCurrency? getCryptoCurrencyFor(String coinIdentifier) { static CryptoCurrency? getCryptoCurrencyFor(String coinIdentifier) {

View file

@ -8,21 +8,20 @@
* *
*/ */
import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:isar/isar.dart'; import 'package:isar/isar.dart';
import '../../../../models/isar/exchange_cache/currency.dart'; import '../../../../models/isar/exchange_cache/currency.dart';
import '../../../../models/isar/models/ethereum/eth_contract.dart'; import '../../../../models/isar/models/ethereum/eth_contract.dart';
import '../../../../services/exchange/change_now/change_now_exchange.dart'; import '../../../../services/exchange/change_now/change_now_exchange.dart';
import '../../../../services/exchange/exchange_data_loading_service.dart'; import '../../../../services/exchange/exchange_data_loading_service.dart';
import '../../../../themes/stack_colors.dart'; import '../../../../themes/stack_colors.dart';
import '../../../../themes/theme_providers.dart';
import '../../../../utilities/assets.dart'; import '../../../../utilities/assets.dart';
import '../../../../utilities/text_styles.dart'; import '../../../../utilities/text_styles.dart';
import '../../../../utilities/util.dart'; import '../../../../utilities/util.dart';
import '../../../../widgets/app_icon.dart';
import '../../../../widgets/conditional_parent.dart'; import '../../../../widgets/conditional_parent.dart';
import '../../../../widgets/custom_buttons/draggable_switch_button.dart'; import '../../../../widgets/custom_buttons/draggable_switch_button.dart';
import '../../../../widgets/rounded_white_container.dart'; import '../../../../widgets/rounded_white_container.dart';
@ -35,7 +34,7 @@ class AddTokenListElementData {
} }
class AddTokenListElement extends ConsumerStatefulWidget { class AddTokenListElement extends ConsumerStatefulWidget {
const AddTokenListElement({Key? key, required this.data}) : super(key: key); const AddTokenListElement({super.key, required this.data});
final AddTokenListElementData data; final AddTokenListElementData data;
@ -79,14 +78,7 @@ class _AddTokenListElementState extends ConsumerState<AddTokenListElement> {
currency.image, currency.image,
width: iconSize, width: iconSize,
height: iconSize, height: iconSize,
placeholderBuilder: (_) => SvgPicture.file( placeholderBuilder: (_) => AppIcon(
File(
ref.watch(
themeAssetsProvider.select(
(value) => value.stackIcon,
),
),
),
width: iconSize, width: iconSize,
height: iconSize, height: iconSize,
), ),

View file

@ -14,25 +14,26 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:tuple/tuple.dart';
import '../../../models/send_view_auto_fill_data.dart'; import '../../../models/send_view_auto_fill_data.dart';
import '../../../notifications/show_flush_bar.dart'; import '../../../notifications/show_flush_bar.dart';
import 'contact_details_view.dart';
import '../../exchange_view/exchange_step_views/step_2_view.dart';
import '../../send_view/send_view.dart';
import '../../../providers/global/active_wallet_provider.dart'; import '../../../providers/global/active_wallet_provider.dart';
import '../../../providers/global/address_book_service_provider.dart'; import '../../../providers/global/address_book_service_provider.dart';
import '../../../providers/providers.dart'; import '../../../providers/providers.dart';
import '../../../themes/coin_icon_provider.dart'; import '../../../themes/coin_icon_provider.dart';
import '../../../themes/stack_colors.dart'; import '../../../themes/stack_colors.dart';
import '../../../themes/theme_providers.dart';
import '../../../utilities/assets.dart'; import '../../../utilities/assets.dart';
import '../../../utilities/clipboard_interface.dart'; import '../../../utilities/clipboard_interface.dart';
import '../../../utilities/text_styles.dart'; import '../../../utilities/text_styles.dart';
import '../../../utilities/util.dart'; import '../../../utilities/util.dart';
import '../../../wallets/isar/providers/wallet_info_provider.dart'; import '../../../wallets/isar/providers/wallet_info_provider.dart';
import '../../../widgets/app_icon.dart';
import '../../../widgets/rounded_container.dart'; import '../../../widgets/rounded_container.dart';
import '../../../widgets/rounded_white_container.dart'; import '../../../widgets/rounded_white_container.dart';
import 'package:tuple/tuple.dart'; import '../../exchange_view/exchange_step_views/step_2_view.dart';
import '../../send_view/send_view.dart';
import 'contact_details_view.dart';
final exchangeFromAddressBookAddressStateProvider = final exchangeFromAddressBookAddressStateProvider =
StateProvider<String>((ref) => ""); StateProvider<String>((ref) => "");
@ -117,16 +118,8 @@ class ContactPopUp extends ConsumerWidget {
borderRadius: BorderRadius.circular(32), borderRadius: BorderRadius.circular(32),
), ),
child: contact.customId == "default" child: contact.customId == "default"
? Center( ? const Center(
child: SvgPicture.file( child: AppIcon(
File(
ref.watch(
themeProvider.select(
(value) => value
.assets.stackIcon,
),
),
),
width: 20, width: 20,
), ),
) )

View file

@ -14,14 +14,8 @@ import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import '../../app_config.dart'; import '../../app_config.dart';
import '../buy_view/buy_view.dart';
import '../exchange_view/exchange_view.dart';
import 'sub_widgets/home_view_button_bar.dart';
import '../notification_views/notifications_view.dart';
import '../settings_views/global_settings_view/global_settings_view.dart';
import '../settings_views/global_settings_view/hidden_settings.dart';
import '../wallets_view/wallets_view.dart';
import '../../providers/global/notifications_provider.dart'; import '../../providers/global/notifications_provider.dart';
import '../../providers/ui/home_view_index_provider.dart'; import '../../providers/ui/home_view_index_provider.dart';
import '../../providers/ui/unread_notifications_provider.dart'; import '../../providers/ui/unread_notifications_provider.dart';
@ -32,13 +26,21 @@ import '../../utilities/assets.dart';
import '../../utilities/constants.dart'; import '../../utilities/constants.dart';
import '../../utilities/text_styles.dart'; import '../../utilities/text_styles.dart';
import '../../widgets/animated_widgets/rotate_icon.dart'; import '../../widgets/animated_widgets/rotate_icon.dart';
import '../../widgets/app_icon.dart';
import '../../widgets/background.dart'; import '../../widgets/background.dart';
import '../../widgets/custom_buttons/app_bar_icon_button.dart'; import '../../widgets/custom_buttons/app_bar_icon_button.dart';
import '../../widgets/small_tor_icon.dart'; import '../../widgets/small_tor_icon.dart';
import '../../widgets/stack_dialog.dart'; import '../../widgets/stack_dialog.dart';
import '../buy_view/buy_view.dart';
import '../exchange_view/exchange_view.dart';
import '../notification_views/notifications_view.dart';
import '../settings_views/global_settings_view/global_settings_view.dart';
import '../settings_views/global_settings_view/hidden_settings.dart';
import '../wallets_view/wallets_view.dart';
import 'sub_widgets/home_view_button_bar.dart';
class HomeView extends ConsumerStatefulWidget { class HomeView extends ConsumerStatefulWidget {
const HomeView({Key? key}) : super(key: key); const HomeView({super.key});
static const routeName = "/home"; static const routeName = "/home";
@ -183,14 +185,7 @@ class _HomeViewState extends ConsumerState<HomeView> {
GestureDetector( GestureDetector(
onTap: _hiddenOptions, onTap: _hiddenOptions,
child: RotateIcon( child: RotateIcon(
icon: SvgPicture.file( icon: const AppIcon(
File(
ref.watch(
themeProvider.select(
(value) => value.assets.stackIcon,
),
),
),
width: 24, width: 24,
height: 24, height: 24,
), ),

View file

@ -14,20 +14,22 @@ import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:url_launcher/url_launcher.dart';
import '../app_config.dart'; import '../app_config.dart';
import 'stack_privacy_calls.dart';
import '../pages_desktop_specific/password/create_password_view.dart'; import '../pages_desktop_specific/password/create_password_view.dart';
import '../themes/stack_colors.dart'; import '../themes/stack_colors.dart';
import '../themes/theme_providers.dart'; import '../themes/theme_providers.dart';
import '../utilities/prefs.dart'; import '../utilities/prefs.dart';
import '../utilities/text_styles.dart'; import '../utilities/text_styles.dart';
import '../utilities/util.dart'; import '../utilities/util.dart';
import '../widgets/app_icon.dart';
import '../widgets/background.dart'; import '../widgets/background.dart';
import '../widgets/desktop/secondary_button.dart'; import '../widgets/desktop/secondary_button.dart';
import 'package:url_launcher/url_launcher.dart'; import 'stack_privacy_calls.dart';
class IntroView extends ConsumerStatefulWidget { class IntroView extends ConsumerStatefulWidget {
const IntroView({Key? key}) : super(key: key); const IntroView({super.key});
static const String routeName = "/introView"; static const String routeName = "/introView";
@ -132,18 +134,10 @@ class _IntroViewState extends ConsumerState<IntroView> {
const Spacer( const Spacer(
flex: 2, flex: 2,
), ),
SizedBox( const SizedBox(
width: 130, width: 130,
height: 130, height: 130,
child: SvgPicture.file( child: AppIcon(),
File(
ref.watch(
themeProvider.select(
(value) => value.assets.stackIcon,
),
),
),
),
), ),
const Spacer( const Spacer(
flex: 42, flex: 42,

View file

@ -8,24 +8,22 @@
* *
*/ */
import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:isar/isar.dart'; import 'package:isar/isar.dart';
import 'package:tuple/tuple.dart';
import '../../../models/isar/models/contact_entry.dart'; import '../../../models/isar/models/contact_entry.dart';
import '../../../models/isar/models/isar_models.dart'; import '../../../models/isar/models/isar_models.dart';
import '../../../pages/address_book_views/subviews/add_new_contact_address_view.dart'; import '../../../pages/address_book_views/subviews/add_new_contact_address_view.dart';
import 'desktop_address_card.dart';
import 'desktop_contact_options_menu_popup.dart';
import '../../../providers/db/main_db_provider.dart'; import '../../../providers/db/main_db_provider.dart';
import '../../../providers/global/address_book_service_provider.dart'; import '../../../providers/global/address_book_service_provider.dart';
import '../../../providers/ui/address_book_providers/address_entry_data_provider.dart'; import '../../../providers/ui/address_book_providers/address_entry_data_provider.dart';
import '../../../themes/stack_colors.dart'; import '../../../themes/stack_colors.dart';
import '../../../themes/theme_providers.dart';
import '../../../utilities/assets.dart'; import '../../../utilities/assets.dart';
import '../../../utilities/text_styles.dart'; import '../../../utilities/text_styles.dart';
import '../../../widgets/app_icon.dart';
import '../../../widgets/custom_buttons/app_bar_icon_button.dart'; import '../../../widgets/custom_buttons/app_bar_icon_button.dart';
import '../../../widgets/custom_buttons/blue_text_button.dart'; import '../../../widgets/custom_buttons/blue_text_button.dart';
import '../../../widgets/desktop/desktop_dialog.dart'; import '../../../widgets/desktop/desktop_dialog.dart';
@ -33,13 +31,14 @@ import '../../../widgets/desktop/secondary_button.dart';
import '../../../widgets/loading_indicator.dart'; import '../../../widgets/loading_indicator.dart';
import '../../../widgets/rounded_white_container.dart'; import '../../../widgets/rounded_white_container.dart';
import '../../../widgets/transaction_card.dart'; import '../../../widgets/transaction_card.dart';
import 'package:tuple/tuple.dart'; import 'desktop_address_card.dart';
import 'desktop_contact_options_menu_popup.dart';
class DesktopContactDetails extends ConsumerStatefulWidget { class DesktopContactDetails extends ConsumerStatefulWidget {
const DesktopContactDetails({ const DesktopContactDetails({
Key? key, super.key,
required this.contactId, required this.contactId,
}) : super(key: key); });
final String contactId; final String contactId;
@ -120,15 +119,8 @@ class _DesktopContactDetailsState extends ConsumerState<DesktopContactDetails> {
borderRadius: BorderRadius.circular(32), borderRadius: BorderRadius.circular(32),
), ),
child: contact.customId == "default" child: contact.customId == "default"
? Center( ? const Center(
child: SvgPicture.file( child: AppIcon(
File(
ref.watch(
themeProvider.select(
(value) => value.assets.stackIcon,
),
),
),
width: 32, width: 32,
), ),
) )

View file

@ -8,24 +8,22 @@
* *
*/ */
import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/flutter_svg.dart';
import '../../app_config.dart'; import '../../app_config.dart';
import '../../pages/settings_views/global_settings_view/hidden_settings.dart'; import '../../pages/settings_views/global_settings_view/hidden_settings.dart';
import '../../pages/wallets_view/sub_widgets/empty_wallets.dart'; import '../../pages/wallets_view/sub_widgets/empty_wallets.dart';
import 'my_wallets.dart';
import '../../themes/theme_providers.dart';
import '../../utilities/text_styles.dart'; import '../../utilities/text_styles.dart';
import '../../wallets/isar/providers/all_wallets_info_provider.dart'; import '../../wallets/isar/providers/all_wallets_info_provider.dart';
import '../../widgets/animated_widgets/rotate_icon.dart'; import '../../widgets/animated_widgets/rotate_icon.dart';
import '../../widgets/app_icon.dart';
import '../../widgets/background.dart'; import '../../widgets/background.dart';
import '../../widgets/desktop/desktop_app_bar.dart'; import '../../widgets/desktop/desktop_app_bar.dart';
import 'my_wallets.dart';
class MyStackView extends ConsumerStatefulWidget { class MyStackView extends ConsumerStatefulWidget {
const MyStackView({Key? key}) : super(key: key); const MyStackView({super.key});
static const String routeName = "/myStackDesktop"; static const String routeName = "/myStackDesktop";
@ -110,18 +108,10 @@ class _DesktopMyStackTitleState extends ConsumerState<DesktopMyStackTitle> {
GestureDetector( GestureDetector(
onTap: _hiddenOptions, onTap: _hiddenOptions,
child: RotateIcon( child: RotateIcon(
icon: SizedBox( icon: const SizedBox(
width: 32, width: 32,
height: 32, height: 32,
child: SvgPicture.file( child: AppIcon(),
File(
ref.watch(
themeProvider.select(
(value) => value.assets.stackIcon,
),
),
),
),
), ),
curve: Curves.easeInOutCubic, curve: Curves.easeInOutCubic,
rotationPercent: 1.0, rotationPercent: 1.0,

View file

@ -13,16 +13,16 @@ import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
import 'package:isar/isar.dart'; import 'package:isar/isar.dart';
import '../../db/hive/db.dart'; import '../../db/hive/db.dart';
import '../../notifications/show_flush_bar.dart'; import '../../notifications/show_flush_bar.dart';
import '../../pages/intro_view.dart'; import '../../pages/intro_view.dart';
import '../../themes/theme_providers.dart';
import '../../utilities/logger.dart'; import '../../utilities/logger.dart';
import '../../utilities/stack_file_system.dart'; import '../../utilities/stack_file_system.dart';
import '../../utilities/text_styles.dart'; import '../../utilities/text_styles.dart';
import '../../widgets/app_icon.dart';
import '../../widgets/custom_buttons/app_bar_icon_button.dart'; import '../../widgets/custom_buttons/app_bar_icon_button.dart';
import '../../widgets/desktop/desktop_app_bar.dart'; import '../../widgets/desktop/desktop_app_bar.dart';
import '../../widgets/desktop/desktop_scaffold.dart'; import '../../widgets/desktop/desktop_scaffold.dart';
@ -31,9 +31,9 @@ import '../../widgets/desktop/secondary_button.dart';
class DeletePasswordWarningView extends ConsumerStatefulWidget { class DeletePasswordWarningView extends ConsumerStatefulWidget {
const DeletePasswordWarningView({ const DeletePasswordWarningView({
Key? key, super.key,
required this.shouldCreateNew, required this.shouldCreateNew,
}) : super(key: key); });
static const String routeName = "/deletePasswordWarning"; static const String routeName = "/deletePasswordWarning";
@ -119,14 +119,7 @@ class _ForgotPasswordDesktopViewState
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
SvgPicture.file( const AppIcon(
File(
ref.watch(
themeProvider.select(
(value) => value.assets.stackIcon,
),
),
),
width: 100, width: 100,
), ),
const SizedBox( const SizedBox(

View file

@ -9,40 +9,40 @@
*/ */
import 'dart:async'; import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import '../../app_config.dart'; import '../../app_config.dart';
import '../../db/db_version_migration.dart'; import '../../db/db_version_migration.dart';
import '../../db/hive/db.dart'; import '../../db/hive/db.dart';
import '../../notifications/show_flush_bar.dart'; import '../../notifications/show_flush_bar.dart';
import '../desktop_home_view.dart';
import 'forgot_password_desktop_view.dart';
import '../../providers/desktop/storage_crypto_handler_provider.dart'; import '../../providers/desktop/storage_crypto_handler_provider.dart';
import '../../providers/global/secure_store_provider.dart'; import '../../providers/global/secure_store_provider.dart';
import '../../themes/stack_colors.dart'; import '../../themes/stack_colors.dart';
import '../../themes/theme_providers.dart';
import '../../utilities/assets.dart'; import '../../utilities/assets.dart';
import '../../utilities/constants.dart'; import '../../utilities/constants.dart';
import '../../utilities/flutter_secure_storage_interface.dart'; import '../../utilities/flutter_secure_storage_interface.dart';
import '../../utilities/logger.dart'; import '../../utilities/logger.dart';
import '../../utilities/text_styles.dart'; import '../../utilities/text_styles.dart';
import '../../utilities/util.dart'; import '../../utilities/util.dart';
import '../../widgets/app_icon.dart';
import '../../widgets/custom_buttons/blue_text_button.dart'; import '../../widgets/custom_buttons/blue_text_button.dart';
import '../../widgets/desktop/desktop_scaffold.dart'; import '../../widgets/desktop/desktop_scaffold.dart';
import '../../widgets/desktop/primary_button.dart'; import '../../widgets/desktop/primary_button.dart';
import '../../widgets/loading_indicator.dart'; import '../../widgets/loading_indicator.dart';
import '../../widgets/rounded_container.dart'; import '../../widgets/rounded_container.dart';
import '../../widgets/stack_text_field.dart'; import '../../widgets/stack_text_field.dart';
import '../desktop_home_view.dart';
import 'forgot_password_desktop_view.dart';
class DesktopLoginView extends ConsumerStatefulWidget { class DesktopLoginView extends ConsumerStatefulWidget {
const DesktopLoginView({ const DesktopLoginView({
Key? key, super.key,
this.startupWalletId, this.startupWalletId,
this.load, this.load,
}) : super(key: key); });
static const String routeName = "/desktopLogin"; static const String routeName = "/desktopLogin";
@ -187,14 +187,7 @@ class _DesktopLoginViewState extends ConsumerState<DesktopLoginView> {
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
SvgPicture.file( const AppIcon(
File(
ref.watch(
themeProvider.select(
(value) => value.assets.stackIcon,
),
),
),
width: 100, width: 100,
), ),
const SizedBox( const SizedBox(

View file

@ -8,26 +8,24 @@
* *
*/ */
import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
import '../../app_config.dart'; import '../../app_config.dart';
import 'delete_password_warning_view.dart';
import '../../themes/stack_colors.dart'; import '../../themes/stack_colors.dart';
import '../../themes/theme_providers.dart';
import '../../utilities/text_styles.dart'; import '../../utilities/text_styles.dart';
import '../../widgets/app_icon.dart';
import '../../widgets/custom_buttons/app_bar_icon_button.dart'; import '../../widgets/custom_buttons/app_bar_icon_button.dart';
import '../../widgets/desktop/desktop_app_bar.dart'; import '../../widgets/desktop/desktop_app_bar.dart';
import '../../widgets/desktop/desktop_scaffold.dart'; import '../../widgets/desktop/desktop_scaffold.dart';
import '../../widgets/desktop/primary_button.dart'; import '../../widgets/desktop/primary_button.dart';
import '../../widgets/desktop/secondary_button.dart'; import '../../widgets/desktop/secondary_button.dart';
import 'delete_password_warning_view.dart';
class ForgotPasswordDesktopView extends ConsumerStatefulWidget { class ForgotPasswordDesktopView extends ConsumerStatefulWidget {
const ForgotPasswordDesktopView({ const ForgotPasswordDesktopView({
Key? key, super.key,
}) : super(key: key); });
static const String routeName = "/forgotPasswordDesktop"; static const String routeName = "/forgotPasswordDesktop";
@ -60,14 +58,7 @@ class _ForgotPasswordDesktopViewState
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
SvgPicture.file( const AppIcon(
File(
ref.watch(
themeProvider.select(
(value) => value.assets.stackIcon,
),
),
),
width: 100, width: 100,
), ),
const SizedBox( const SizedBox(

View file

@ -10,10 +10,11 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../models/isar/stack_theme.dart'; import '../models/isar/stack_theme.dart';
import '../wallets/crypto_currency/crypto_currency.dart';
import 'stack_colors.dart'; import 'stack_colors.dart';
import 'theme_service.dart'; import 'theme_service.dart';
import '../wallets/crypto_currency/crypto_currency.dart';
final applicationThemesDirectoryPathProvider = StateProvider((ref) => ""); final applicationThemesDirectoryPathProvider = StateProvider((ref) => "");

View file

@ -8,33 +8,32 @@
* *
*/ */
import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import '../app_config.dart';
import '../models/isar/models/contact_entry.dart'; import '../models/isar/models/contact_entry.dart';
import '../pages/address_book_views/subviews/contact_popup.dart'; import '../pages/address_book_views/subviews/contact_popup.dart';
import '../providers/global/address_book_service_provider.dart'; import '../providers/global/address_book_service_provider.dart';
import '../app_config.dart';
import '../themes/stack_colors.dart'; import '../themes/stack_colors.dart';
import '../themes/theme_providers.dart';
import '../utilities/assets.dart'; import '../utilities/assets.dart';
import '../utilities/constants.dart'; import '../utilities/constants.dart';
import '../utilities/text_styles.dart'; import '../utilities/text_styles.dart';
import '../utilities/util.dart'; import '../utilities/util.dart';
import '../wallets/crypto_currency/crypto_currency.dart'; import '../wallets/crypto_currency/crypto_currency.dart';
import 'app_icon.dart';
import 'conditional_parent.dart'; import 'conditional_parent.dart';
import 'expandable.dart'; import 'expandable.dart';
import 'rounded_white_container.dart'; import 'rounded_white_container.dart';
class AddressBookCard extends ConsumerStatefulWidget { class AddressBookCard extends ConsumerStatefulWidget {
const AddressBookCard({ const AddressBookCard({
Key? key, super.key,
required this.contactId, required this.contactId,
this.indicatorDown, this.indicatorDown,
this.desktopSendFrom = true, this.desktopSendFrom = true,
}) : super(key: key); });
final String contactId; final String contactId;
final ExpandableState? indicatorDown; final ExpandableState? indicatorDown;
@ -104,15 +103,8 @@ class _AddressBookCardState extends ConsumerState<AddressBookCard> {
borderRadius: BorderRadius.circular(32), borderRadius: BorderRadius.circular(32),
), ),
child: contact.customId == "default" child: contact.customId == "default"
? Center( ? const Center(
child: SvgPicture.file( child: AppIcon(
File(
ref.watch(
themeProvider.select(
(value) => value.assets.stackIcon,
),
),
),
width: 20, width: 20,
), ),
) )

75
lib/widgets/app_icon.dart Normal file
View file

@ -0,0 +1,75 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/flutter_svg.dart';
import '../app_config.dart';
import '../themes/theme_providers.dart';
enum _SvgType {
file,
asset;
}
final _pAppIcon = Provider.autoDispose<({_SvgType svgType, String svg})>((ref) {
if (AppConfig.appIconAsset != null) {
final brightness = ref.watch(
themeProvider.select(
(value) => value.brightness,
),
);
final String asset;
switch (brightness) {
case Brightness.dark:
asset = AppConfig.appIconAsset!.dark;
break;
case Brightness.light:
asset = AppConfig.appIconAsset!.light;
break;
}
return (svgType: _SvgType.asset, svg: asset);
} else {
final file = ref.watch(
themeAssetsProvider.select(
(value) => value.stackIcon,
),
);
return (svgType: _SvgType.file, svg: file);
}
});
class AppIcon extends ConsumerWidget {
const AppIcon({
super.key,
this.width,
this.height,
});
final double? width;
final double? height;
@override
Widget build(BuildContext context, WidgetRef ref) {
final iconInfo = ref.watch(_pAppIcon);
switch (iconInfo.svgType) {
case _SvgType.file:
return SvgPicture.file(
File(
iconInfo.svg,
),
width: width,
height: height,
);
case _SvgType.asset:
return SvgPicture.asset(
iconInfo.svg,
width: width,
height: height,
);
}
}
}

View file

@ -8,18 +8,16 @@
* *
*/ */
import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/flutter_svg.dart';
import '../../themes/theme_providers.dart'; import '../app_icon.dart';
class LivingStackIcon extends ConsumerStatefulWidget { class LivingStackIcon extends ConsumerStatefulWidget {
const LivingStackIcon({ const LivingStackIcon({
Key? key, super.key,
this.onPressed, this.onPressed,
}) : super(key: key); });
final VoidCallback? onPressed; final VoidCallback? onPressed;
@ -59,15 +57,7 @@ class _LivingStackIconState extends ConsumerState<LivingStackIcon> {
child: AnimatedScale( child: AnimatedScale(
duration: const Duration(milliseconds: 200), duration: const Duration(milliseconds: 200),
scale: _hovering ? 1.2 : 1, scale: _hovering ? 1.2 : 1,
child: SvgPicture.file( child: const AppIcon(),
File(
ref.watch(
themeProvider.select(
(value) => value.assets.stackIcon,
),
),
),
),
), ),
), ),
), ),

View file

@ -254,6 +254,7 @@ flutter:
# - images/a_dot_burr.jpeg # - images/a_dot_burr.jpeg
# - images/a_dot_ham.jpeg # - images/a_dot_ham.jpeg
assets: assets:
- assets/in_app_logo_icons/
- assets/images/ - assets/images/
- assets/icon/ - assets/icon/
- google_fonts/ - google_fonts/

View file

@ -35,6 +35,11 @@ const _separator = " ";
const _suffix = "Duo"; const _suffix = "Duo";
const _appDataDirName = "stackduo"; const _appDataDirName = "stackduo";
const ({String light, String dark})? _appIconAsset = (
light: "assets/in_app_logo_icons/stack-duo-icon_light.svg",
dark: "assets/in_app_logo_icons/stack-duo-icon_dark.svg",
);
final List<CryptoCurrency> _supportedCoins = List.unmodifiable([ final List<CryptoCurrency> _supportedCoins = List.unmodifiable([
Bitcoin(CryptoCurrencyNetwork.main), Bitcoin(CryptoCurrencyNetwork.main),
Monero(CryptoCurrencyNetwork.main), Monero(CryptoCurrencyNetwork.main),

View file

@ -37,6 +37,8 @@ const _separator = " ";
const _suffix = "Wallet"; const _suffix = "Wallet";
const _appDataDirName = "stackwallet"; const _appDataDirName = "stackwallet";
const ({String light, String dark})? _appIconAsset = null;
final List<CryptoCurrency> _supportedCoins = List.unmodifiable([ final List<CryptoCurrency> _supportedCoins = List.unmodifiable([
Bitcoin(CryptoCurrencyNetwork.main), Bitcoin(CryptoCurrencyNetwork.main),
BitcoinFrost(CryptoCurrencyNetwork.main), BitcoinFrost(CryptoCurrencyNetwork.main),

View file

@ -24,3 +24,6 @@ ln -s "${ASSET_SOURCES_DIR}/icon/${SELECT_ASSETS_DIR}" "${ASSETS_DIR}/icon"
rm -f "${ASSETS_DIR}/lottie" rm -f "${ASSETS_DIR}/lottie"
ln -s "${ASSET_SOURCES_DIR}/lottie/${SELECT_ASSETS_DIR}" "${ASSETS_DIR}/lottie" ln -s "${ASSET_SOURCES_DIR}/lottie/${SELECT_ASSETS_DIR}" "${ASSETS_DIR}/lottie"
rm -f "${ASSETS_DIR}/in_app_logo_icons"
ln -s "${ASSET_SOURCES_DIR}/in_app_logo_icons/${SELECT_ASSETS_DIR}" "${ASSETS_DIR}/in_app_logo_icons"