diff --git a/assets/images/2.0x/Twitter.png b/assets/images/2.0x/Twitter.png deleted file mode 100644 index 642e8eb729..0000000000 Binary files a/assets/images/2.0x/Twitter.png and /dev/null differ diff --git a/assets/images/2.0x/back_arrow.png b/assets/images/2.0x/back_arrow.png deleted file mode 100644 index 065eecf7fd..0000000000 Binary files a/assets/images/2.0x/back_arrow.png and /dev/null differ diff --git a/assets/images/2.0x/back_arrow_dark_theme.png b/assets/images/2.0x/back_arrow_dark_theme.png deleted file mode 100644 index f1e790fcdd..0000000000 Binary files a/assets/images/2.0x/back_arrow_dark_theme.png and /dev/null differ diff --git a/assets/images/2.0x/back_vector.png b/assets/images/2.0x/back_vector.png deleted file mode 100644 index 8d9239aa9e..0000000000 Binary files a/assets/images/2.0x/back_vector.png and /dev/null differ diff --git a/assets/images/2.0x/backup.png b/assets/images/2.0x/backup.png deleted file mode 100644 index 5cf40bba74..0000000000 Binary files a/assets/images/2.0x/backup.png and /dev/null differ diff --git a/assets/images/2.0x/bitcoin.png b/assets/images/2.0x/bitcoin.png deleted file mode 100644 index 169c734269..0000000000 Binary files a/assets/images/2.0x/bitcoin.png and /dev/null differ diff --git a/assets/images/2.0x/bitcoin_menu.png b/assets/images/2.0x/bitcoin_menu.png deleted file mode 100644 index 7afe772aa4..0000000000 Binary files a/assets/images/2.0x/bitcoin_menu.png and /dev/null differ diff --git a/assets/images/2.0x/bitmap.png b/assets/images/2.0x/bitmap.png deleted file mode 100644 index b080918474..0000000000 Binary files a/assets/images/2.0x/bitmap.png and /dev/null differ diff --git a/assets/images/2.0x/cake_arrow.png b/assets/images/2.0x/cake_arrow.png deleted file mode 100644 index cb72693ceb..0000000000 Binary files a/assets/images/2.0x/cake_arrow.png and /dev/null differ diff --git a/assets/images/2.0x/cake_logo.png b/assets/images/2.0x/cake_logo.png deleted file mode 100644 index 2778168137..0000000000 Binary files a/assets/images/2.0x/cake_logo.png and /dev/null differ diff --git a/assets/images/2.0x/china.png b/assets/images/2.0x/china.png deleted file mode 100644 index d199532eeb..0000000000 Binary files a/assets/images/2.0x/china.png and /dev/null differ diff --git a/assets/images/2.0x/coins.png b/assets/images/2.0x/coins.png deleted file mode 100644 index c96e6e48c4..0000000000 Binary files a/assets/images/2.0x/coins.png and /dev/null differ diff --git a/assets/images/2.0x/crypto_lock.png b/assets/images/2.0x/crypto_lock.png deleted file mode 100644 index c93941b775..0000000000 Binary files a/assets/images/2.0x/crypto_lock.png and /dev/null differ diff --git a/assets/images/2.0x/crypto_lock_light.png b/assets/images/2.0x/crypto_lock_light.png deleted file mode 100644 index 2937b20121..0000000000 Binary files a/assets/images/2.0x/crypto_lock_light.png and /dev/null differ diff --git a/assets/images/2.0x/decred.png b/assets/images/2.0x/decred.png deleted file mode 100644 index 2f4919cecd..0000000000 Binary files a/assets/images/2.0x/decred.png and /dev/null differ diff --git a/assets/images/2.0x/germany.png b/assets/images/2.0x/germany.png deleted file mode 100644 index e2d0b90dd3..0000000000 Binary files a/assets/images/2.0x/germany.png and /dev/null differ diff --git a/assets/images/2.0x/holland.png b/assets/images/2.0x/holland.png deleted file mode 100644 index 5934a2332e..0000000000 Binary files a/assets/images/2.0x/holland.png and /dev/null differ diff --git a/assets/images/2.0x/india.png b/assets/images/2.0x/india.png deleted file mode 100644 index af1e056564..0000000000 Binary files a/assets/images/2.0x/india.png and /dev/null differ diff --git a/assets/images/2.0x/japan.png b/assets/images/2.0x/japan.png deleted file mode 100644 index ba2fac68af..0000000000 Binary files a/assets/images/2.0x/japan.png and /dev/null differ diff --git a/assets/images/2.0x/keysIco.png b/assets/images/2.0x/keysIco.png deleted file mode 100644 index 00c2879a61..0000000000 Binary files a/assets/images/2.0x/keysIco.png and /dev/null differ diff --git a/assets/images/2.0x/litecoin.png b/assets/images/2.0x/litecoin.png deleted file mode 100644 index ea6d0e6a0a..0000000000 Binary files a/assets/images/2.0x/litecoin.png and /dev/null differ diff --git a/assets/images/2.0x/menu_button.png b/assets/images/2.0x/menu_button.png deleted file mode 100644 index a0f391b9cd..0000000000 Binary files a/assets/images/2.0x/menu_button.png and /dev/null differ diff --git a/assets/images/2.0x/monero.png b/assets/images/2.0x/monero.png deleted file mode 100644 index 01b0d0a96f..0000000000 Binary files a/assets/images/2.0x/monero.png and /dev/null differ diff --git a/assets/images/2.0x/monero_menu.png b/assets/images/2.0x/monero_menu.png deleted file mode 100644 index b92733a165..0000000000 Binary files a/assets/images/2.0x/monero_menu.png and /dev/null differ diff --git a/assets/images/2.0x/poland.png b/assets/images/2.0x/poland.png deleted file mode 100644 index 30e2d4c76b..0000000000 Binary files a/assets/images/2.0x/poland.png and /dev/null differ diff --git a/assets/images/2.0x/portugal.png b/assets/images/2.0x/portugal.png deleted file mode 100644 index 08928da3e1..0000000000 Binary files a/assets/images/2.0x/portugal.png and /dev/null differ diff --git a/assets/images/2.0x/pre_seed_dark.png b/assets/images/2.0x/pre_seed_dark.png deleted file mode 100755 index 2bb3b8e658..0000000000 Binary files a/assets/images/2.0x/pre_seed_dark.png and /dev/null differ diff --git a/assets/images/2.0x/pre_seed_light.png b/assets/images/2.0x/pre_seed_light.png deleted file mode 100755 index b198effad4..0000000000 Binary files a/assets/images/2.0x/pre_seed_light.png and /dev/null differ diff --git a/assets/images/2.0x/restoreSeed.png b/assets/images/2.0x/restoreSeed.png deleted file mode 100644 index c25928f6c0..0000000000 Binary files a/assets/images/2.0x/restoreSeed.png and /dev/null differ diff --git a/assets/images/2.0x/restore_keys.png b/assets/images/2.0x/restore_keys.png deleted file mode 100644 index 6a90ef2c24..0000000000 Binary files a/assets/images/2.0x/restore_keys.png and /dev/null differ diff --git a/assets/images/2.0x/restore_seed.png b/assets/images/2.0x/restore_seed.png deleted file mode 100644 index 2bbea22cff..0000000000 Binary files a/assets/images/2.0x/restore_seed.png and /dev/null differ diff --git a/assets/images/2.0x/restore_wallet_image.png b/assets/images/2.0x/restore_wallet_image.png deleted file mode 100644 index 3e3aecb91b..0000000000 Binary files a/assets/images/2.0x/restore_wallet_image.png and /dev/null differ diff --git a/assets/images/2.0x/russia.png b/assets/images/2.0x/russia.png deleted file mode 100644 index c72a0dfe45..0000000000 Binary files a/assets/images/2.0x/russia.png and /dev/null differ diff --git a/assets/images/2.0x/seedIco.png b/assets/images/2.0x/seedIco.png deleted file mode 100644 index 650f2fe05a..0000000000 Binary files a/assets/images/2.0x/seedIco.png and /dev/null differ diff --git a/assets/images/2.0x/seedKeys.png b/assets/images/2.0x/seedKeys.png deleted file mode 100644 index 10bee8b37c..0000000000 Binary files a/assets/images/2.0x/seedKeys.png and /dev/null differ diff --git a/assets/images/2.0x/seed_image.png b/assets/images/2.0x/seed_image.png deleted file mode 100644 index 795b0aba5a..0000000000 Binary files a/assets/images/2.0x/seed_image.png and /dev/null differ diff --git a/assets/images/2.0x/south_korea.png b/assets/images/2.0x/south_korea.png deleted file mode 100644 index 93aca42e87..0000000000 Binary files a/assets/images/2.0x/south_korea.png and /dev/null differ diff --git a/assets/images/2.0x/spain.png b/assets/images/2.0x/spain.png deleted file mode 100644 index e1458506ea..0000000000 Binary files a/assets/images/2.0x/spain.png and /dev/null differ diff --git a/assets/images/2.0x/usa.png b/assets/images/2.0x/usa.png deleted file mode 100644 index 5517c9e819..0000000000 Binary files a/assets/images/2.0x/usa.png and /dev/null differ diff --git a/assets/images/2.0x/wallet_name.png b/assets/images/2.0x/wallet_name.png deleted file mode 100644 index f5593af17f..0000000000 Binary files a/assets/images/2.0x/wallet_name.png and /dev/null differ diff --git a/assets/images/2.0x/wallet_name_light.png b/assets/images/2.0x/wallet_name_light.png deleted file mode 100644 index b59e4c4519..0000000000 Binary files a/assets/images/2.0x/wallet_name_light.png and /dev/null differ diff --git a/assets/images/2.0x/wallet_type.png b/assets/images/2.0x/wallet_type.png deleted file mode 100644 index a3bbfdf2d0..0000000000 Binary files a/assets/images/2.0x/wallet_type.png and /dev/null differ diff --git a/assets/images/2.0x/wallet_type_light.png b/assets/images/2.0x/wallet_type_light.png deleted file mode 100644 index 791c3a87e4..0000000000 Binary files a/assets/images/2.0x/wallet_type_light.png and /dev/null differ diff --git a/assets/images/2.0x/welcome.png b/assets/images/2.0x/welcome.png deleted file mode 100644 index 8ff0241307..0000000000 Binary files a/assets/images/2.0x/welcome.png and /dev/null differ diff --git a/assets/images/2.0x/welcomeImg.png b/assets/images/2.0x/welcomeImg.png deleted file mode 100644 index d4c76fc4f8..0000000000 Binary files a/assets/images/2.0x/welcomeImg.png and /dev/null differ diff --git a/assets/images/2.0x/welcome_light.png b/assets/images/2.0x/welcome_light.png deleted file mode 100644 index 8386d25b03..0000000000 Binary files a/assets/images/2.0x/welcome_light.png and /dev/null differ diff --git a/assets/images/3.0x/Twitter.png b/assets/images/3.0x/Twitter.png deleted file mode 100644 index 6a6b5f3a8a..0000000000 Binary files a/assets/images/3.0x/Twitter.png and /dev/null differ diff --git a/assets/images/3.0x/back_arrow.png b/assets/images/3.0x/back_arrow.png deleted file mode 100644 index b5b7fde8ee..0000000000 Binary files a/assets/images/3.0x/back_arrow.png and /dev/null differ diff --git a/assets/images/3.0x/back_arrow_dark_theme.png b/assets/images/3.0x/back_arrow_dark_theme.png deleted file mode 100644 index 724ed23f2a..0000000000 Binary files a/assets/images/3.0x/back_arrow_dark_theme.png and /dev/null differ diff --git a/assets/images/3.0x/back_vector.png b/assets/images/3.0x/back_vector.png deleted file mode 100644 index d01030e5d3..0000000000 Binary files a/assets/images/3.0x/back_vector.png and /dev/null differ diff --git a/assets/images/3.0x/backup.png b/assets/images/3.0x/backup.png deleted file mode 100644 index 5971200dcb..0000000000 Binary files a/assets/images/3.0x/backup.png and /dev/null differ diff --git a/assets/images/3.0x/bitcoin.png b/assets/images/3.0x/bitcoin.png deleted file mode 100644 index 9fd49e6f86..0000000000 Binary files a/assets/images/3.0x/bitcoin.png and /dev/null differ diff --git a/assets/images/3.0x/bitcoin_menu.png b/assets/images/3.0x/bitcoin_menu.png deleted file mode 100644 index a278fa2a5f..0000000000 Binary files a/assets/images/3.0x/bitcoin_menu.png and /dev/null differ diff --git a/assets/images/3.0x/bitmap.png b/assets/images/3.0x/bitmap.png deleted file mode 100644 index 337bcf027e..0000000000 Binary files a/assets/images/3.0x/bitmap.png and /dev/null differ diff --git a/assets/images/3.0x/cake_arrow.png b/assets/images/3.0x/cake_arrow.png deleted file mode 100644 index b92ec35c0d..0000000000 Binary files a/assets/images/3.0x/cake_arrow.png and /dev/null differ diff --git a/assets/images/3.0x/cake_logo.png b/assets/images/3.0x/cake_logo.png deleted file mode 100644 index 87dd05ce2e..0000000000 Binary files a/assets/images/3.0x/cake_logo.png and /dev/null differ diff --git a/assets/images/3.0x/china.png b/assets/images/3.0x/china.png deleted file mode 100644 index fd0a753722..0000000000 Binary files a/assets/images/3.0x/china.png and /dev/null differ diff --git a/assets/images/3.0x/coins.png b/assets/images/3.0x/coins.png deleted file mode 100644 index 86ea55ae92..0000000000 Binary files a/assets/images/3.0x/coins.png and /dev/null differ diff --git a/assets/images/3.0x/crypto_lock.png b/assets/images/3.0x/crypto_lock.png deleted file mode 100644 index 51e04afdeb..0000000000 Binary files a/assets/images/3.0x/crypto_lock.png and /dev/null differ diff --git a/assets/images/3.0x/crypto_lock_light.png b/assets/images/3.0x/crypto_lock_light.png deleted file mode 100644 index 9ec7964cf8..0000000000 Binary files a/assets/images/3.0x/crypto_lock_light.png and /dev/null differ diff --git a/assets/images/3.0x/decred.png b/assets/images/3.0x/decred.png deleted file mode 100644 index b2c9ac8180..0000000000 Binary files a/assets/images/3.0x/decred.png and /dev/null differ diff --git a/assets/images/3.0x/decred_menu.png b/assets/images/3.0x/decred_menu.png deleted file mode 100644 index e55b3fb5c8..0000000000 Binary files a/assets/images/3.0x/decred_menu.png and /dev/null differ diff --git a/assets/images/3.0x/germany.png b/assets/images/3.0x/germany.png deleted file mode 100644 index c01bacae91..0000000000 Binary files a/assets/images/3.0x/germany.png and /dev/null differ diff --git a/assets/images/3.0x/header.png b/assets/images/3.0x/header.png deleted file mode 100644 index 9a86d241a8..0000000000 Binary files a/assets/images/3.0x/header.png and /dev/null differ diff --git a/assets/images/3.0x/holland.png b/assets/images/3.0x/holland.png deleted file mode 100644 index 14b47e1d60..0000000000 Binary files a/assets/images/3.0x/holland.png and /dev/null differ diff --git a/assets/images/3.0x/india.png b/assets/images/3.0x/india.png deleted file mode 100644 index 3d80e26658..0000000000 Binary files a/assets/images/3.0x/india.png and /dev/null differ diff --git a/assets/images/3.0x/japan.png b/assets/images/3.0x/japan.png deleted file mode 100644 index 9a9b487a29..0000000000 Binary files a/assets/images/3.0x/japan.png and /dev/null differ diff --git a/assets/images/3.0x/keysIco.png b/assets/images/3.0x/keysIco.png deleted file mode 100644 index a44186dccf..0000000000 Binary files a/assets/images/3.0x/keysIco.png and /dev/null differ diff --git a/assets/images/3.0x/litecoin.png b/assets/images/3.0x/litecoin.png deleted file mode 100644 index 56ca3f6895..0000000000 Binary files a/assets/images/3.0x/litecoin.png and /dev/null differ diff --git a/assets/images/3.0x/menu_button.png b/assets/images/3.0x/menu_button.png deleted file mode 100644 index 97f28ae94c..0000000000 Binary files a/assets/images/3.0x/menu_button.png and /dev/null differ diff --git a/assets/images/3.0x/monero.png b/assets/images/3.0x/monero.png deleted file mode 100644 index 94eed5046a..0000000000 Binary files a/assets/images/3.0x/monero.png and /dev/null differ diff --git a/assets/images/3.0x/monero_menu.png b/assets/images/3.0x/monero_menu.png deleted file mode 100644 index 7d81566f55..0000000000 Binary files a/assets/images/3.0x/monero_menu.png and /dev/null differ diff --git a/assets/images/3.0x/poland.png b/assets/images/3.0x/poland.png deleted file mode 100644 index a345e23a58..0000000000 Binary files a/assets/images/3.0x/poland.png and /dev/null differ diff --git a/assets/images/3.0x/portugal.png b/assets/images/3.0x/portugal.png deleted file mode 100644 index 0f2840e671..0000000000 Binary files a/assets/images/3.0x/portugal.png and /dev/null differ diff --git a/assets/images/3.0x/pre_seed_dark.png b/assets/images/3.0x/pre_seed_dark.png deleted file mode 100755 index 632f2bb1ef..0000000000 Binary files a/assets/images/3.0x/pre_seed_dark.png and /dev/null differ diff --git a/assets/images/3.0x/pre_seed_light.png b/assets/images/3.0x/pre_seed_light.png deleted file mode 100755 index 329fce10b9..0000000000 Binary files a/assets/images/3.0x/pre_seed_light.png and /dev/null differ diff --git a/assets/images/3.0x/restoreSeed.png b/assets/images/3.0x/restoreSeed.png deleted file mode 100644 index 8fc5b1f14a..0000000000 Binary files a/assets/images/3.0x/restoreSeed.png and /dev/null differ diff --git a/assets/images/3.0x/restore_keys.png b/assets/images/3.0x/restore_keys.png deleted file mode 100644 index 1d7301275f..0000000000 Binary files a/assets/images/3.0x/restore_keys.png and /dev/null differ diff --git a/assets/images/3.0x/restore_seed.png b/assets/images/3.0x/restore_seed.png deleted file mode 100644 index de1a10bb7d..0000000000 Binary files a/assets/images/3.0x/restore_seed.png and /dev/null differ diff --git a/assets/images/3.0x/restore_wallet_image.png b/assets/images/3.0x/restore_wallet_image.png deleted file mode 100644 index 6a6fdd7751..0000000000 Binary files a/assets/images/3.0x/restore_wallet_image.png and /dev/null differ diff --git a/assets/images/3.0x/russia.png b/assets/images/3.0x/russia.png deleted file mode 100644 index 7726067839..0000000000 Binary files a/assets/images/3.0x/russia.png and /dev/null differ diff --git a/assets/images/3.0x/seedIco.png b/assets/images/3.0x/seedIco.png deleted file mode 100644 index 174a943b6d..0000000000 Binary files a/assets/images/3.0x/seedIco.png and /dev/null differ diff --git a/assets/images/3.0x/seedKeys.png b/assets/images/3.0x/seedKeys.png deleted file mode 100644 index 50b31c2e82..0000000000 Binary files a/assets/images/3.0x/seedKeys.png and /dev/null differ diff --git a/assets/images/3.0x/seed_image.png b/assets/images/3.0x/seed_image.png deleted file mode 100644 index 0431af18d7..0000000000 Binary files a/assets/images/3.0x/seed_image.png and /dev/null differ diff --git a/assets/images/3.0x/south_korea.png b/assets/images/3.0x/south_korea.png deleted file mode 100644 index 3e0c889d5b..0000000000 Binary files a/assets/images/3.0x/south_korea.png and /dev/null differ diff --git a/assets/images/3.0x/spain.png b/assets/images/3.0x/spain.png deleted file mode 100644 index cf530865d7..0000000000 Binary files a/assets/images/3.0x/spain.png and /dev/null differ diff --git a/assets/images/3.0x/usa.png b/assets/images/3.0x/usa.png deleted file mode 100644 index 628094f0de..0000000000 Binary files a/assets/images/3.0x/usa.png and /dev/null differ diff --git a/assets/images/3.0x/wallet_name.png b/assets/images/3.0x/wallet_name.png deleted file mode 100644 index c02d9ef044..0000000000 Binary files a/assets/images/3.0x/wallet_name.png and /dev/null differ diff --git a/assets/images/3.0x/wallet_name_light.png b/assets/images/3.0x/wallet_name_light.png deleted file mode 100644 index 5fecf8f1b0..0000000000 Binary files a/assets/images/3.0x/wallet_name_light.png and /dev/null differ diff --git a/assets/images/3.0x/wallet_type.png b/assets/images/3.0x/wallet_type.png deleted file mode 100644 index 3c63414269..0000000000 Binary files a/assets/images/3.0x/wallet_type.png and /dev/null differ diff --git a/assets/images/3.0x/wallet_type_light.png b/assets/images/3.0x/wallet_type_light.png deleted file mode 100644 index 5ece2804f2..0000000000 Binary files a/assets/images/3.0x/wallet_type_light.png and /dev/null differ diff --git a/assets/images/3.0x/welcome.png b/assets/images/3.0x/welcome.png deleted file mode 100644 index c939cf360e..0000000000 Binary files a/assets/images/3.0x/welcome.png and /dev/null differ diff --git a/assets/images/3.0x/welcomeImg.png b/assets/images/3.0x/welcomeImg.png deleted file mode 100644 index d78387d673..0000000000 Binary files a/assets/images/3.0x/welcomeImg.png and /dev/null differ diff --git a/assets/images/3.0x/welcome_light.png b/assets/images/3.0x/welcome_light.png deleted file mode 100644 index 8b682ed70c..0000000000 Binary files a/assets/images/3.0x/welcome_light.png and /dev/null differ diff --git a/assets/images/Twitter.png b/assets/images/Twitter.png deleted file mode 100644 index 4821abfd37..0000000000 Binary files a/assets/images/Twitter.png and /dev/null differ diff --git a/assets/images/back_arrow.png b/assets/images/back_arrow.png deleted file mode 100644 index 30e599b3f9..0000000000 Binary files a/assets/images/back_arrow.png and /dev/null differ diff --git a/assets/images/back_arrow_dark_theme.png b/assets/images/back_arrow_dark_theme.png deleted file mode 100644 index e78cf34c8a..0000000000 Binary files a/assets/images/back_arrow_dark_theme.png and /dev/null differ diff --git a/assets/images/back_vector.png b/assets/images/back_vector.png deleted file mode 100644 index 8717a34636..0000000000 Binary files a/assets/images/back_vector.png and /dev/null differ diff --git a/assets/images/backup.png b/assets/images/backup.png deleted file mode 100644 index 665128ac36..0000000000 Binary files a/assets/images/backup.png and /dev/null differ diff --git a/assets/images/bch.png b/assets/images/bch.png deleted file mode 100644 index 17872731fe..0000000000 Binary files a/assets/images/bch.png and /dev/null differ diff --git a/assets/images/bch_icon.png b/assets/images/bch_icon.png deleted file mode 100644 index d3d2ba8d8c..0000000000 Binary files a/assets/images/bch_icon.png and /dev/null differ diff --git a/assets/images/bitcoin.png b/assets/images/bitcoin.png deleted file mode 100644 index 1c30fa3a88..0000000000 Binary files a/assets/images/bitcoin.png and /dev/null differ diff --git a/assets/images/bitcoin_icon.png b/assets/images/bitcoin_icon.png deleted file mode 100644 index 69211b96bf..0000000000 Binary files a/assets/images/bitcoin_icon.png and /dev/null differ diff --git a/assets/images/bitcoin_menu.png b/assets/images/bitcoin_menu.png deleted file mode 100644 index ed0ea0048d..0000000000 Binary files a/assets/images/bitcoin_menu.png and /dev/null differ diff --git a/assets/images/bitmap.png b/assets/images/bitmap.png deleted file mode 100644 index 525522b3f4..0000000000 Binary files a/assets/images/bitmap.png and /dev/null differ diff --git a/assets/images/black_accent.svg b/assets/images/black_accent.svg new file mode 100644 index 0000000000..7e22d3b140 --- /dev/null +++ b/assets/images/black_accent.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/assets/images/bnb.png b/assets/images/bnb.png deleted file mode 100644 index 45fe9ad93d..0000000000 Binary files a/assets/images/bnb.png and /dev/null differ diff --git a/assets/images/btc.png b/assets/images/btc.png deleted file mode 100644 index 7bcff6b044..0000000000 Binary files a/assets/images/btc.png and /dev/null differ diff --git a/assets/images/cake_arrow.png b/assets/images/cake_arrow.png deleted file mode 100644 index 26648d373b..0000000000 Binary files a/assets/images/cake_arrow.png and /dev/null differ diff --git a/assets/images/cakepay.png b/assets/images/cakepay.png new file mode 100644 index 0000000000..2d1c12c034 Binary files /dev/null and b/assets/images/cakepay.png differ diff --git a/assets/images/crypto/bitcoin-cash.png b/assets/images/crypto/bitcoin-cash.png new file mode 100644 index 0000000000..ee02b610ba Binary files /dev/null and b/assets/images/crypto/bitcoin-cash.png differ diff --git a/assets/images/crypto/bitcoin.png b/assets/images/crypto/bitcoin.png new file mode 100644 index 0000000000..7e88aa51d1 Binary files /dev/null and b/assets/images/crypto/bitcoin.png differ diff --git a/assets/images/crypto/dai.png b/assets/images/crypto/dai.png new file mode 100644 index 0000000000..29f7f5f7d4 Binary files /dev/null and b/assets/images/crypto/dai.png differ diff --git a/assets/images/crypto/decred.png b/assets/images/crypto/decred.png new file mode 100644 index 0000000000..a636dd416b Binary files /dev/null and b/assets/images/crypto/decred.png differ diff --git a/assets/images/crypto/deuro.png b/assets/images/crypto/deuro.png new file mode 100644 index 0000000000..9118238037 Binary files /dev/null and b/assets/images/crypto/deuro.png differ diff --git a/assets/images/crypto/dogecoin.png b/assets/images/crypto/dogecoin.png new file mode 100644 index 0000000000..26f17fb310 Binary files /dev/null and b/assets/images/crypto/dogecoin.png differ diff --git a/assets/images/crypto/ethereum.png b/assets/images/crypto/ethereum.png new file mode 100644 index 0000000000..41fee0665a Binary files /dev/null and b/assets/images/crypto/ethereum.png differ diff --git a/assets/images/crypto/litecoin.png b/assets/images/crypto/litecoin.png new file mode 100644 index 0000000000..83bf1bd771 Binary files /dev/null and b/assets/images/crypto/litecoin.png differ diff --git a/assets/images/crypto/monero.png b/assets/images/crypto/monero.png new file mode 100644 index 0000000000..1520b564f4 Binary files /dev/null and b/assets/images/crypto/monero.png differ diff --git a/assets/images/crypto/nano.png b/assets/images/crypto/nano.png new file mode 100644 index 0000000000..67c0f1e560 Binary files /dev/null and b/assets/images/crypto/nano.png differ diff --git a/assets/images/crypto/polygon.png b/assets/images/crypto/polygon.png new file mode 100644 index 0000000000..db721f6e8a Binary files /dev/null and b/assets/images/crypto/polygon.png differ diff --git a/assets/images/crypto/solana.png b/assets/images/crypto/solana.png new file mode 100644 index 0000000000..7b5fba5c77 Binary files /dev/null and b/assets/images/crypto/solana.png differ diff --git a/assets/images/crypto/tether.png b/assets/images/crypto/tether.png new file mode 100644 index 0000000000..46115efbd6 Binary files /dev/null and b/assets/images/crypto/tether.png differ diff --git a/assets/images/crypto/tron.png b/assets/images/crypto/tron.png new file mode 100644 index 0000000000..08f181d9f9 Binary files /dev/null and b/assets/images/crypto/tron.png differ diff --git a/assets/images/crypto/usdc.png b/assets/images/crypto/usdc.png new file mode 100644 index 0000000000..f7cb798b66 Binary files /dev/null and b/assets/images/crypto/usdc.png differ diff --git a/assets/images/crypto/wbtc.png b/assets/images/crypto/wbtc.png new file mode 100644 index 0000000000..236cb13b83 Binary files /dev/null and b/assets/images/crypto/wbtc.png differ diff --git a/assets/images/crypto/wownero.png b/assets/images/crypto/wownero.png new file mode 100644 index 0000000000..54f3d0f69c Binary files /dev/null and b/assets/images/crypto/wownero.png differ diff --git a/assets/images/crypto/zano.png b/assets/images/crypto/zano.png new file mode 100644 index 0000000000..1467c7f939 Binary files /dev/null and b/assets/images/crypto/zano.png differ diff --git a/assets/images/crypto_lock.png b/assets/images/crypto_lock.png deleted file mode 100644 index 89eadee6be..0000000000 Binary files a/assets/images/crypto_lock.png and /dev/null differ diff --git a/assets/images/dai.png b/assets/images/dai.png deleted file mode 100644 index 698ffc48eb..0000000000 Binary files a/assets/images/dai.png and /dev/null differ diff --git a/assets/images/dai_icon.png b/assets/images/dai_icon.png index 9aaa956685..29f7f5f7d4 100644 Binary files a/assets/images/dai_icon.png and b/assets/images/dai_icon.png differ diff --git a/assets/images/dark.svg b/assets/images/dark.svg new file mode 100644 index 0000000000..20baf68fcf --- /dev/null +++ b/assets/images/dark.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/assets/images/dash.png b/assets/images/dash.png deleted file mode 100644 index 0856db172a..0000000000 Binary files a/assets/images/dash.png and /dev/null differ diff --git a/assets/images/dcr_icon.png b/assets/images/dcr_icon.png deleted file mode 100644 index 757cd03882..0000000000 Binary files a/assets/images/dcr_icon.png and /dev/null differ diff --git a/assets/images/decred.png b/assets/images/decred.png deleted file mode 100644 index 0b12f2ef01..0000000000 Binary files a/assets/images/decred.png and /dev/null differ diff --git a/assets/images/decred_icon.png b/assets/images/decred_icon.png deleted file mode 100644 index 9391abc3d8..0000000000 Binary files a/assets/images/decred_icon.png and /dev/null differ diff --git a/assets/images/decred_menu.png b/assets/images/decred_menu.png deleted file mode 100644 index 5c67923c57..0000000000 Binary files a/assets/images/decred_menu.png and /dev/null differ diff --git a/assets/images/doge_icon.png b/assets/images/doge_icon.png deleted file mode 100644 index b6292c16cb..0000000000 Binary files a/assets/images/doge_icon.png and /dev/null differ diff --git a/assets/images/eth_icon.png b/assets/images/eth_icon.png deleted file mode 100644 index c96f24cafb..0000000000 Binary files a/assets/images/eth_icon.png and /dev/null differ diff --git a/assets/images/header.png b/assets/images/header.png deleted file mode 100644 index a3e8169aa4..0000000000 Binary files a/assets/images/header.png and /dev/null differ diff --git a/assets/images/light.svg b/assets/images/light.svg new file mode 100644 index 0000000000..183a13fd14 --- /dev/null +++ b/assets/images/light.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/assets/images/litecoin-ltc_icon.png b/assets/images/litecoin-ltc_icon.png deleted file mode 100644 index a9f5606cb1..0000000000 Binary files a/assets/images/litecoin-ltc_icon.png and /dev/null differ diff --git a/assets/images/litecoin.png b/assets/images/litecoin.png deleted file mode 100644 index 53e0202acc..0000000000 Binary files a/assets/images/litecoin.png and /dev/null differ diff --git a/assets/images/litecoin_icon.png b/assets/images/litecoin_icon.png deleted file mode 100644 index 9cc47b6fbc..0000000000 Binary files a/assets/images/litecoin_icon.png and /dev/null differ diff --git a/assets/images/litecoin_img.png b/assets/images/litecoin_img.png deleted file mode 100644 index 8bf55f7a4b..0000000000 Binary files a/assets/images/litecoin_img.png and /dev/null differ diff --git a/assets/images/live_support.png b/assets/images/live_support.png deleted file mode 100644 index 89ad61f458..0000000000 Binary files a/assets/images/live_support.png and /dev/null differ diff --git a/assets/images/matic_icon.png b/assets/images/matic_icon.png deleted file mode 100644 index 7f5493343b..0000000000 Binary files a/assets/images/matic_icon.png and /dev/null differ diff --git a/assets/images/monero_icon.png b/assets/images/monero_icon.png deleted file mode 100644 index 7b6f74df6e..0000000000 Binary files a/assets/images/monero_icon.png and /dev/null differ diff --git a/assets/images/monero_logo.png b/assets/images/monero_logo.png deleted file mode 100644 index d1ebfc0d8c..0000000000 Binary files a/assets/images/monero_logo.png and /dev/null differ diff --git a/assets/images/monero_menu.png b/assets/images/monero_menu.png deleted file mode 100644 index 51b1e22405..0000000000 Binary files a/assets/images/monero_menu.png and /dev/null differ diff --git a/assets/images/more_links.png b/assets/images/more_links.png deleted file mode 100644 index 97891f3ad5..0000000000 Binary files a/assets/images/more_links.png and /dev/null differ diff --git a/assets/images/nano_icon.png b/assets/images/nano_icon.png index 8937b8ed29..e961b0867d 100644 Binary files a/assets/images/nano_icon.png and b/assets/images/nano_icon.png differ diff --git a/assets/images/nanogpt.png b/assets/images/nanogpt.png index 958400452e..765271b271 100644 Binary files a/assets/images/nanogpt.png and b/assets/images/nanogpt.png differ diff --git a/assets/images/pre_seed_dark.png b/assets/images/pre_seed_dark.png deleted file mode 100755 index ed12c730ab..0000000000 Binary files a/assets/images/pre_seed_dark.png and /dev/null differ diff --git a/assets/images/pre_seed_light.png b/assets/images/pre_seed_light.png deleted file mode 100755 index bb95a65670..0000000000 Binary files a/assets/images/pre_seed_light.png and /dev/null differ diff --git a/assets/images/receive_icon.png b/assets/images/receive_icon.png deleted file mode 100755 index 8701cc643a..0000000000 Binary files a/assets/images/receive_icon.png and /dev/null differ diff --git a/assets/images/receive_icon_raw.png b/assets/images/receive_icon_raw.png deleted file mode 100644 index 741ed4e4f6..0000000000 Binary files a/assets/images/receive_icon_raw.png and /dev/null differ diff --git a/assets/images/red_badge_discount.png b/assets/images/red_badge_discount.png deleted file mode 100644 index 4f5dc56a29..0000000000 Binary files a/assets/images/red_badge_discount.png and /dev/null differ diff --git a/assets/images/restoreSeed.png b/assets/images/restoreSeed.png deleted file mode 100644 index a51ea11934..0000000000 Binary files a/assets/images/restoreSeed.png and /dev/null differ diff --git a/assets/images/restore_keys.png b/assets/images/restore_keys.png deleted file mode 100644 index bbb7890f15..0000000000 Binary files a/assets/images/restore_keys.png and /dev/null differ diff --git a/assets/images/restore_seed.png b/assets/images/restore_seed.png deleted file mode 100644 index 938cac4dde..0000000000 Binary files a/assets/images/restore_seed.png and /dev/null differ diff --git a/assets/images/restore_seeds.png b/assets/images/restore_seeds.png new file mode 100644 index 0000000000..9f3d147327 Binary files /dev/null and b/assets/images/restore_seeds.png differ diff --git a/assets/images/restore_wallet_image.png b/assets/images/restore_wallet_image.png deleted file mode 100644 index 9fee53f1d1..0000000000 Binary files a/assets/images/restore_wallet_image.png and /dev/null differ diff --git a/assets/images/seedIco.png b/assets/images/seedIco.png deleted file mode 100644 index d40fe1f2f7..0000000000 Binary files a/assets/images/seedIco.png and /dev/null differ diff --git a/assets/images/seedKeys.png b/assets/images/seedKeys.png deleted file mode 100644 index 7cdc42d3f5..0000000000 Binary files a/assets/images/seedKeys.png and /dev/null differ diff --git a/assets/images/seed_verified.png b/assets/images/seed_verified.png deleted file mode 100644 index e037061933..0000000000 Binary files a/assets/images/seed_verified.png and /dev/null differ diff --git a/assets/images/setup_2fa_img.png b/assets/images/setup_2fa_img.png deleted file mode 100644 index ce6f0d7333..0000000000 Binary files a/assets/images/setup_2fa_img.png and /dev/null differ diff --git a/assets/images/sol_icon.png b/assets/images/sol_icon.png deleted file mode 100644 index c9a9f3b6aa..0000000000 Binary files a/assets/images/sol_icon.png and /dev/null differ diff --git a/assets/images/trx_icon.png b/assets/images/trx_icon.png deleted file mode 100644 index c5d2b45f1a..0000000000 Binary files a/assets/images/trx_icon.png and /dev/null differ diff --git a/assets/images/usdc_icon.png b/assets/images/usdc_icon.png index 283533b42a..f7cb798b66 100644 Binary files a/assets/images/usdc_icon.png and b/assets/images/usdc_icon.png differ diff --git a/assets/images/usdt.png b/assets/images/usdt.png deleted file mode 100644 index c7f71194fa..0000000000 Binary files a/assets/images/usdt.png and /dev/null differ diff --git a/assets/images/usdt_icon.png b/assets/images/usdt_icon.png deleted file mode 100644 index c1bfa0f585..0000000000 Binary files a/assets/images/usdt_icon.png and /dev/null differ diff --git a/assets/images/usdtbsc_icon.png b/assets/images/usdtbsc_icon.png deleted file mode 100644 index 9f2cda2370..0000000000 Binary files a/assets/images/usdtbsc_icon.png and /dev/null differ diff --git a/assets/images/usdterc.png b/assets/images/usdterc.png deleted file mode 100644 index 212b301b51..0000000000 Binary files a/assets/images/usdterc.png and /dev/null differ diff --git a/assets/images/usdterc20_icon.png b/assets/images/usdterc20_icon.png index 63482a8427..46115efbd6 100644 Binary files a/assets/images/usdterc20_icon.png and b/assets/images/usdterc20_icon.png differ diff --git a/assets/images/usdterc_icon.png b/assets/images/usdterc_icon.png index e2e736a6a6..46115efbd6 100644 Binary files a/assets/images/usdterc_icon.png and b/assets/images/usdterc_icon.png differ diff --git a/assets/images/usdttrc20_icon.png b/assets/images/usdttrc20_icon.png deleted file mode 100644 index 4d3f156885..0000000000 Binary files a/assets/images/usdttrc20_icon.png and /dev/null differ diff --git a/assets/images/wallet_guides.png b/assets/images/wallet_guides.png deleted file mode 100644 index 3f2d9f2705..0000000000 Binary files a/assets/images/wallet_guides.png and /dev/null differ diff --git a/assets/images/wbtc_icon.png b/assets/images/wbtc_icon.png index d836eb391c..236cb13b83 100644 Binary files a/assets/images/wbtc_icon.png and b/assets/images/wbtc_icon.png differ diff --git a/assets/images/wownero_icon.png b/assets/images/wownero_icon.png deleted file mode 100644 index a3da77b9e0..0000000000 Binary files a/assets/images/wownero_icon.png and /dev/null differ diff --git a/assets/images/wownero_menu.png b/assets/images/wownero_menu.png deleted file mode 100644 index a3da77b9e0..0000000000 Binary files a/assets/images/wownero_menu.png and /dev/null differ diff --git a/assets/images/xmr_btc.png b/assets/images/xmr_btc.png deleted file mode 100644 index 858664265d..0000000000 Binary files a/assets/images/xmr_btc.png and /dev/null differ diff --git a/assets/images/zano_bg_icon.png b/assets/images/zano_bg_icon.png deleted file mode 100644 index 5ea593beb2..0000000000 Binary files a/assets/images/zano_bg_icon.png and /dev/null differ diff --git a/assets/images/zano_icon.png b/assets/images/zano_icon.png deleted file mode 100644 index fd48fd6a5d..0000000000 Binary files a/assets/images/zano_icon.png and /dev/null differ diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index 39e62b4b13..a5c2a8179b 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -134,20 +134,20 @@ class CryptoCurrency extends EnumerableItem with Serializable implemen ]; // title, tag (if applicable), fullName (if unique), raw, name, iconPath - static const xmr = CryptoCurrency(title: 'XMR', fullName: 'Monero', raw: 0, name: 'xmr', iconPath: 'assets/images/monero_icon.png', decimals: 12); + static const xmr = CryptoCurrency(title: 'XMR', fullName: 'Monero', raw: 0, name: 'xmr', iconPath: 'assets/images/crypto/monero.png', decimals: 12); static const ada = CryptoCurrency(title: 'ADA', fullName: 'Cardano', raw: 1, name: 'ada', iconPath: 'assets/images/ada_icon.png', decimals: 6); - static const bch = CryptoCurrency(title: 'BCH', fullName: 'Bitcoin Cash', raw: 2, name: 'bch', iconPath: 'assets/images/bch_icon.png', decimals: 8); + static const bch = CryptoCurrency(title: 'BCH', fullName: 'Bitcoin Cash', raw: 2, name: 'bch', iconPath: 'assets/images/crypto/bitcoin-cash.png', decimals: 8); static const bnb = CryptoCurrency(title: 'BNB', tag: 'BSC', fullName: 'Binance Coin', raw: 3, name: 'bnb', iconPath: 'assets/images/bnb_icon.png', decimals: 8); - static const btc = CryptoCurrency(title: 'BTC', fullName: 'Bitcoin', raw: 4, name: 'btc', iconPath: 'assets/images/btc.png', decimals: 8); - static const dai = CryptoCurrency(title: 'DAI', tag: 'ETH', fullName: 'Dai', raw: 5, name: 'dai', iconPath: 'assets/images/dai_icon.png', decimals: 18); + static const btc = CryptoCurrency(title: 'BTC', fullName: 'Bitcoin', raw: 4, name: 'btc', iconPath: 'assets/images/crypto/bitcoin.png', decimals: 8); + static const dai = CryptoCurrency(title: 'DAI', tag: 'ETH', fullName: 'Dai', raw: 5, name: 'dai', iconPath: 'assets/images/crypto/dai.png', decimals: 18); static const dash = CryptoCurrency(title: 'DASH', fullName: 'Dash', raw: 6, name: 'dash', iconPath: 'assets/images/dash_icon.png', decimals: 8); static const eos = CryptoCurrency(title: 'EOS', fullName: 'EOS', raw: 7, name: 'eos', iconPath: 'assets/images/eos_icon.png', decimals: 4); - static const eth = CryptoCurrency(title: 'ETH', fullName: 'Ethereum', raw: 8, name: 'eth', iconPath: 'assets/images/eth_icon.png', decimals: 18); - static const ltc = CryptoCurrency(title: 'LTC', fullName: 'Litecoin', raw: 9, name: 'ltc', iconPath: 'assets/images/litecoin-ltc_icon.png', decimals: 8); - static const nano = CryptoCurrency(title: 'XNO', fullName: 'Nano', raw: 10, name: 'xno', iconPath: 'assets/images/nano_icon.png', decimals: 30); - static const trx = CryptoCurrency(title: 'TRX', fullName: 'TRON', raw: 11, name: 'trx', iconPath: 'assets/images/trx_icon.png', decimals: 6); - static const usdt = CryptoCurrency(title: 'USDT', tag: 'OMNI', fullName: 'USDT Tether', raw: 12, name: 'usdt', iconPath: 'assets/images/usdt_icon.png', decimals: 6); - static const usdterc20 = CryptoCurrency(title: 'USDT', tag: 'ETH', fullName: 'USDT Tether', raw: 13, name: 'usdterc20', iconPath: 'assets/images/usdterc20_icon.png', decimals: 6); + static const eth = CryptoCurrency(title: 'ETH', fullName: 'Ethereum', raw: 8, name: 'eth', iconPath: 'assets/images/crypto/ethereum.png', decimals: 18); + static const ltc = CryptoCurrency(title: 'LTC', fullName: 'Litecoin', raw: 9, name: 'ltc', iconPath: 'assets/images/crypto/litecoin.png', decimals: 8); + static const nano = CryptoCurrency(title: 'XNO', fullName: 'Nano', raw: 10, name: 'xno', iconPath: 'assets/images/crypto/nano.png', decimals: 30); + static const trx = CryptoCurrency(title: 'TRX', fullName: 'TRON', raw: 11, name: 'trx', iconPath: 'assets/images/crypto/tron.png', decimals: 6); + static const usdt = CryptoCurrency(title: 'USDT', tag: 'OMNI', fullName: 'USDT Tether', raw: 12, name: 'usdt', iconPath: 'assets/images/crypto/tether.png', decimals: 6); + static const usdterc20 = CryptoCurrency(title: 'USDT', tag: 'ETH', fullName: 'USDT Tether', raw: 13, name: 'usdterc20', iconPath: 'assets/images/crypto/tether.png', decimals: 6); static const xlm = CryptoCurrency(title: 'XLM', fullName: 'Stellar', raw: 14, name: 'xlm', iconPath: 'assets/images/xlm_icon.png', decimals: 7); static const xrp = CryptoCurrency(title: 'XRP', fullName: 'Ripple', raw: 15, name: 'xrp', iconPath: 'assets/images/xrp_icon.png', decimals: 6); static const xhv = CryptoCurrency(title: 'XHV', fullName: 'Haven Protocol', raw: 16, name: 'xhv', iconPath: 'assets/images/xhv_logo.png', decimals: 12); @@ -170,25 +170,25 @@ class CryptoCurrency extends EnumerableItem with Serializable implemen static const avaxc = CryptoCurrency(title: 'AVAX', tag: 'AVAXC', fullName: 'Avalanche', raw: 31, name: 'avaxc', iconPath: 'assets/images/avaxc_icon.png', decimals: 9); static const btt = CryptoCurrency(title: 'BTT', tag: 'ETH', fullName: 'BitTorrent', raw: 32, name: 'btt', iconPath: 'assets/images/btt_icon.png', decimals: 18); static const bttc = CryptoCurrency(title: 'BTTC', tag: 'TRX', fullName: 'BitTorrent-NEW', raw: 33, name: 'bttc', iconPath: 'assets/images/btt_icon.png', decimals: 18); - static const doge = CryptoCurrency(title: 'DOGE', fullName: 'Dogecoin', raw: 34, name: 'doge', iconPath: 'assets/images/doge_icon.png', decimals: 8); + static const doge = CryptoCurrency(title: 'DOGE', fullName: 'Dogecoin', raw: 34, name: 'doge', iconPath: 'assets/images/crypto/dogecoin.png', decimals: 8); static const firo = CryptoCurrency(title: 'FIRO', raw: 35, name: 'firo', iconPath: 'assets/images/firo_icon.png', decimals: 8); - static const usdttrc20 = CryptoCurrency(title: 'USDT', tag: 'TRX', fullName: 'USDT Tether', raw: 36, name: 'usdttrc20', iconPath: 'assets/images/usdttrc20_icon.png', decimals: 6); + static const usdttrc20 = CryptoCurrency(title: 'USDT', tag: 'TRX', fullName: 'USDT Tether', raw: 36, name: 'usdttrc20', iconPath: 'assets/images/crypto/tether.png', decimals: 6); static const hbar = CryptoCurrency(title: 'HBAR', fullName: 'Hedera', raw: 37, name: 'hbar', iconPath: 'assets/images/hbar_icon.png', decimals: 8); static const sc = CryptoCurrency(title: 'SC', fullName: 'Siacoin', raw: 38, name: 'sc', iconPath: 'assets/images/sc_icon.png', decimals: 16); - static const sol = CryptoCurrency(title: 'SOL', fullName: 'Solana', raw: 39, name: 'sol', iconPath: 'assets/images/sol_icon.png', decimals: 9); - static const usdc = CryptoCurrency(title: 'USDC', tag: 'ETH', fullName: 'USD Coin', raw: 40, name: 'usdc', iconPath: 'assets/images/usdc_icon.png', decimals: 6); - static const usdcsol = CryptoCurrency(title: 'USDC', tag: 'SOL', fullName: 'USDC Coin', raw: 41, name: 'usdcsol', iconPath: 'assets/images/usdc_icon.png', decimals: 6); + static const sol = CryptoCurrency(title: 'SOL', fullName: 'Solana', raw: 39, name: 'sol', iconPath: 'assets/images/crypto/solana.png', decimals: 9); + static const usdc = CryptoCurrency(title: 'USDC', tag: 'ETH', fullName: 'USD Coin', raw: 40, name: 'usdc', iconPath: 'assets/images/crypto/usdc.png', decimals: 6); + static const usdcsol = CryptoCurrency(title: 'USDC', tag: 'SOL', fullName: 'USDC Coin', raw: 41, name: 'usdcsol', iconPath: 'assets/images/crypto/usdc.png', decimals: 6); static const zaddr = CryptoCurrency(title: 'ZZEC', tag: 'ZEC', fullName: 'Shielded Zcash', raw: 42, name: 'zaddr', iconPath: 'assets/images/zec_icon.png', decimals: 8); static const zec = CryptoCurrency(title: 'TZEC', tag: 'ZEC', fullName: 'Transparent Zcash', raw: 43, name: 'zec', iconPath: 'assets/images/zec_icon.png', decimals: 8); static const zen = CryptoCurrency(title: 'ZEN', fullName: 'Horizen', raw: 44, name: 'zen', iconPath: 'assets/images/zen_icon.png', decimals: 8); static const xvg = CryptoCurrency(title: 'XVG', fullName: 'Verge', raw: 45, name: 'xvg', iconPath: 'assets/images/xvg_icon.png', decimals: 8); - static const usdcpoly = CryptoCurrency(title: 'USDC', tag: 'POL', fullName: 'USD Coin', raw: 46, name: 'usdcpoly', iconPath: 'assets/images/usdc_icon.png', decimals: 6); - static const dcr = CryptoCurrency(title: 'DCR', fullName: 'Decred', raw: 47, name: 'dcr', iconPath: 'assets/images/dcr_icon.png', decimals: 8); + static const usdcpoly = CryptoCurrency(title: 'USDC', tag: 'POL', fullName: 'USD Coin', raw: 46, name: 'usdcpoly', iconPath: 'assets/images/crypto/usdc.png', decimals: 6); + static const dcr = CryptoCurrency(title: 'DCR', fullName: 'Decred', raw: 47, name: 'dcr', iconPath: 'assets/images/crypto/decred.png', decimals: 8); static const kmd = CryptoCurrency(title: 'KMD', fullName: 'Komodo', raw: 48, name: 'kmd', iconPath: 'assets/images/kmd_icon.png', decimals: 8); static const mana = CryptoCurrency(title: 'MANA', tag: 'ETH', fullName: 'Decentraland', raw: 49, name: 'mana', iconPath: 'assets/images/mana_icon.png', decimals: 18); - static const maticpoly = CryptoCurrency(title: 'POL', tag: 'POL', fullName: 'Polygon', raw: 50, name: 'maticpoly', iconPath: 'assets/images/matic_icon.png', decimals: 18); - static const matic = CryptoCurrency(title: 'MATIC', tag: 'ETH', fullName: 'Polygon', raw: 51, name: 'matic', iconPath: 'assets/images/matic_icon.png', decimals: 18); + static const maticpoly = CryptoCurrency(title: 'POL', tag: 'POL', fullName: 'Polygon', raw: 50, name: 'maticpoly', iconPath: 'assets/images/crypto/polygon.png', decimals: 18); + static const matic = CryptoCurrency(title: 'MATIC', tag: 'ETH', fullName: 'Polygon', raw: 51, name: 'matic', iconPath: 'assets/images/crypto/polygon.png', decimals: 18); static const mkr = CryptoCurrency(title: 'MKR', tag: 'ETH', fullName: 'Maker', raw: 52, name: 'mkr', iconPath: 'assets/images/mkr_icon.png', decimals: 18); static const near = CryptoCurrency(title: 'NEAR', fullName: 'NEAR Protocol', raw: 53, name: 'near', iconPath: 'assets/images/near_icon.png', decimals: 24); static const oxt = CryptoCurrency(title: 'OXT', tag: 'ETH', fullName: 'Orchid', raw: 54, name: 'oxt', iconPath: 'assets/images/oxt_icon.png', decimals: 18); @@ -199,7 +199,7 @@ class CryptoCurrency extends EnumerableItem with Serializable implemen static const scrt = CryptoCurrency(title: 'SCRT', fullName: 'Secret Network', raw: 59, name: 'scrt', iconPath: 'assets/images/scrt_icon.png', decimals: 6); static const uni = CryptoCurrency(title: 'UNI', tag: 'ETH', fullName: 'Uniswap', raw: 60, name: 'uni', iconPath: 'assets/images/uni_icon.png', decimals: 18); static const stx = CryptoCurrency(title: 'STX', fullName: 'Stacks', raw: 61, name: 'stx', iconPath: 'assets/images/stx_icon.png', decimals: 8); - static const btcln = CryptoCurrency(title: 'BTC', tag: 'LN', fullName: 'Bitcoin Lightning Network', raw: 62, name: 'btcln', iconPath: 'assets/images/btc.png', decimals: 8); + static const btcln = CryptoCurrency(title: 'BTC', tag: 'LN', fullName: 'Bitcoin Lightning Network', raw: 62, name: 'btcln', iconPath: 'assets/images/crypto/bitcoin.png', decimals: 8); static const shib = CryptoCurrency(title: 'SHIB', tag: 'ETH', fullName: 'Shiba Inu', raw: 63, name: 'shib', iconPath: 'assets/images/shib_icon.png', decimals: 18); static const aave = CryptoCurrency(title: 'AAVE', tag: 'ETH', fullName: 'Aave', raw: 64, name: 'aave', iconPath: 'assets/images/aave_icon.png', decimals: 18); static const arb = CryptoCurrency(title: 'ARB', fullName: 'Arbitrum', raw: 65, name: 'arb', iconPath: 'assets/images/arb_icon.png', decimals: 18); @@ -218,25 +218,25 @@ class CryptoCurrency extends EnumerableItem with Serializable implemen static const pepe = CryptoCurrency(title: 'PEPE', tag: 'ETH', fullName: 'Pepe', raw: 78, name: 'pepe', iconPath: 'assets/images/pepe_icon.png', decimals: 18); static const storj = CryptoCurrency(title: 'STORJ', tag: 'ETH', fullName: 'Storj', raw: 79, name: 'storj', iconPath: 'assets/images/storj_icon.png', decimals: 8); static const tusd = CryptoCurrency(title: 'TUSD', tag: 'ETH', fullName: 'TrueUSD', raw: 80, name: 'tusd', iconPath: 'assets/images/tusd_icon.png', decimals: 18); - static const wbtc = CryptoCurrency(title: 'WBTC', tag: 'ETH', fullName: 'Wrapped Bitcoin', raw: 81, name: 'wbtc', iconPath: 'assets/images/wbtc_icon.png', decimals: 8); + static const wbtc = CryptoCurrency(title: 'WBTC', tag: 'ETH', fullName: 'Wrapped Bitcoin', raw: 81, name: 'wbtc', iconPath: 'assets/images/crypto/wbtc.png', decimals: 8); static const weth = CryptoCurrency(title: 'WETH', tag: 'ETH', fullName: 'Wrapped Ethereum', raw: 82, name: 'weth', iconPath: 'assets/images/weth_icon.png', decimals: 18); static const zrx = CryptoCurrency(title: 'ZRX', tag: 'ETH', fullName: '0x Protocol', raw: 83, name: 'zrx', iconPath: 'assets/images/zrx_icon.png', decimals: 18); static const dydx = CryptoCurrency(title: 'DYDX', tag: 'ETH', fullName: 'dYdX', raw: 84, name: 'dydx', iconPath: 'assets/images/dydx_icon.png', decimals: 18); static const steth = CryptoCurrency(title: 'STETH', tag: 'ETH', fullName: 'Lido Staked Ethereum', raw: 85, name: 'steth', iconPath: 'assets/images/steth_icon.png', decimals: 18); static const banano = CryptoCurrency(title: 'BAN', fullName: 'Banano', raw: 86, name: 'banano', iconPath: 'assets/images/nano_icon.png', decimals: 29); - static const usdtPoly = CryptoCurrency(title: 'USDT', tag: 'POL', fullName: 'Tether USD (PoS)', raw: 87, name: 'usdtpoly', iconPath: 'assets/images/usdt_icon.png', decimals: 6); - static const usdcEPoly = CryptoCurrency(title: 'USDC.E', tag: 'POL', fullName: 'USD Coin (PoS)', raw: 88, name: 'usdcepoly', iconPath: 'assets/images/usdc_icon.png', decimals: 6); + static const usdtPoly = CryptoCurrency(title: 'USDT', tag: 'POL', fullName: 'Tether USD (PoS)', raw: 87, name: 'usdtpoly', iconPath: 'assets/images/crypto/tether.png', decimals: 6); + static const usdcEPoly = CryptoCurrency(title: 'USDC.E', tag: 'POL', fullName: 'USD Coin (PoS)', raw: 88, name: 'usdcepoly', iconPath: 'assets/images/crypto/usdc.png', decimals: 6); static const kaspa = CryptoCurrency(title: 'KAS', fullName: 'Kaspa', raw: 89, name: 'kas', iconPath: 'assets/images/kaspa_icon.png', decimals: 8); static const digibyte = CryptoCurrency(title: 'DGB', fullName: 'DigiByte', raw: 90, name: 'dgb', iconPath: 'assets/images/digibyte.png', decimals: 8); - static const usdtSol = CryptoCurrency(title: 'USDT', tag: 'SOL', fullName: 'USDT Tether', raw: 91, name: 'usdtsol', iconPath: 'assets/images/usdt_icon.png', decimals: 6); - static const usdcTrc20 = CryptoCurrency(title: 'USDC', tag: 'TRX', fullName: 'USDC Coin', raw: 92, name: 'usdctrc20', iconPath: 'assets/images/usdc_icon.png', decimals: 6); + static const usdtSol = CryptoCurrency(title: 'USDT', tag: 'SOL', fullName: 'USDT Tether', raw: 91, name: 'usdtsol', iconPath: 'assets/images/crypto/tether.png', decimals: 6); + static const usdcTrc20 = CryptoCurrency(title: 'USDC', tag: 'TRX', fullName: 'USDC Coin', raw: 92, name: 'usdctrc20', iconPath: 'assets/images/crypto/usdc.png', decimals: 6); static const tbtc = CryptoCurrency(title: 'tBTC', fullName: 'Testnet Bitcoin', raw: 93, name: 'tbtc', iconPath: 'assets/images/tbtc.png', decimals: 8); - static const wow = CryptoCurrency(title: 'WOW', fullName: 'Wownero', raw: 94, name: 'wow', iconPath: 'assets/images/wownero_icon.png', decimals: 11); + static const wow = CryptoCurrency(title: 'WOW', fullName: 'Wownero', raw: 94, name: 'wow', iconPath: 'assets/images/crypto/wownero.png', decimals: 11); static const ton = CryptoCurrency(title: 'TON', fullName: 'Toncoin', raw: 95, name: 'ton', iconPath: 'assets/images/ton_icon.png', decimals: 8); - static const zano = CryptoCurrency(title: 'ZANO', tag: 'ZANO', fullName: 'Zano', raw: 96, name: 'zano', iconPath: 'assets/images/zano_icon.png', decimals: 12); + static const zano = CryptoCurrency(title: 'ZANO', tag: 'ZANO', fullName: 'Zano', raw: 96, name: 'zano', iconPath: 'assets/images/crypto/zano.png', decimals: 12); static const flip = CryptoCurrency(title: 'FLIP', tag: 'ETH', fullName: 'Chainflip', raw: 97, name: 'flip', iconPath: 'assets/images/flip_icon.png', decimals: 18); static const deuro = CryptoCurrency(title: 'DEURO', tag: 'ETH', fullName: 'Decentralized Euro', raw: 98, name: 'deuro', iconPath: 'assets/images/deuro_icon.png', decimals: 18); - static const usdtbsc = CryptoCurrency(title: 'USDT', tag: 'BSC', fullName: 'USDT Binance coin', raw: 99, name: 'usdtbsc', iconPath: 'assets/images/usdtbsc_icon.png', decimals: 18); + static const usdtbsc = CryptoCurrency(title: 'USDT', tag: 'BSC', fullName: 'USDT Binance coin', raw: 99, name: 'usdtbsc', iconPath: 'assets/images/crypto/tether.png', decimals: 18); static const ndeps = CryptoCurrency(title: 'NDEPS', tag: 'ETH', fullName: 'Native Decentralized Euro Protocol Share', raw: 100, name: 'ndeps', iconPath: 'assets/images/ndeps_icon.png', decimals: 18); static const deps = CryptoCurrency(title: 'DEPS', tag: 'ETH', fullName: 'Decentralized Euro Protocol Share', raw: 101, name: 'deps', iconPath: 'assets/images/deps_icon.png', decimals: 18); static const kbtc = CryptoCurrency(title: 'KBTC', tag: 'ETH', fullName: 'Kraken Wrapped Bitcoin', raw: 102, name: 'kbtc', iconPath: 'assets/images/kbtc_icon.png', decimals: 8); diff --git a/lib/cake_pay/src/cards/cake_pay_buy_card_page.dart b/lib/cake_pay/src/cards/cake_pay_buy_card_page.dart index 1d53f9b4b5..1d24a5ad43 100644 --- a/lib/cake_pay/src/cards/cake_pay_buy_card_page.dart +++ b/lib/cake_pay/src/cards/cake_pay_buy_card_page.dart @@ -39,9 +39,8 @@ import 'package:keyboard_actions/keyboard_actions.dart'; import 'package:mobx/mobx.dart'; class CakePayBuyCardPage extends BasePage { - CakePayBuyCardPage( - this.cakePayBuyCardViewModel - ) : _sendViewModel = cakePayBuyCardViewModel.sendViewModel, + CakePayBuyCardPage(this.cakePayBuyCardViewModel) + : _sendViewModel = cakePayBuyCardViewModel.sendViewModel, _amountFieldFocus = FocusNode(), _amountController = TextEditingController(), _quantityFieldFocus = FocusNode(), @@ -303,7 +302,8 @@ class CakePayBuyCardPage extends BasePage { methods.length <= 1 || selected == null ? const SizedBox.shrink() : _buildPaymentMethodWidget(methods, selected), - if (_sendViewModel.walletType == WalletType.litecoin && _sendViewModel.isMwebEnabled) + if (_sendViewModel.walletType == WalletType.litecoin && + _sendViewModel.isMwebEnabled) Observer( builder: (_) => Padding( padding: EdgeInsets.only(top: 10, bottom: 0, right: 20, left: 20), @@ -323,8 +323,7 @@ class CakePayBuyCardPage extends BasePage { captionColor: Theme.of(context).colorScheme.onSurfaceVariant, borderColor: Theme.of(context).colorScheme.primary, iconColor: Theme.of(context).colorScheme.primary, - value: - _sendViewModel.coinTypeToSpendFrom == UnspentCoinType.any, + value: _sendViewModel.coinTypeToSpendFrom == UnspentCoinType.any, onChanged: (bool? value) { _sendViewModel.setAllowMwebCoins(value ?? false); }, @@ -351,9 +350,8 @@ class CakePayBuyCardPage extends BasePage { text: '(Dev) Simulate Purchasing Gift Card', isDisabled: !cakePayBuyCardViewModel.isAmountSufficient || cakePayBuyCardViewModel.isPurchasing, - isLoading: - _sendViewModel.state is IsExecutingState || - cakePayBuyCardViewModel.isPurchasing, + isLoading: _sendViewModel.state is IsExecutingState || + cakePayBuyCardViewModel.isPurchasing, color: Theme.of(context).colorScheme.primary, textColor: Theme.of(context).colorScheme.onPrimary, ), @@ -600,7 +598,7 @@ class CakePayBuyCardPage extends BasePage { profileName: order?.cards.first.cardName ?? 'Cake Pay', profileImageUrl: order?.cards.first.cardImagePath ?? '', ), - fiatAmount: '${order?.totalReceiveAmount}', + fiatAmount: '${order?.totalReceiveAmount}', )) .toList(); @@ -613,7 +611,6 @@ class CakePayBuyCardPage extends BasePage { return ConfirmSendingBottomSheet( key: ValueKey('cake_pay_buy_page_confirm_sending_dialog_key'), titleText: S.of(bottomSheetContext).confirm_transaction, - currentTheme: currentTheme, cakePayBuyCardViewModel: cakePayBuyCardViewModel, paymentId: S.of(bottomSheetContext).payment_id, paymentIdValue: cakePayBuyCardViewModel.order?.orderId, @@ -627,7 +624,7 @@ class CakePayBuyCardPage extends BasePage { fiatAmountValue: _sendViewModel.pendingTransactionFiatAmountFormatted, fee: S.of(bottomSheetContext).send_fee, feeValue: _sendViewModel.pendingTransaction!.feeFormatted, - feeFiatAmount:_sendViewModel.pendingTransactionFeeFiatAmountFormatted, + feeFiatAmount: _sendViewModel.pendingTransactionFeeFiatAmountFormatted, outputs: displayingOutputs, footerType: FooterType.slideActionButton, slideActionButtonText: @@ -732,7 +729,6 @@ class CakePayBuyCardPage extends BasePage { context: context, isDismissible: false, builder: (BuildContext bottomSheetContext) => InfoBottomSheet( - currentTheme: currentTheme, footerType: FooterType.singleActionButton, titleText: S.of(bottomSheetContext).proceed_on_device, contentImage: 'assets/images/hardware_wallet/ledger_nano_x.png', diff --git a/lib/cake_pay/src/cards/cake_pay_cards_page.dart b/lib/cake_pay/src/cards/cake_pay_cards_page.dart index adc850f555..cee2ea240d 100644 --- a/lib/cake_pay/src/cards/cake_pay_cards_page.dart +++ b/lib/cake_pay/src/cards/cake_pay_cards_page.dart @@ -10,13 +10,10 @@ import 'package:cake_wallet/cake_pay/src/widgets/card_item.dart'; import 'package:cake_wallet/src/screens/dashboard/widgets/filter_widget.dart'; import 'package:cake_wallet/src/widgets/bottom_sheet/base_bottom_sheet_widget.dart'; import 'package:cake_wallet/src/widgets/bottom_sheet/cake_pay_card_info_bottom_sheet_widget.dart'; -import 'package:cake_wallet/src/widgets/cake_scrollbar.dart'; import 'package:cake_wallet/src/widgets/gradient_background.dart'; import 'package:cake_wallet/src/widgets/picker.dart'; import 'package:cake_wallet/src/widgets/tab_view_wrapper_widget.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; import 'package:cake_wallet/typography.dart'; -import 'package:cake_wallet/utils/debounce.dart'; import 'package:cake_wallet/utils/feature_flag.dart'; import 'package:cake_wallet/utils/responsive_layout_util.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; @@ -94,10 +91,7 @@ class CakePayCardsPage extends BasePage { @override Widget body(BuildContext context) { - return CakePayCardsPageBody( - cardsListViewModel: _cardsListViewModel, - currentTheme: currentTheme, - titleColor: titleColor); + return CakePayCardsPageBody(cardsListViewModel: _cardsListViewModel, titleColor: titleColor); } } @@ -105,12 +99,10 @@ class CakePayCardsPageBody extends StatefulWidget { const CakePayCardsPageBody({ super.key, required CakePayCardsListViewModel cardsListViewModel, - required this.currentTheme, required this.titleColor, }) : _cardsListViewModel = cardsListViewModel; final CakePayCardsListViewModel _cardsListViewModel; - final MaterialThemeBase currentTheme; final Color? Function(BuildContext) titleColor; @override @@ -188,8 +180,8 @@ class _CakePayCardsPageBodyState extends State { ], views: [ _MyCardsTab( - cardsListViewModel: widget._cardsListViewModel, - currentTheme: widget.currentTheme), + cardsListViewModel: widget._cardsListViewModel, + ), _ShopTab(cardsListViewModel: widget._cardsListViewModel) ]), ) @@ -258,10 +250,9 @@ class _TrailingIcon extends StatelessWidget { } class _MyCardsTab extends StatefulWidget { - const _MyCardsTab({required this.cardsListViewModel, required this.currentTheme}); + const _MyCardsTab({required this.cardsListViewModel}); final CakePayCardsListViewModel cardsListViewModel; - final MaterialThemeBase currentTheme; @override State<_MyCardsTab> createState() => _MyCardsTabState(); @@ -322,18 +313,20 @@ class _MyCardsTabState extends State<_MyCardsTab> { logoUrl: card.cardImageUrl, title: card.name, subTitle: '\$100', - onTap: () => _showCardInfoBottomSheet(context, card, widget.currentTheme), + onTap: () => _showCardInfoBottomSheet(context, card), ); }, ), ], ); - return showThumb ? Scrollbar( - key: ValueKey('cake_pay_my_cards_tab_scrollbar_key'), - thumbVisibility: true, - trackVisibility: true, - child: userCardsList, - ) : userCardsList; + return showThumb + ? Scrollbar( + key: ValueKey('cake_pay_my_cards_tab_scrollbar_key'), + thumbVisibility: true, + trackVisibility: true, + child: userCardsList, + ) + : userCardsList; }), ), ], @@ -342,8 +335,7 @@ class _MyCardsTabState extends State<_MyCardsTab> { } } -Future _showCardInfoBottomSheet( - BuildContext context, CakePayCard card, MaterialThemeBase currentTheme) async { +Future _showCardInfoBottomSheet(BuildContext context, CakePayCard card) async { bool isReloadable = false; // TODO: replace with real logic if (card.name.toLowerCase().contains('prepaid')) { isReloadable = true; @@ -360,7 +352,6 @@ Future _showCardInfoBottomSheet( titleText: 'Reloadable Card', balance: '100 USD', howToUse: card.howToUse, - currentTheme: currentTheme, footerType: FooterType.doubleActionButton, applyBoxShadow: true, contentImage: card.cardImageUrl, @@ -376,7 +367,6 @@ Future _showCardInfoBottomSheet( titleText: card.name, balance: '500 USD', howToUse: card.howToUse, - currentTheme: currentTheme, footerType: FooterType.singleActionButton, applyBoxShadow: true, contentImage: card.cardImageUrl, @@ -400,7 +390,6 @@ class _ShopTab extends StatefulWidget { class _ShopTabState extends State<_ShopTab> { late final ScrollController _scroll; - @override void initState() { super.initState(); @@ -466,8 +455,7 @@ class _ShopTabState extends State<_ShopTab> { return const _Loading(); } - if (vendors.isEmpty) - return Center(child: Text(S.of(context).no_cards_found)); + if (vendors.isEmpty) return Center(child: Text(S.of(context).no_cards_found)); final loadingMore = viewModel.isLoadingNextPage; final showThumb = vendors.length > 3; diff --git a/lib/di.dart b/lib/di.dart index 61d478a592..3587d17124 100644 --- a/lib/di.dart +++ b/lib/di.dart @@ -1169,7 +1169,6 @@ Future setup({ getIt.registerFactoryParam( (paymentFlowResult, _) => SwapConfirmationBottomSheet( paymentFlowResult: paymentFlowResult, - currentTheme: getIt.get().themeStore.currentTheme, exchangeViewModel: getIt.get(), authService: getIt.get(), ), @@ -1177,7 +1176,6 @@ Future setup({ getIt.registerFactory( () => SwapDetailsBottomSheet( - currentTheme: getIt.get().themeStore.currentTheme, exchangeTradeViewModel: getIt.get(), ), ); diff --git a/lib/entities/preferences_key.dart b/lib/entities/preferences_key.dart index 36022a929a..b607ce7ed3 100644 --- a/lib/entities/preferences_key.dart +++ b/lib/entities/preferences_key.dart @@ -37,6 +37,9 @@ class PreferencesKey { static const exchangeStatusKey = 'exchange_status'; static const currentTheme = 'current_theme'; static const themeMode = 'theme_mode'; + static const blackThemeOled = 'black_theme_oled_enabled'; + static const savedDarkTheme = 'saved_dark_theme'; + static const savedLightTheme = 'saved_light_theme'; static const displayActionListModeKey = 'display_list_mode'; static const currentPinLength = 'current_pin_length'; static const currentLanguageCode = 'language_code'; diff --git a/lib/nostr/nostr_api.dart b/lib/nostr/nostr_api.dart index be59f0ebaf..8d9164e57e 100644 --- a/lib/nostr/nostr_api.dart +++ b/lib/nostr/nostr_api.dart @@ -29,7 +29,10 @@ class NostrProfileHandler { } static Future processRelays( - BuildContext context, ProfilePointer profile, String nip05Address) async { + BuildContext context, + ProfilePointer profile, + String nip05Address, + ) async { String userDomain = _extractDomain(nip05Address); const int metaData = 0; @@ -45,7 +48,8 @@ class NostrProfileHandler { } await _showErrorDialog(context, S.of(context).no_relays, S.of(context).no_relay_on_domain); - String? chosenRelayUrl = await _showRelayChoiceDialog(context, profile.relays ?? []); + String? chosenRelayUrl = + await _showRelayChoiceDialog(context, profile.relays ?? []); if (chosenRelayUrl != null) { final userData = await _fetchInfoFromRelay(chosenRelayUrl, profile.pubkey, [metaData]); if (userData != null) { @@ -121,7 +125,10 @@ class NostrProfileHandler { } } - static Future _showRelayChoiceDialog(BuildContext context, List relays) async { + static Future _showRelayChoiceDialog( + BuildContext context, + List relays, + ) async { String? selectedRelay; if (context.mounted) { diff --git a/lib/src/screens/base_page.dart b/lib/src/screens/base_page.dart index 149598d621..5adf565e0c 100644 --- a/lib/src/screens/base_page.dart +++ b/lib/src/screens/base_page.dart @@ -72,7 +72,7 @@ abstract class BasePage extends StatelessWidget { Widget backButton(BuildContext context) => Icon( Icons.arrow_back_ios, - color: pageIconColor(context), + color: Theme.of(context).colorScheme.primary, size: 16, ); diff --git a/lib/src/screens/buy/buy_sell_page.dart b/lib/src/screens/buy/buy_sell_page.dart index c14df4d50c..af29d02b23 100644 --- a/lib/src/screens/buy/buy_sell_page.dart +++ b/lib/src/screens/buy/buy_sell_page.dart @@ -78,11 +78,10 @@ class BuySellPage extends BasePage { Widget? leading(BuildContext context) { final _backButton = Icon( Icons.arrow_back_ios, - color: Theme.of(context).colorScheme.onSurface, + color: Theme.of(context).colorScheme.primary, size: 16, ); - final _closeButton = - buySellViewModel.isDarkTheme ? closeButtonImageDarkTheme : closeButtonImage; + final _closeButton = currentTheme.isDark ? closeButtonImageDarkTheme : closeButtonImage; bool isMobileView = responsiveLayoutUtil.shouldRenderMobileUI; @@ -211,7 +210,7 @@ class BuySellPage extends BasePage { borderRadius: 30, padding: EdgeInsets.symmetric(horizontal: 24, vertical: 8), leadingIcon: Icons.arrow_forward_ios, - isDarkTheme: buySellViewModel.isDarkTheme); + isDarkTheme: currentTheme.isDark); } if (buySellViewModel.paymentMethodState is PaymentMethodFailed) { return OptionTilePlaceholder(errorText: 'No payment methods available', borderRadius: 30); @@ -225,7 +224,7 @@ class BuySellPage extends BasePage { title: selectedPaymentMethod.title, onPressed: () => _pickPaymentMethod(context), leadingIcon: Icons.arrow_forward_ios, - isLightMode: !buySellViewModel.isDarkTheme, + isLightMode: !currentTheme.isDark, borderRadius: 30, padding: EdgeInsets.symmetric(horizontal: 24, vertical: 8), titleTextStyle: Theme.of(context).textTheme.titleMedium?.copyWith( @@ -321,8 +320,8 @@ class BuySellPage extends BasePage { _cryptoAddressFocus.addListener(() async { if (!_cryptoAddressFocus.hasFocus && cryptoAddressController.text.isNotEmpty) { final domain = cryptoAddressController.text; - buySellViewModel.cryptoCurrencyAddress = - await fetchParsedAddress(context, domain, buySellViewModel.cryptoCurrency); + buySellViewModel.cryptoCurrencyAddress = await fetchParsedAddress( + context, domain, buySellViewModel.cryptoCurrency); } }); @@ -404,7 +403,7 @@ class BuySellPage extends BasePage { onCurrencySelected: (currency) => buySellViewModel.changeFiatCurrency(currency: currency), imageArrow: Image.asset( 'assets/images/arrow_bottom_purple_icon.png', - color: Theme.of(context).colorScheme.onSurface, + color: Theme.of(context).colorScheme.primary, height: 8, ), currencyButtonColor: Colors.transparent, @@ -441,7 +440,7 @@ class BuySellPage extends BasePage { onCurrencySelected: (currency) => buySellViewModel.changeCryptoCurrency(currency: currency), imageArrow: Image.asset( 'assets/images/arrow_bottom_cake_green.png', - color: Theme.of(context).colorScheme.onSurface, + color: Theme.of(context).colorScheme.primary, height: 8, ), currencyButtonColor: Colors.transparent, @@ -508,8 +507,12 @@ class BuySellPage extends BasePage { } Future fetchParsedAddress( - BuildContext context, String domain, CryptoCurrency currency) async { - final parsedAddress = await getIt.get().resolve(context, domain, currency); + BuildContext context, + String domain, + CryptoCurrency currency, + ) async { + final parsedAddress = + await getIt.get().resolve(context, domain, currency); final address = await extractAddressFromParsed(context, parsedAddress); return address; } diff --git a/lib/src/screens/connect_device/connect_device_page.dart b/lib/src/screens/connect_device/connect_device_page.dart index 784a501953..7bde274348 100644 --- a/lib/src/screens/connect_device/connect_device_page.dart +++ b/lib/src/screens/connect_device/connect_device_page.dart @@ -316,7 +316,6 @@ class ConnectDevicePageBodyState extends State { isScrollControlled: true, builder: (BuildContext bottomSheetContext) => InfoStepsBottomSheet( titleText: S.of(context).how_to_connect, - currentTheme: widget.currentTheme, steps: [ InfoStep('${S.of(context).step} 1', S.of(context).connect_hw_info_step_1), InfoStep('${S.of(context).step} 2', S.of(context).connect_hw_info_step_2), diff --git a/lib/src/screens/connect_device/monero_hardware_wallet_options_page.dart b/lib/src/screens/connect_device/monero_hardware_wallet_options_page.dart index d73d910f2e..a129d6f65f 100644 --- a/lib/src/screens/connect_device/monero_hardware_wallet_options_page.dart +++ b/lib/src/screens/connect_device/monero_hardware_wallet_options_page.dart @@ -31,7 +31,7 @@ class _MoneroHardwareWalletOptionsForm extends StatefulWidget { const _MoneroHardwareWalletOptionsForm(this._walletHardwareRestoreVM); final WalletHardwareRestoreViewModel _walletHardwareRestoreVM; - + @override _MoneroHardwareWalletOptionsFormState createState() => _MoneroHardwareWalletOptionsFormState(_walletHardwareRestoreVM); diff --git a/lib/src/screens/connect_device/select_device_manufacturer_page.dart b/lib/src/screens/connect_device/select_device_manufacturer_page.dart index b1192ac438..920e8e77bc 100644 --- a/lib/src/screens/connect_device/select_device_manufacturer_page.dart +++ b/lib/src/screens/connect_device/select_device_manufacturer_page.dart @@ -109,7 +109,6 @@ class SelectDeviceManufacturerPage extends BasePage { arguments: [manufacturer.hardwareWalletType]); } }, - isDarkTheme: currentTheme.isDark, ), ), ), @@ -127,7 +126,6 @@ class SelectDeviceManufacturerPage extends BasePage { onPressed: () => Fluttertoast.showToast(msg: 'One more tap and it might work'), // Ester egg - isDarkTheme: currentTheme.isDark, isUnavailable: true, ), ), diff --git a/lib/src/screens/connect_device/widgets/manufacturer_option_tile.dart b/lib/src/screens/connect_device/widgets/manufacturer_option_tile.dart index 6e49ae9d4e..235d70c2ac 100644 --- a/lib/src/screens/connect_device/widgets/manufacturer_option_tile.dart +++ b/lib/src/screens/connect_device/widgets/manufacturer_option_tile.dart @@ -1,11 +1,10 @@ -import 'package:cake_wallet/themes/utils/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/core/theme_extension.dart'; import 'package:flutter/material.dart'; class ManufacturerOptionTile extends StatelessWidget { const ManufacturerOptionTile({ required this.onPressed, required this.image, - required this.isDarkTheme, this.tag, this.isUnavailable = false, }); @@ -14,7 +13,6 @@ class ManufacturerOptionTile extends StatelessWidget { final Widget image; final String? tag; final bool isUnavailable; - final bool isDarkTheme; @override Widget build(BuildContext context) => GestureDetector( @@ -28,12 +26,8 @@ class ManufacturerOptionTile extends StatelessWidget { borderRadius: BorderRadius.circular(12), gradient: LinearGradient( colors: [ - isDarkTheme - ? CustomThemeColors.cardGradientColorPrimaryDark - : CustomThemeColors.cardGradientColorPrimaryLight, - isDarkTheme - ? CustomThemeColors.cardGradientColorSecondaryDark - : CustomThemeColors.cardGradientColorSecondaryLight, + context.customColors.cardGradientColorPrimary, + context.customColors.cardGradientColorSecondary, ], begin: Alignment.topCenter, end: Alignment.bottomCenter, diff --git a/lib/src/screens/contact/contact_page.dart b/lib/src/screens/contact/contact_page.dart index 2b54736ccb..1cc030fa07 100644 --- a/lib/src/screens/contact/contact_page.dart +++ b/lib/src/screens/contact/contact_page.dart @@ -144,13 +144,14 @@ class ContactPage extends BasePage { void _presentCurrencyPicker(BuildContext context) { showPopUp( builder: (_) => CurrencyPicker( - selectedAtIndex: contactViewModel.currency != null - ? contactViewModel.currencies.indexOf(contactViewModel.currency!) - : -1, - items: contactViewModel.currencies, - title: S.of(context).please_select, - hintText: S.of(context).search_currency, - onItemSelected: (Currency item) => contactViewModel.currency = item as CryptoCurrency), + selectedAtIndex: contactViewModel.currency != null + ? contactViewModel.currencies.indexOf(contactViewModel.currency!) + : -1, + items: contactViewModel.currencies, + title: S.of(context).please_select, + hintText: S.of(context).search_currency, + onItemSelected: (Currency item) => contactViewModel.currency = item as CryptoCurrency, + ), context: context, ); } diff --git a/lib/src/screens/dashboard/dashboard_page.dart b/lib/src/screens/dashboard/dashboard_page.dart index 98cb2f2dbe..107024a77c 100644 --- a/lib/src/screens/dashboard/dashboard_page.dart +++ b/lib/src/screens/dashboard/dashboard_page.dart @@ -174,7 +174,7 @@ class _DashboardPageView extends BasePage { label: S.of(context).wallet_menu, child: SvgPicture.asset( 'assets/images/menu.svg', - color: Theme.of(context).colorScheme.onSurface, + color: Theme.of(context).colorScheme.primary, ), ), ), @@ -262,7 +262,6 @@ class _DashboardPageView extends BasePage { ), NavigationDock( dashboardViewModel: dashboardViewModel, - currentTheme: currentTheme, ) ], ), diff --git a/lib/src/screens/dashboard/desktop_widgets/desktop_wallet_selection_dropdown.dart b/lib/src/screens/dashboard/desktop_widgets/desktop_wallet_selection_dropdown.dart index 74e7570686..a83f212344 100644 --- a/lib/src/screens/dashboard/desktop_widgets/desktop_wallet_selection_dropdown.dart +++ b/lib/src/screens/dashboard/desktop_widgets/desktop_wallet_selection_dropdown.dart @@ -30,22 +30,22 @@ class DesktopWalletSelectionDropDown extends StatefulWidget { } class _DesktopWalletSelectionDropDownState extends State { - final moneroIcon = Image.asset('assets/images/monero_logo.png', height: 24, width: 24); - final bitcoinIcon = Image.asset('assets/images/bitcoin.png', height: 24, width: 24); + final moneroIcon = Image.asset('assets/images/crypto/monero.png', height: 24, width: 24); + final bitcoinIcon = Image.asset('assets/images/crypto/bitcoin.png', height: 24, width: 24); final tBitcoinIcon = Image.asset('assets/images/tbtc.png', height: 24, width: 24); - final litecoinIcon = Image.asset('assets/images/litecoin_icon.png', height: 24, width: 24); + final litecoinIcon = Image.asset('assets/images/crypto/litecoin.png', height: 24, width: 24); final havenIcon = Image.asset('assets/images/haven_logo.png', height: 24, width: 24); - final ethereumIcon = Image.asset('assets/images/eth_icon.png', height: 24, width: 24); - final polygonIcon = Image.asset('assets/images/matic_icon.png', height: 24, width: 24); - final bitcoinCashIcon = Image.asset('assets/images/bch_icon.png', height: 24, width: 24); - final nanoIcon = Image.asset('assets/images/nano_icon.png', height: 24, width: 24); - final bananoIcon = Image.asset('assets/images/nano_icon.png', height: 24, width: 24); - final solanaIcon = Image.asset('assets/images/sol_icon.png', height: 24, width: 24); - final tronIcon = Image.asset('assets/images/trx_icon.png', height: 24, width: 24); - final wowneroIcon = Image.asset('assets/images/wownero_icon.png', height: 24, width: 24); - final zanoIcon = Image.asset('assets/images/zano_icon.png', height: 24, width: 24); - final decredIcon = Image.asset('assets/images/decred_icon.png', height: 24, width: 24); - final dogeIcon = Image.asset('assets/images/doge_icon.png', height: 24, width: 24); + final ethereumIcon = Image.asset('assets/images/crypto/ethereum.png', height: 24, width: 24); + final polygonIcon = Image.asset('assets/images/crypto/polygon.png', height: 24, width: 24); + final bitcoinCashIcon = Image.asset('assets/images/crypto/bitcoin-cash.png', height: 24, width: 24); + final nanoIcon = Image.asset('assets/images/crypto/nano.png', height: 24, width: 24); + final bananoIcon = Image.asset('assets/images/crypto/nano.png', height: 24, width: 24); + final solanaIcon = Image.asset('assets/images/crypto/solana.png', height: 24, width: 24); + final tronIcon = Image.asset('assets/images/crypto/tron.png', height: 24, width: 24); + final wowneroIcon = Image.asset('assets/images/crypto/wownero.png', height: 24, width: 24); + final zanoIcon = Image.asset('assets/images/crypto/zano.png', height: 24, width: 24); + final decredIcon = Image.asset('assets/images/crypto/decred.png', height: 24, width: 24); + final dogeIcon = Image.asset('assets/images/crypto/dogecoin.png', height: 24, width: 24); final nonWalletTypeIcon = Image.asset('assets/images/close.png', height: 24, width: 24); Image _newWalletImage(BuildContext context) => Image.asset( diff --git a/lib/src/screens/dashboard/edit_token_page.dart b/lib/src/screens/dashboard/edit_token_page.dart index 777519f00d..7399ac0bda 100644 --- a/lib/src/screens/dashboard/edit_token_page.dart +++ b/lib/src/screens/dashboard/edit_token_page.dart @@ -10,8 +10,7 @@ import 'package:cake_wallet/src/widgets/checkbox_widget.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart'; import 'package:cake_wallet/src/widgets/warning_box_widget.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; -import 'package:cake_wallet/themes/utils/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/core/theme_extension.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; import 'package:cake_wallet/view_model/dashboard/home_settings_view_model.dart'; import 'package:cw_core/crypto_currency.dart'; @@ -44,7 +43,6 @@ class EditTokenPage extends BasePage { homeSettingsViewModel: homeSettingsViewModel, token: token, initialContractAddress: initialContractAddress, - currentTheme: currentTheme, ); } } @@ -55,13 +53,11 @@ class EditTokenPageBody extends StatefulWidget { required this.homeSettingsViewModel, this.token, this.initialContractAddress, - required this.currentTheme, }) : super(key: key); final HomeSettingsViewModel homeSettingsViewModel; final CryptoCurrency? token; final String? initialContractAddress; - final MaterialThemeBase currentTheme; @override State createState() => _EditTokenPageBodyState(); @@ -128,8 +124,7 @@ class _EditTokenPageBodyState extends State { void _checkIfTokenIsVerified(String? contractAddress) { if (contractAddress == null) return; - final isVerified = - widget.homeSettingsViewModel.checkIfTokenIsWhitelisted(contractAddress); + final isVerified = widget.homeSettingsViewModel.checkIfTokenIsWhitelisted(contractAddress); if (!mounted) return; setState(() { @@ -151,13 +146,10 @@ class _EditTokenPageBodyState extends State { WarningBox( padding: EdgeInsets.all(16), content: S.of(context).add_token_warning, - currentTheme: widget.currentTheme, showBorder: false, textWeight: FontWeight.w500, textAlign: TextAlign.start, - textColor: widget.currentTheme.isDark - ? CustomThemeColors.warningOutlineColorDark - : CustomThemeColors.warningOutlineColorLight, + textColor: context.customColors.warningOutlineColor, iconSize: 22, iconSpacing: 16, ), @@ -443,12 +435,9 @@ class _EditTokenPageBodyState extends State { ? WarningBox( padding: EdgeInsets.all(16), content: S.of(context).tokens_strong_warning, - currentTheme: widget.currentTheme, showBorder: false, textWeight: FontWeight.w500, - textColor: widget.currentTheme.isDark - ? CustomThemeColors.warningOutlineColorDark - : CustomThemeColors.warningOutlineColorLight, + textColor: context.customColors.warningOutlineColor, showIcon: false, ) : Text( diff --git a/lib/src/screens/dashboard/pages/address_page.dart b/lib/src/screens/dashboard/pages/address_page.dart index 77ec843464..c7e5c8793c 100644 --- a/lib/src/screens/dashboard/pages/address_page.dart +++ b/lib/src/screens/dashboard/pages/address_page.dart @@ -60,7 +60,7 @@ class AddressPage extends BasePage { Widget? leading(BuildContext context) { final _backButton = Icon( Icons.arrow_back_ios, - color: titleColor(context), + color: Theme.of(context).colorScheme.primary, size: 16, ); final _closeButton = currentTheme.isDark ? closeButtonImageDarkTheme : closeButtonImage; @@ -114,7 +114,7 @@ class AddressPage extends BasePage { context: context, ); }, - icon: Icon(Icons.share, size: 20, color: pageIconColor(context)), + icon: Icon(Icons.share, size: 20, color: Theme.of(context).colorScheme.primary), ), ), ); @@ -150,7 +150,6 @@ class AddressPage extends BasePage { addressListViewModel: addressListViewModel, amountTextFieldFocusNode: _cryptoAmountFocus, amountController: _amountController, - currentTheme: dashboardViewModel.appStore.themeStore.currentTheme, ), ), ), diff --git a/lib/src/screens/dashboard/pages/balance/balance_row_widget.dart b/lib/src/screens/dashboard/pages/balance/balance_row_widget.dart index 288429363c..766914f769 100644 --- a/lib/src/screens/dashboard/pages/balance/balance_row_widget.dart +++ b/lib/src/screens/dashboard/pages/balance/balance_row_widget.dart @@ -6,7 +6,7 @@ import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/src/screens/exchange_trade/information_page.dart'; import 'package:cake_wallet/src/widgets/cake_image_widget.dart'; -import 'package:cake_wallet/themes/utils/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/core/theme_extension.dart'; import 'package:cake_wallet/utils/payment_request.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart'; @@ -71,22 +71,20 @@ class BalanceRowWidget extends StatelessWidget { decoration: BoxDecoration( borderRadius: BorderRadius.circular(15.0), gradient: LinearGradient( - colors: [ - dashboardViewModel.isDarkTheme - ? CustomThemeColors.cardGradientColorPrimaryDark - : CustomThemeColors.cardGradientColorPrimaryLight, - dashboardViewModel.isDarkTheme - ? CustomThemeColors.cardGradientColorSecondaryDark - : CustomThemeColors.cardGradientColorSecondaryLight, - ], - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - ), + colors: [ + context.customColors.cardGradientColorPrimary, + context.customColors.cardGradientColorSecondary, + ], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + ), ), child: TextButton( onPressed: _showToast, onLongPress: () => dashboardViewModel.balanceViewModel.switchBalanceValue(), style: TextButton.styleFrom( + side: BorderSide( + width: 1.25, color: Theme.of(context).colorScheme.surfaceContainerHigh), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15)), ), child: Container( @@ -328,12 +326,8 @@ class BalanceRowWidget extends StatelessWidget { borderRadius: BorderRadius.circular(15), gradient: LinearGradient( colors: [ - dashboardViewModel.isDarkTheme - ? CustomThemeColors.cardGradientColorPrimaryDark - : CustomThemeColors.cardGradientColorPrimaryLight, - dashboardViewModel.isDarkTheme - ? CustomThemeColors.cardGradientColorSecondaryDark - : CustomThemeColors.cardGradientColorSecondaryLight, + context.customColors.cardGradientColorPrimary, + context.customColors.cardGradientColorSecondary, ], begin: Alignment.topCenter, end: Alignment.bottomCenter, @@ -531,7 +525,8 @@ class BalanceRowWidget extends StatelessWidget { style: OutlinedButton.styleFrom( backgroundColor: Theme.of(context).colorScheme.primary, side: BorderSide( - color: Theme.of(context).colorScheme.outlineVariant.withAlpha(0), + color: + Theme.of(context).colorScheme.outlineVariant.withAlpha(0), width: 0, ), shape: RoundedRectangleBorder( @@ -588,7 +583,8 @@ class BalanceRowWidget extends StatelessWidget { style: OutlinedButton.styleFrom( backgroundColor: Theme.of(context).colorScheme.surface, side: BorderSide( - color: Theme.of(context).colorScheme.outlineVariant.withAlpha(0), + color: + Theme.of(context).colorScheme.outlineVariant.withAlpha(0), width: 0, ), shape: RoundedRectangleBorder( diff --git a/lib/src/screens/dashboard/pages/balance/crypto_balance_widget.dart b/lib/src/screens/dashboard/pages/balance/crypto_balance_widget.dart index fc526aae9f..7ff65a76fa 100644 --- a/lib/src/screens/dashboard/pages/balance/crypto_balance_widget.dart +++ b/lib/src/screens/dashboard/pages/balance/crypto_balance_widget.dart @@ -9,6 +9,7 @@ import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; import 'package:cake_wallet/src/widgets/dashboard_card_widget.dart'; import 'package:cake_wallet/src/widgets/introducing_card.dart'; import 'package:cake_wallet/src/widgets/standard_switch.dart'; +import 'package:cake_wallet/themes/core/theme_extension.dart'; import 'package:cake_wallet/utils/feature_flag.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart'; @@ -57,7 +58,6 @@ class CryptoBalanceWidget extends StatelessWidget { return Padding( padding: const EdgeInsets.fromLTRB(16, 0, 16, 16), child: DashBoardRoundedCardWidget( - isDarkTheme: dashboardViewModel.isDarkTheme, title: "Invalid monero bindings", subTitle: dashboardViewModel.getMoneroError.toString(), ), @@ -72,7 +72,6 @@ class CryptoBalanceWidget extends StatelessWidget { return Padding( padding: const EdgeInsets.fromLTRB(16, 0, 16, 16), child: DashBoardRoundedCardWidget( - isDarkTheme: dashboardViewModel.isDarkTheme, title: "Invalid wownero bindings", subTitle: dashboardViewModel.getWowneroError.toString(), ), @@ -157,7 +156,6 @@ class CryptoBalanceWidget extends StatelessWidget { return Padding( padding: const EdgeInsets.fromLTRB(16, 0, 16, 8), child: DashBoardRoundedCardWidget( - isDarkTheme: dashboardViewModel.isDarkTheme, title: S.of(context).rep_warning, subTitle: S.of(context).rep_warning_sub, onTap: () => Navigator.of(context).pushNamed(Routes.changeRep), @@ -220,7 +218,6 @@ class CryptoBalanceWidget extends StatelessWidget { Padding( padding: const EdgeInsets.fromLTRB(16, 0, 16, 8), child: DashBoardRoundedCardWidget( - isDarkTheme: dashboardViewModel.isDarkTheme, customBorder: 30, title: "This wallet has encountered an issue", subTitle: "Here are the things that you should note:\n - " + @@ -233,7 +230,6 @@ class CryptoBalanceWidget extends StatelessWidget { Padding( padding: const EdgeInsets.fromLTRB(16, 0, 16, 0), child: DashBoardRoundedCardWidget( - isDarkTheme: dashboardViewModel.isDarkTheme, shadowBlur: dashboardViewModel.getShadowBlur(), shadowSpread: dashboardViewModel.getShadowSpread(), marginV: 0, @@ -285,7 +281,7 @@ class CryptoBalanceWidget extends StatelessWidget { ], ), onTap: () => _toggleSilentPaymentsScanning(context), - image: !dashboardViewModel.appStore.themeStore.currentTheme.isDark + image: !context.currentTheme.isDark ? Image.asset(btcLockLight, height: 48) : Image.asset(btcLockDark, height: 48), ), @@ -296,7 +292,6 @@ class CryptoBalanceWidget extends StatelessWidget { Padding( padding: const EdgeInsets.fromLTRB(16, 0, 16, 8), child: InfoCard( - isDarkTheme: dashboardViewModel.isDarkTheme, title: S.of(context).litecoin_mweb, description: S.of(context).litecoin_mweb_description, leftButtonTitle: S.of(context).litecoin_mweb_dismiss, @@ -327,7 +322,6 @@ class CryptoBalanceWidget extends StatelessWidget { Padding( padding: const EdgeInsets.fromLTRB(16, 0, 16, 8), child: InfoCard( - isDarkTheme: dashboardViewModel.isDarkTheme, title: S.of(context).synchronizing, description: S.of(context).decred_info_card_details, image: 'assets/images/dcr_icon.png', @@ -344,7 +338,6 @@ class CryptoBalanceWidget extends StatelessWidget { Padding( padding: const EdgeInsets.fromLTRB(16, 0, 16, 8), child: InfoCard( - isDarkTheme: dashboardViewModel.isDarkTheme, title: "Payjoin", description: S.of(context).payjoin_card_content, hintWidget: GestureDetector( diff --git a/lib/src/screens/dashboard/pages/cake_features_page.dart b/lib/src/screens/dashboard/pages/cake_features_page.dart index 29066bc756..b2b361d1e9 100644 --- a/lib/src/screens/dashboard/pages/cake_features_page.dart +++ b/lib/src/screens/dashboard/pages/cake_features_page.dart @@ -40,7 +40,6 @@ class CakeFeaturesPage extends StatelessWidget { children: [ SizedBox(height: 2), DashBoardRoundedCardWidget( - isDarkTheme: dashboardViewModel.isDarkTheme, shadowBlur: dashboardViewModel.getShadowBlur(), shadowSpread: dashboardViewModel.getShadowSpread(), onTap: () { @@ -53,16 +52,15 @@ class CakeFeaturesPage extends StatelessWidget { title: 'Cake Pay', subTitle: S.of(context).cake_pay_subtitle, image: Image.asset( - 'assets/images/cards.png', - height: 100, - width: 115, + 'assets/images/cakepay.png', + height: 74, + width: 70, fit: BoxFit.cover, ), ), Observer(builder: (_) { if (dashboardViewModel.type == WalletType.ethereum) { return DashBoardRoundedCardWidget( - isDarkTheme: dashboardViewModel.isDarkTheme, shadowBlur: dashboardViewModel.getShadowBlur(), shadowSpread: dashboardViewModel.getShadowSpread(), onTap: () => Navigator.of(context).pushNamed(Routes.dEuroSavings), @@ -80,7 +78,6 @@ class CakeFeaturesPage extends StatelessWidget { return const SizedBox(); }), DashBoardRoundedCardWidget( - isDarkTheme: dashboardViewModel.isDarkTheme, shadowBlur: dashboardViewModel.getShadowBlur(), shadowSpread: dashboardViewModel.getShadowSpread(), onTap: () => _launchUrl("cake.nano-gpt.com"), diff --git a/lib/src/screens/dashboard/pages/navigation_dock.dart b/lib/src/screens/dashboard/pages/navigation_dock.dart index e21e326593..d3afd4e0cf 100644 --- a/lib/src/screens/dashboard/pages/navigation_dock.dart +++ b/lib/src/screens/dashboard/pages/navigation_dock.dart @@ -1,7 +1,6 @@ import 'dart:ui'; import 'package:cake_wallet/entities/main_actions.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; -import 'package:cake_wallet/themes/utils/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/core/theme_extension.dart'; import 'package:flutter/material.dart'; import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart'; import 'package:cake_wallet/src/screens/dashboard/widgets/action_button.dart'; @@ -10,11 +9,9 @@ import 'package:flutter_mobx/flutter_mobx.dart'; class NavigationDock extends StatelessWidget { const NavigationDock({ required this.dashboardViewModel, - required this.currentTheme, }); final DashboardViewModel dashboardViewModel; - final MaterialThemeBase currentTheme; @override Widget build(BuildContext context) { @@ -24,13 +21,15 @@ class NavigationDock extends StatelessWidget { return Container( height: 150, alignment: Alignment.bottomCenter, - decoration: dashboardViewModel.settingsStore.backgroundImage.isEmpty ? BoxDecoration( - gradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: _getColors(context, !currentTheme.isDark), - ), - ) : null, + decoration: dashboardViewModel.settingsStore.backgroundImage.isEmpty + ? BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: _getColors(context), + ), + ) + : null, //color: Colors.transparent, child: Container( decoration: BoxDecoration( @@ -38,7 +37,7 @@ class NavigationDock extends StatelessWidget { gradient: LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, - colors: _getColors(context, !currentTheme.isDark), + colors: _getColors(context), ), ), margin: const EdgeInsets.only(left: 8, right: 8, bottom: 16), @@ -95,25 +94,15 @@ class NavigationDock extends StatelessWidget { ); } - List _getColors(BuildContext context, bool isBright) { - return isBright - ? [ - CustomThemeColors.backgroundGradientColorLight.withAlpha(5), - CustomThemeColors.backgroundGradientColorLight.withAlpha(50), - CustomThemeColors.backgroundGradientColorLight.withAlpha(125), - CustomThemeColors.backgroundGradientColorLight.withAlpha(150), - CustomThemeColors.backgroundGradientColorLight.withAlpha(200), - CustomThemeColors.backgroundGradientColorLight, - CustomThemeColors.backgroundGradientColorLight - ] - : [ - CustomThemeColors.backgroundGradientColorDark.withAlpha(5), - CustomThemeColors.backgroundGradientColorDark.withAlpha(50), - CustomThemeColors.backgroundGradientColorDark.withAlpha(125), - CustomThemeColors.backgroundGradientColorDark.withAlpha(150), - CustomThemeColors.backgroundGradientColorDark.withAlpha(200), - CustomThemeColors.backgroundGradientColorDark, - CustomThemeColors.backgroundGradientColorDark - ]; + List _getColors(BuildContext context) { + return [ + context.customColors.backgroundGradientColor.withAlpha(5), + context.customColors.backgroundGradientColor.withAlpha(50), + context.customColors.backgroundGradientColor.withAlpha(125), + context.customColors.backgroundGradientColor.withAlpha(150), + context.customColors.backgroundGradientColor.withAlpha(200), + context.customColors.backgroundGradientColor, + context.customColors.backgroundGradientColor, + ]; } } diff --git a/lib/src/screens/dashboard/pages/nft_details_page.dart b/lib/src/screens/dashboard/pages/nft_details_page.dart index 67139d4802..86ed136ed7 100644 --- a/lib/src/screens/dashboard/pages/nft_details_page.dart +++ b/lib/src/screens/dashboard/pages/nft_details_page.dart @@ -232,19 +232,19 @@ class _NFTSingleInfoTile extends StatelessWidget { Text( infoType, style: Theme.of(context).textTheme.bodySmall?.copyWith( - color: Theme.of(context).colorScheme.onSurfaceVariant, - fontWeight: FontWeight.w500, - height: 1, - ), + color: Theme.of(context).colorScheme.onSurfaceVariant, + fontWeight: FontWeight.w500, + height: 1, + ), ), const SizedBox(height: 8), Text( infoValue, style: Theme.of(context).textTheme.titleMedium?.copyWith( - fontWeight: FontWeight.w600, - color: Theme.of(context).colorScheme.onSurface, - height: 1, - ), + fontWeight: FontWeight.w600, + color: Theme.of(context).colorScheme.onSurface, + height: 1, + ), ), ], ), diff --git a/lib/src/screens/dashboard/pages/transactions_page.dart b/lib/src/screens/dashboard/pages/transactions_page.dart index 6afd2f6a90..85ffbcbe47 100644 --- a/lib/src/screens/dashboard/pages/transactions_page.dart +++ b/lib/src/screens/dashboard/pages/transactions_page.dart @@ -49,7 +49,6 @@ class TransactionsPage extends StatelessWidget { final status = dashboardViewModel.status; if (status is SyncingSyncStatus) { return DashBoardRoundedCardWidget( - isDarkTheme: dashboardViewModel.isDarkTheme, key: ValueKey('transactions_page_syncing_alert_card_key'), onTap: () { try { diff --git a/lib/src/screens/dashboard/widgets/home_screen_account_widget.dart b/lib/src/screens/dashboard/widgets/home_screen_account_widget.dart index e54aa83598..55572d5680 100644 --- a/lib/src/screens/dashboard/widgets/home_screen_account_widget.dart +++ b/lib/src/screens/dashboard/widgets/home_screen_account_widget.dart @@ -12,14 +12,12 @@ class HomeScreenAccountWidget extends StatelessWidget { @override Widget build(BuildContext context) { return GestureDetector( - onTap: () async { - await showPopUp( - context: context, - builder: (_) => getIt.get()); - }, + onTap: () async { + await showPopUp(context: context, builder: (_) => getIt.get()); + }, behavior: HitTestBehavior.opaque, child: Padding( - padding: EdgeInsets.only(top: 25, bottom: 25, left: 25, right: 0), + padding: EdgeInsets.all(25.0), child: Row( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, @@ -32,31 +30,36 @@ class HomeScreenAccountWidget extends StatelessWidget { child: Text( walletName ?? '', style: Theme.of(context).textTheme.headlineSmall?.copyWith( - fontWeight: FontWeight.bold, - color: Theme.of(context).colorScheme.onSurface, - ), + fontWeight: FontWeight.bold, + color: Theme.of(context).colorScheme.onSurface, + ), ), ), SizedBox( height: 5.0, ), - Container( - child: Text( - accountName ?? '', - style: Theme.of(context).textTheme.bodyMedium?.copyWith( - fontWeight: FontWeight.bold, - color: Theme.of(context).colorScheme.onSurfaceVariant, + Row( + children: [ + Padding(padding: EdgeInsets.only(left: 20)), + Container( + child: Text( + accountName ?? '', + style: Theme.of(context).textTheme.bodyMedium?.copyWith( + fontWeight: FontWeight.bold, + color: Theme.of(context).colorScheme.primary, + ), + ), ), - ), + Container( + child: Icon( + Icons.keyboard_arrow_down, + color: Theme.of(context).colorScheme.primary, + ), + ), + ], ), ], ), - Container( - child: Icon( - Icons.keyboard_arrow_down, - color: Theme.of(context).colorScheme.onSurfaceVariant, - ), - ), ], ), ), diff --git a/lib/src/screens/dashboard/widgets/info_card.dart b/lib/src/screens/dashboard/widgets/info_card.dart index cb13d70350..42552aa09c 100644 --- a/lib/src/screens/dashboard/widgets/info_card.dart +++ b/lib/src/screens/dashboard/widgets/info_card.dart @@ -8,14 +8,13 @@ class InfoCard extends StatelessWidget { final String title; final String description; final String image; - final bool isDarkTheme; final Function() leftButtonAction; final Function() rightButtonAction; final Widget? hintWidget; const InfoCard({ - Key? key, + super.key, required this.title, required this.description, required this.leftButtonTitle, @@ -23,14 +22,12 @@ class InfoCard extends StatelessWidget { required this.leftButtonAction, required this.rightButtonAction, required this.image, - required this.isDarkTheme, this.hintWidget, - }) : super(key: key); + }); @override Widget build(BuildContext context) { return DashBoardRoundedCardWidget( - isDarkTheme: isDarkTheme, marginH: 0, marginV: 0, customBorder: 30, diff --git a/lib/src/screens/dashboard/widgets/menu_widget.dart b/lib/src/screens/dashboard/widgets/menu_widget.dart index b96f0e4cca..4302f728ca 100644 --- a/lib/src/screens/dashboard/widgets/menu_widget.dart +++ b/lib/src/screens/dashboard/widgets/menu_widget.dart @@ -24,21 +24,21 @@ class MenuWidgetState extends State { this.tileHeight = 60, this.fromTopEdge = 50, this.fromBottomEdge = 25, - this.moneroIcon = Image.asset('assets/images/monero_menu.png'), - this.bitcoinIcon = Image.asset('assets/images/bitcoin_menu.png'), - this.litecoinIcon = Image.asset('assets/images/litecoin_menu.png'), + this.moneroIcon = Image.asset('assets/images/crypto/monero.png'), + this.bitcoinIcon = Image.asset('assets/images/crypto/bitcoin.png'), + this.litecoinIcon = Image.asset('assets/images/crypto/litecoin.png'), this.havenIcon = Image.asset('assets/images/haven_menu.png'), - this.ethereumIcon = Image.asset('assets/images/eth_icon.png'), - this.nanoIcon = Image.asset('assets/images/nano_icon.png'), - this.bananoIcon = Image.asset('assets/images/nano_icon.png'), - this.bitcoinCashIcon = Image.asset('assets/images/bch_icon.png'), - this.polygonIcon = Image.asset('assets/images/matic_icon.png'), - this.solanaIcon = Image.asset('assets/images/sol_icon.png'), - this.tronIcon = Image.asset('assets/images/trx_icon.png'), - this.wowneroIcon = Image.asset('assets/images/wownero_icon.png'), - this.zanoIcon = Image.asset('assets/images/zano_icon.png'), - this.decredIcon = Image.asset('assets/images/decred_menu.png'), - this.dogecoinIcon = Image.asset('assets/images/doge_icon.png'); + this.ethereumIcon = Image.asset('assets/images/crypto/ethereum.png'), + this.nanoIcon = Image.asset('assets/images/crypto/nano.png'), + this.bananoIcon = Image.asset('assets/images/crypto/nano.png'), + this.bitcoinCashIcon = Image.asset('assets/images/crypto/bitcoin-cash.png'), + this.polygonIcon = Image.asset('assets/images/crypto/polygon.png'), + this.solanaIcon = Image.asset('assets/images/crypto/solana.png'), + this.tronIcon = Image.asset('assets/images/crypto/tron.png'), + this.wowneroIcon = Image.asset('assets/images/crypto/wownero.png'), + this.zanoIcon = Image.asset('assets/images/crypto/zano.png'), + this.decredIcon = Image.asset('assets/images/crypto/decred.png'), + this.dogecoinIcon = Image.asset('assets/images/crypto/dogecoin.png'); final largeScreen = 731; @@ -114,10 +114,8 @@ class MenuWidgetState extends State { } int itemCount = items.length; - moneroIcon = - Image.asset('assets/images/monero_menu.png', color: Theme.of(context).colorScheme.primary); - bitcoinIcon = - Image.asset('assets/images/bitcoin_menu.png', color: Theme.of(context).colorScheme.primary); + moneroIcon = Image.asset('assets/images/crypto/monero.png'); + bitcoinIcon = Image.asset('assets/images/crypto/bitcoin.png'); return Row( mainAxisSize: MainAxisSize.max, diff --git a/lib/src/screens/dashboard/widgets/present_receive_option_picker.dart b/lib/src/screens/dashboard/widgets/present_receive_option_picker.dart index 9217db03f4..8d4ea99cdd 100644 --- a/lib/src/screens/dashboard/widgets/present_receive_option_picker.dart +++ b/lib/src/screens/dashboard/widgets/present_receive_option_picker.dart @@ -18,59 +18,65 @@ class PresentReceiveOptionPicker extends StatelessWidget { Widget build(BuildContext context) { final arrowBottom = Image.asset( 'assets/images/arrow_bottom_purple_icon.png', - color: color, + color: Theme.of(context).colorScheme.primary, height: 6, ); - return TextButton( - onPressed: () => _showPicker(context), - style: ButtonStyle( - padding: WidgetStateProperty.all(EdgeInsets.zero), - splashFactory: NoSplash.splashFactory, - foregroundColor: WidgetStateProperty.all(Colors.transparent), - overlayColor: WidgetStateProperty.all(Colors.transparent), - ), - child: Row( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.center, + return Padding( + padding: EdgeInsets.only(left: 6), + child: TextButton( + onPressed: () => _showPicker(context), + style: ButtonStyle( + padding: WidgetStateProperty.all(EdgeInsets.zero), + splashFactory: NoSplash.splashFactory, + foregroundColor: WidgetStateProperty.all(Colors.transparent), + overlayColor: WidgetStateProperty.all(Colors.transparent), + ), + child: Row( mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - S.current.receive, - style: Theme.of(context).textTheme.bodyMedium!.copyWith( - fontSize: 17.0, - fontWeight: FontWeight.bold, - color: color, - ), - ), - Observer( - builder: (_) => Text( - receiveOptionViewModel.selectedReceiveOption - .toString() - .replaceAll(RegExp(r'silent payments', caseSensitive: false), - S.current.silent_payments) - .replaceAll( - RegExp(r'default', caseSensitive: false), S.current.string_default), - style: Theme.of(context).textTheme.bodySmall!.copyWith( - fontSize: 10.0, - fontWeight: FontWeight.w500, - color: color, + Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + S.current.receive, + style: Theme.of(context).textTheme.bodyMedium!.copyWith( + fontSize: 17.0, + fontWeight: FontWeight.bold, + color: Theme.of(context).colorScheme.onSurface, + ), + ), + Row( + children: [ + Observer( + builder: (_) => Text( + receiveOptionViewModel.selectedReceiveOption + .toString() + .replaceAll(RegExp(r'silent payments', caseSensitive: false), + S.current.silent_payments) + .replaceAll(RegExp(r'default', caseSensitive: false), + S.current.string_default), + style: Theme.of(context).textTheme.bodySmall!.copyWith( + fontSize: 10.0, + fontWeight: FontWeight.w500, + color: Theme.of(context).colorScheme.onSurfaceVariant, + ), + ), ), - ), + ], + ), + ], + ), + SizedBox(width: 5), + Padding( + padding: EdgeInsets.only(top: 12), + child: arrowBottom, ) ], ), - SizedBox(width: 5), - Padding( - padding: EdgeInsets.only(top: 12), - child: arrowBottom, - ) - ], - ), - ); + )); } void _showPicker(BuildContext context) async { diff --git a/lib/src/screens/dashboard/widgets/sync_indicator_icon.dart b/lib/src/screens/dashboard/widgets/sync_indicator_icon.dart index 238c96dacb..fda425303c 100644 --- a/lib/src/screens/dashboard/widgets/sync_indicator_icon.dart +++ b/lib/src/screens/dashboard/widgets/sync_indicator_icon.dart @@ -1,10 +1,14 @@ -import 'package:cake_wallet/themes/utils/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/core/custom_theme_colors.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; class SyncIndicatorIcon extends StatelessWidget { SyncIndicatorIcon( - {this.boolMode = true, this.isSynced = false, this.value = waiting, this.size = 6.0, this.showTorIcon = false}); + {this.boolMode = true, + this.isSynced = false, + this.value = waiting, + this.size = 6.0, + this.showTorIcon = false}); final bool boolMode; final bool isSynced; @@ -25,9 +29,7 @@ class SyncIndicatorIcon extends StatelessWidget { Color indicatorColor; if (boolMode) { - indicatorColor = isSynced - ? CustomThemeColors.syncGreen - : CustomThemeColors.syncYellow; + indicatorColor = isSynced ? CustomThemeColors.syncGreen : CustomThemeColors.syncYellow; } else { switch (value.toLowerCase()) { case actionRequired: @@ -48,14 +50,18 @@ class SyncIndicatorIcon extends StatelessWidget { return Container( height: size, width: size, - decoration: showTorIcon ? null : BoxDecoration( - shape: BoxShape.circle, - color: indicatorColor, - ), - child: showTorIcon ? SvgPicture.asset( - "assets/images/tor.svg", - color: indicatorColor, - ) : null, + decoration: showTorIcon + ? null + : BoxDecoration( + shape: BoxShape.circle, + color: indicatorColor, + ), + child: showTorIcon + ? SvgPicture.asset( + "assets/images/tor.svg", + color: indicatorColor, + ) + : null, ); } } diff --git a/lib/src/screens/exchange/widgets/exchange_card.dart b/lib/src/screens/exchange/widgets/exchange_card.dart index 12b4748b7b..15426b668b 100644 --- a/lib/src/screens/exchange/widgets/exchange_card.dart +++ b/lib/src/screens/exchange/widgets/exchange_card.dart @@ -206,7 +206,7 @@ class ExchangeCardState extends State> { style: Theme.of(context).textTheme.titleLarge!.copyWith( fontSize: 18, fontWeight: FontWeight.w600, - color: Theme.of(context).colorScheme.onSurfaceVariant + color: Theme.of(context).colorScheme.onSurfaceVariant, ), ) ], @@ -281,7 +281,7 @@ class ExchangeCardState extends State> { S.of(context).refund_address, style: Theme.of(context).textTheme.bodyMedium!.copyWith( fontWeight: FontWeight.w500, - color: Theme.of(context).colorScheme.onSurfaceVariant + color: Theme.of(context).colorScheme.onSurfaceVariant, ), ), ) diff --git a/lib/src/screens/exchange/widgets/mobile_exchange_cards_section.dart b/lib/src/screens/exchange/widgets/mobile_exchange_cards_section.dart index 4606b21d5f..e7186e0fac 100644 --- a/lib/src/screens/exchange/widgets/mobile_exchange_cards_section.dart +++ b/lib/src/screens/exchange/widgets/mobile_exchange_cards_section.dart @@ -37,7 +37,7 @@ class MobileExchangeCardsSection extends StatelessWidget { bottomLeft: Radius.circular(24), bottomRight: Radius.circular(24), ), - color: Theme.of(context).colorScheme.surfaceContainerHighest, + color: Theme.of(context).colorScheme.surfaceContainerHigh, ), padding: EdgeInsets.fromLTRB(24, 105, 24, 24), child: Column( diff --git a/lib/src/screens/exchange/widgets/present_provider_picker.dart b/lib/src/screens/exchange/widgets/present_provider_picker.dart index f4c21ed281..d68aa5dac0 100644 --- a/lib/src/screens/exchange/widgets/present_provider_picker.dart +++ b/lib/src/screens/exchange/widgets/present_provider_picker.dart @@ -15,55 +15,58 @@ class PresentProviderPicker extends StatelessWidget { Widget build(BuildContext context) { final arrowBottom = Image.asset( 'assets/images/arrow_bottom_purple_icon.png', - color: Theme.of(context).colorScheme.onSurface, + color: Theme.of(context).colorScheme.primary, height: 6, ); - return TextButton( - onPressed: () => presentProviderPicker(context), - style: ButtonStyle( - padding: WidgetStateProperty.all(EdgeInsets.zero), - splashFactory: NoSplash.splashFactory, - foregroundColor: WidgetStateProperty.all(Colors.transparent), - overlayColor: WidgetStateProperty.all(Colors.transparent), - ), - child: Row( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - S.of(context).swap, - style: Theme.of(context).textTheme.bodyMedium?.copyWith( - fontSize: 16.0, - fontWeight: FontWeight.w600, - ), - ), - Observer( - builder: (_) => Text( - exchangeViewModel.selectedProviders.isEmpty - ? S.of(context).choose_one - : exchangeViewModel.selectedProviders.length > 1 - ? S.of(context).automatic - : exchangeViewModel.selectedProviders.first.title, - style: Theme.of(context).textTheme.bodySmall?.copyWith( - fontSize: 10.0, - fontWeight: FontWeight.w500, - color: Theme.of(context).colorScheme.onSurfaceVariant, + return Padding( + padding: EdgeInsets.only(left: 10), + child: TextButton( + onPressed: () => presentProviderPicker(context), + style: ButtonStyle( + padding: WidgetStateProperty.all(EdgeInsets.zero), + splashFactory: NoSplash.splashFactory, + foregroundColor: WidgetStateProperty.all(Colors.transparent), + overlayColor: WidgetStateProperty.all(Colors.transparent), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + S.of(context).swap, + style: Theme.of(context).textTheme.bodyMedium?.copyWith( + fontSize: 16.0, + fontWeight: FontWeight.w600, ), ), - ) - ], - ), - SizedBox(width: 5), - Padding( - padding: EdgeInsets.only(top: 12), - child: arrowBottom, - ) - ], + Observer( + builder: (_) => Text( + exchangeViewModel.selectedProviders.isEmpty + ? S.of(context).choose_one + : exchangeViewModel.selectedProviders.length > 1 + ? S.of(context).automatic + : exchangeViewModel.selectedProviders.first.title, + style: Theme.of(context).textTheme.bodySmall?.copyWith( + fontSize: 10.0, + fontWeight: FontWeight.w500, + color: Theme.of(context).colorScheme.onSurfaceVariant, + ), + ), + ) + ], + ), + SizedBox(width: 5), + Padding( + padding: EdgeInsets.only(top: 12), + child: arrowBottom, + ) + ], + ), ), ); } diff --git a/lib/src/screens/exchange_trade/exchange_trade_external_send_page.dart b/lib/src/screens/exchange_trade/exchange_trade_external_send_page.dart index 610d67ecb8..ba60bdb73d 100644 --- a/lib/src/screens/exchange_trade/exchange_trade_external_send_page.dart +++ b/lib/src/screens/exchange_trade/exchange_trade_external_send_page.dart @@ -114,7 +114,6 @@ class ExchangeTradeExternalSendPage extends BasePage { (item) => TradeItemRowWidget( key: ValueKey( 'exchange_trade_external_send_page_send_item_${item.title}_key'), - currentTheme: currentTheme, title: item.title, value: item.data, isCopied: true, diff --git a/lib/src/screens/exchange_trade/exchange_trade_page.dart b/lib/src/screens/exchange_trade/exchange_trade_page.dart index 1e8e74a2d0..840fbcf017 100644 --- a/lib/src/screens/exchange_trade/exchange_trade_page.dart +++ b/lib/src/screens/exchange_trade/exchange_trade_page.dart @@ -6,7 +6,6 @@ import 'package:cake_wallet/src/screens/exchange_trade/widgets/exchange_trade_ca import 'package:cake_wallet/src/widgets/bottom_sheet/base_bottom_sheet_widget.dart'; import 'package:cake_wallet/src/widgets/bottom_sheet/confirm_sending_bottom_sheet_widget.dart'; import 'package:cake_wallet/src/widgets/bottom_sheet/info_bottom_sheet_widget.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; import 'package:cake_wallet/utils/request_review_handler.dart'; import 'package:cake_wallet/utils/responsive_layout_util.dart'; import 'package:mobx/mobx.dart'; @@ -87,20 +86,13 @@ class ExchangeTradePage extends BasePage { } @override - Widget body(BuildContext context) => ExchangeTradeForm( - exchangeTradeViewModel, - currentTheme, - ); + Widget body(BuildContext context) => ExchangeTradeForm(exchangeTradeViewModel); } class ExchangeTradeForm extends StatefulWidget { - ExchangeTradeForm( - this.exchangeTradeViewModel, - this.currentTheme, - ); + ExchangeTradeForm(this.exchangeTradeViewModel); final ExchangeTradeViewModel exchangeTradeViewModel; - final MaterialThemeBase currentTheme; @override ExchangeTradeState createState() => ExchangeTradeState(); @@ -162,7 +154,6 @@ class ExchangeTradeState extends State { : Offstage(), _ExchangeTradeItemsCardSection( viewModel: widget.exchangeTradeViewModel, - currentTheme: widget.currentTheme, ), ], ); @@ -282,7 +273,6 @@ class ExchangeTradeState extends State { builder: (BuildContext bottomSheetContext) { return ConfirmSendingBottomSheet( key: ValueKey('exchange_trade_page_confirm_sending_bottom_sheet_key'), - currentTheme: widget.currentTheme, footerType: FooterType.slideActionButton, walletType: widget.exchangeTradeViewModel.sendViewModel.walletType, titleText: S.of(bottomSheetContext).confirm_transaction, @@ -329,7 +319,6 @@ class ExchangeTradeState extends State { isScrollControlled: true, builder: (BuildContext bottomSheetContext) { return InfoBottomSheet( - currentTheme: widget.currentTheme, footerType: FooterType.singleActionButton, titleText: S.of(bottomSheetContext).transaction_sent, contentImage: 'assets/images/birthday_cake.png', @@ -359,24 +348,18 @@ class ExchangeTradeState extends State { } class _ExchangeTradeItemsCardSection extends StatelessWidget { - const _ExchangeTradeItemsCardSection({ - required this.viewModel, - required this.currentTheme, - }); + const _ExchangeTradeItemsCardSection({required this.viewModel}); final ExchangeTradeViewModel viewModel; - final MaterialThemeBase currentTheme; @override Widget build(BuildContext context) { final firstExchangeCard = ExchangeTradeCardItemWidget( - currentTheme: currentTheme, isReceiveDetailsCard: true, exchangeTradeViewModel: viewModel, ); final secondExchangeCard = ExchangeTradeCardItemWidget( - currentTheme: currentTheme, isReceiveDetailsCard: false, exchangeTradeViewModel: viewModel, ); diff --git a/lib/src/screens/exchange_trade/widgets/exchange_trade_card_item_widget.dart b/lib/src/screens/exchange_trade/widgets/exchange_trade_card_item_widget.dart index 821eb23387..dabca54ede 100644 --- a/lib/src/screens/exchange_trade/widgets/exchange_trade_card_item_widget.dart +++ b/lib/src/screens/exchange_trade/widgets/exchange_trade_card_item_widget.dart @@ -4,7 +4,6 @@ import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; import 'package:cake_wallet/src/widgets/list_row.dart'; import 'package:cake_wallet/src/widgets/picker.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; import 'package:cake_wallet/utils/show_bar.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; import 'package:cake_wallet/view_model/exchange/exchange_trade_view_model.dart'; @@ -20,7 +19,6 @@ class ExchangeTradeCardItemWidget extends StatelessWidget { ExchangeTradeCardItemWidget({ required this.isReceiveDetailsCard, required this.exchangeTradeViewModel, - required this.currentTheme, Key? key, }) : feesViewModel = exchangeTradeViewModel.feesViewModel, output = exchangeTradeViewModel.output; @@ -29,7 +27,6 @@ class ExchangeTradeCardItemWidget extends StatelessWidget { final bool isReceiveDetailsCard; final FeesViewModel feesViewModel; final ExchangeTradeViewModel exchangeTradeViewModel; - final MaterialThemeBase currentTheme; @override Widget build(BuildContext context) { @@ -51,7 +48,6 @@ class ExchangeTradeCardItemWidget extends StatelessWidget { .where((item) => item.isReceiveDetail == isReceiveDetailsCard) .map( (item) => TradeItemRowWidget( - currentTheme: currentTheme, title: item.title, value: item.data, isCopied: item.isCopied, @@ -151,14 +147,12 @@ class TradeItemRowWidget extends StatelessWidget { final String value; final bool isCopied; final Image copyImage; - final MaterialThemeBase currentTheme; const TradeItemRowWidget({ required this.title, required this.value, required this.isCopied, required this.copyImage, - required this.currentTheme, super.key, }); diff --git a/lib/src/screens/integrations/deuro/savings_page.dart b/lib/src/screens/integrations/deuro/savings_page.dart index 8aee7fd835..57192f2a96 100644 --- a/lib/src/screens/integrations/deuro/savings_page.dart +++ b/lib/src/screens/integrations/deuro/savings_page.dart @@ -55,7 +55,6 @@ class DEuroSavingsPage extends BasePage { children: [ Observer( builder: (_) => SavingsCard( - isDarkTheme: currentTheme.isDark, interestRate: "${_dEuroViewModel.interestRateFormated}%", savingsBalance: _dEuroViewModel.savingsBalanceFormated, fiatSavingsBalance: _dEuroViewModel.fiatSavingsBalanceFormated, @@ -71,7 +70,6 @@ class DEuroSavingsPage extends BasePage { ), Observer( builder: (_) => InterestCardWidget( - isDarkTheme: currentTheme.isDark, title: S.of(context).deuro_savings_collect_interest, fiatAccruedInterest: _dEuroViewModel.fiatAccruedInterestFormated, fiatCurrency: _dEuroViewModel.isFiatDisabled ? null : _dEuroViewModel.fiat, @@ -178,7 +176,6 @@ class DEuroSavingsPage extends BasePage { key: ValueKey('savings_page_confirm_sending_dialog_key'), footerType: FooterType.slideActionButton, titleText: title, - currentTheme: currentTheme, walletType: WalletType.ethereum, titleIconPath: CryptoCurrency.deuro.iconPath, currency: CryptoCurrency.deuro, @@ -214,7 +211,6 @@ class DEuroSavingsPage extends BasePage { key: ValueKey('savings_page_confirm_approval_dialog_key'), footerType: FooterType.slideActionButton, titleText: S.of(bottomSheetContext).approve_tokens, - currentTheme: currentTheme, walletType: WalletType.ethereum, titleIconPath: CryptoCurrency.deuro.iconPath, currency: CryptoCurrency.deuro, @@ -247,7 +243,6 @@ class DEuroSavingsPage extends BasePage { isDismissible: false, builder: (BuildContext bottomSheetContext) => InfoBottomSheet( footerType: FooterType.singleActionButton, - currentTheme: currentTheme, titleText: S.of(bottomSheetContext).transaction_sent, contentImage: 'assets/images/birthday_cake.png', content: S.of(bottomSheetContext).deuro_tx_commited_content, @@ -311,7 +306,6 @@ class DEuroSavingsPage extends BasePage { showModalBottomSheet( context: context, builder: (BuildContext bottomSheetContext) => TooltipSheet( - currentTheme: currentTheme, titleText: title, titleIconPath: CryptoCurrency.deuro.iconPath, tooltip: content, @@ -333,7 +327,6 @@ class DEuroSavingsPage extends BasePage { context: context, isScrollControlled: true, builder: (BuildContext bottomSheetContext) => InfoBottomSheet( - currentTheme: currentTheme, height: 350, titleText: "dEURO", titleIconPath: CryptoCurrency.deuro.iconPath, @@ -360,7 +353,6 @@ class DEuroSavingsPage extends BasePage { return showModalBottomSheet( context: context, builder: (BuildContext bottomSheetContext) => InfoBottomSheet( - currentTheme: currentTheme, titleText: title, titleIconPath: CryptoCurrency.deuro.iconPath, contentImage: 'assets/images/deuro_not_enough_eth.png', diff --git a/lib/src/screens/integrations/deuro/widgets/interest_card_widget.dart b/lib/src/screens/integrations/deuro/widgets/interest_card_widget.dart index 6d1852ec1d..a1cf055a52 100644 --- a/lib/src/screens/integrations/deuro/widgets/interest_card_widget.dart +++ b/lib/src/screens/integrations/deuro/widgets/interest_card_widget.dart @@ -1,7 +1,7 @@ import 'package:cake_wallet/entities/fiat_currency.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/integrations/deuro/widgets/savings_card_widget.dart'; -import 'package:cake_wallet/themes/utils/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/core/theme_extension.dart'; import 'package:cw_core/crypto_currency.dart'; import 'package:flutter/material.dart'; @@ -9,7 +9,6 @@ class InterestCardWidget extends StatelessWidget { const InterestCardWidget({ required this.title, required this.accruedInterest, - required this.isDarkTheme, required this.isEnabled, required this.onCollectInterest, required this.onReinvestInterest, @@ -22,7 +21,6 @@ class InterestCardWidget extends StatelessWidget { final String accruedInterest; final String? fiatAccruedInterest; final FiatCurrency? fiatCurrency; - final bool isDarkTheme; final bool isEnabled; final VoidCallback onCollectInterest; final VoidCallback onReinvestInterest; @@ -37,12 +35,8 @@ class InterestCardWidget extends StatelessWidget { borderRadius: BorderRadius.circular(15), gradient: LinearGradient( colors: [ - isDarkTheme - ? CustomThemeColors.cardGradientColorPrimaryDark - : CustomThemeColors.cardGradientColorPrimaryLight, - isDarkTheme - ? CustomThemeColors.cardGradientColorSecondaryDark - : CustomThemeColors.cardGradientColorSecondaryLight, + context.customColors.cardGradientColorPrimary, + context.customColors.cardGradientColorSecondary, ], begin: Alignment.topCenter, end: Alignment.bottomCenter, @@ -52,16 +46,14 @@ class InterestCardWidget extends StatelessWidget { padding: EdgeInsets.all(20), child: Column( children: [ - SavingsCard.getAssetBalanceRow( - context, - title: title, - amount: accruedInterest, - fiatAmount: fiatAccruedInterest, - currency: CryptoCurrency.deuro, - fiatCurrency: fiatCurrency, - hideSymbol: false, - onTooltipPressed: onTooltipPressed - ), + SavingsCard.getAssetBalanceRow(context, + title: title, + amount: accruedInterest, + fiatAmount: fiatAccruedInterest, + currency: CryptoCurrency.deuro, + fiatCurrency: fiatCurrency, + hideSymbol: false, + onTooltipPressed: onTooltipPressed), SizedBox(height: 10), Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( diff --git a/lib/src/screens/integrations/deuro/widgets/savings_card_widget.dart b/lib/src/screens/integrations/deuro/widgets/savings_card_widget.dart index 36b92b45ba..3cb1ba67ec 100644 --- a/lib/src/screens/integrations/deuro/widgets/savings_card_widget.dart +++ b/lib/src/screens/integrations/deuro/widgets/savings_card_widget.dart @@ -4,28 +4,14 @@ import 'package:auto_size_text/auto_size_text.dart'; import 'package:cake_wallet/entities/fiat_currency.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/widgets/cake_image_widget.dart'; -import 'package:cake_wallet/themes/utils/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/core/theme_extension.dart'; import 'package:cw_core/crypto_currency.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class SavingsCard extends StatelessWidget { - final bool isDarkTheme; - final bool isEnabled; - final bool isLoading; - final String interestRate; - final String savingsBalance; - final String? fiatSavingsBalance; - final FiatCurrency? fiatCurrency; - final CryptoCurrency currency; - final VoidCallback onAddSavingsPressed; - final VoidCallback onRemoveSavingsPressed; - final VoidCallback onApproveSavingsPressed; - final VoidCallback onTooltipPressed; - const SavingsCard({ super.key, - required this.isDarkTheme, required this.interestRate, required this.savingsBalance, required this.currency, @@ -39,6 +25,18 @@ class SavingsCard extends StatelessWidget { this.fiatCurrency, }); + final bool isEnabled; + final bool isLoading; + final String interestRate; + final String savingsBalance; + final String? fiatSavingsBalance; + final FiatCurrency? fiatCurrency; + final CryptoCurrency currency; + final VoidCallback onAddSavingsPressed; + final VoidCallback onRemoveSavingsPressed; + final VoidCallback onApproveSavingsPressed; + final VoidCallback onTooltipPressed; + @override Widget build(BuildContext context) => Container( margin: const EdgeInsets.all(15), @@ -77,12 +75,8 @@ class SavingsCard extends StatelessWidget { borderRadius: BorderRadius.circular(15), gradient: LinearGradient( colors: [ - isDarkTheme - ? CustomThemeColors.cardGradientColorPrimaryDark - : CustomThemeColors.cardGradientColorPrimaryLight, - isDarkTheme - ? CustomThemeColors.cardGradientColorSecondaryDark - : CustomThemeColors.cardGradientColorSecondaryLight, + context.customColors.cardGradientColorPrimary, + context.customColors.cardGradientColorSecondary, ], begin: Alignment.topCenter, end: Alignment.bottomCenter, diff --git a/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart b/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart index bd03c17bd3..44840dbed7 100644 --- a/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart +++ b/lib/src/screens/new_wallet/advanced_privacy_settings_page.dart @@ -65,9 +65,8 @@ class _AdvancedPrivacySettingsBody extends StatefulWidget { this.toggleUseTestnet, this.privacySettingsViewModel, this.nodeViewModel, - this.seedTypeViewModel, { - Key? key, - }) : super(key: key); + this.seedTypeViewModel, + ); final AdvancedPrivacySettingsViewModel privacySettingsViewModel; final NodeCreateOrEditViewModel nodeViewModel; diff --git a/lib/src/screens/new_wallet/new_wallet_page.dart b/lib/src/screens/new_wallet/new_wallet_page.dart index 6240a68a8d..be6a4ccbd9 100644 --- a/lib/src/screens/new_wallet/new_wallet_page.dart +++ b/lib/src/screens/new_wallet/new_wallet_page.dart @@ -44,7 +44,7 @@ class NewWalletPage extends BasePage { @override Widget Function(BuildContext, Widget) get rootWrapper => - (BuildContext context, Widget scaffold) => GradientBackground(scaffold: scaffold); + (BuildContext context, Widget scaffold) => GradientBackground(scaffold: scaffold); @override String get title => S.current.new_wallet; @@ -228,11 +228,11 @@ class _WalletNameFormState extends State { color: Theme.of(context).colorScheme.onSurface, ), placeholderTextStyle: Theme.of(context).textTheme.bodyMedium?.copyWith( - color: Theme.of(context).colorScheme.onSurfaceVariant, - height: 1.4, - fontSize: 18.0, - fontWeight: FontWeight.w500, - ), + color: Theme.of(context).colorScheme.onSurfaceVariant, + height: 1.4, + fontSize: 18.0, + fontWeight: FontWeight.w500, + ), hintText: S.of(context).password, ), BaseTextFormField( @@ -247,11 +247,11 @@ class _WalletNameFormState extends State { color: Theme.of(context).colorScheme.onSurface, ), placeholderTextStyle: Theme.of(context).textTheme.bodyMedium?.copyWith( - color: Theme.of(context).colorScheme.onSurfaceVariant, - height: 1.4, - fontSize: 18.0, - fontWeight: FontWeight.w500, - ), + color: Theme.of(context).colorScheme.onSurfaceVariant, + height: 1.4, + fontSize: 18.0, + fontWeight: FontWeight.w500, + ), hintText: S.of(context).repeat_wallet_password, ), ], diff --git a/lib/src/screens/new_wallet/new_wallet_type_page.dart b/lib/src/screens/new_wallet/new_wallet_type_page.dart index 2e58032b36..26ae913a76 100644 --- a/lib/src/screens/new_wallet/new_wallet_type_page.dart +++ b/lib/src/screens/new_wallet/new_wallet_type_page.dart @@ -143,8 +143,8 @@ class WalletTypeFormState extends State { key: ValueKey('new_wallet_type_${type.name}_button_key'), image: Image.asset( walletTypeToCryptoCurrency(type).iconPath ?? '', - height: 24, - width: 24, + height: 28, + width: 28, ), text: walletTypeToDisplayName(type), showTrailingIcon: false, diff --git a/lib/src/screens/new_wallet/widgets/grouped_wallet_expansion_tile.dart b/lib/src/screens/new_wallet/widgets/grouped_wallet_expansion_tile.dart index 3d420d7519..c028dc621a 100644 --- a/lib/src/screens/new_wallet/widgets/grouped_wallet_expansion_tile.dart +++ b/lib/src/screens/new_wallet/widgets/grouped_wallet_expansion_tile.dart @@ -51,101 +51,98 @@ class GroupedWalletExpansionTile extends StatelessWidget { @override Widget build(BuildContext context) { - final backgroundColor = color ?? (isSelected ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.surfaceContainer); + final backgroundColor = color ?? + (isSelected + ? Theme.of(context).colorScheme.primary + : Theme.of(context).colorScheme.surfaceContainer); final effectiveTextColor = textColor ?? (isSelected ? Theme.of(context).colorScheme.onPrimary - : Theme.of(context).colorScheme.onSecondaryContainer); + : Theme.of(context).colorScheme.onSurface); final effectiveArrowColor = arrowColor ?? (isSelected ? Theme.of(context).colorScheme.onPrimary - : Theme.of(context).colorScheme.onSecondaryContainer); - return Container( - decoration: BoxDecoration( - borderRadius: borderRadius ?? BorderRadius.all(Radius.circular(30)), - color: backgroundColor, - ), - margin: margin ?? const EdgeInsets.only(bottom: 12.0), - child: Theme( - data: Theme.of(context).copyWith( - dividerColor: Colors.transparent, - splashFactory: NoSplash.splashFactory, - ), - child: ExpansionTile( - onExpansionChanged: onExpansionChanged, - initiallyExpanded: shouldShowCurrentWalletPointer - ? childWallets.any((element) => element.isCurrent) - : false, - key: tileKey, - tilePadding: - EdgeInsets.symmetric(vertical: 1, horizontal: !isCurrentlySelectedWallet ? 16 : 0), - iconColor: effectiveArrowColor, - collapsedIconColor: effectiveArrowColor, - leading: leadingWidget, - trailing: trailingWidget ?? (childWallets.isEmpty ? SizedBox.shrink() : null), - title: GestureDetector( - onTap: onTitleTapped, - child: Text( - title, - style: Theme.of(context).textTheme.bodyMedium!.copyWith( - fontSize: 18, - fontWeight: FontWeight.w500, - color: effectiveTextColor, - ), - textAlign: TextAlign.left, - ), + : Theme.of(context).colorScheme.onSurfaceVariant); + return Padding( + padding: EdgeInsets.symmetric(vertical: 6), + child: ExpansionTile( + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)), + collapsedShape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)), + collapsedBackgroundColor: backgroundColor, + backgroundColor: backgroundColor, + onExpansionChanged: onExpansionChanged, + initiallyExpanded: shouldShowCurrentWalletPointer + ? childWallets.any((element) => element.isCurrent) + : false, + key: tileKey, + tilePadding: + EdgeInsets.symmetric(vertical: 1, horizontal: !isCurrentlySelectedWallet ? 16 : 0), + iconColor: effectiveArrowColor, + collapsedIconColor: effectiveArrowColor, + leading: leadingWidget, + trailing: trailingWidget ?? (childWallets.isEmpty ? SizedBox.shrink() : null), + title: GestureDetector( + onTap: onTitleTapped, + child: Text( + title, + style: Theme.of(context).textTheme.bodyMedium!.copyWith( + fontSize: 18, + fontWeight: FontWeight.w500, + color: effectiveTextColor, + ), + textAlign: TextAlign.left, ), - children: childWallets.map( - (item) { - final currentColor = item.isCurrent - ? Theme.of(context).colorScheme.primary - : Theme.of(context).colorScheme.surface; - final walletTypeToCrypto = walletTypeToCryptoCurrency(item.type); - return ListTile( - contentPadding: EdgeInsets.zero, - key: ValueKey(item.name), - trailing: childTrailingWidget?.call(item), - onTap: () => onChildItemTapped(item), - leading: SizedBox( - width: 60, - child: Row( - children: [ - item.isCurrent && shouldShowCurrentWalletPointer - ? Container( - height: 35, - width: 6, - decoration: BoxDecoration( - borderRadius: BorderRadius.only( - topRight: Radius.circular(16), - bottomRight: Radius.circular(16), - ), - color: currentColor, + ), + children: childWallets.map( + (item) { + final currentColor = item.isCurrent + ? Theme.of(context).colorScheme.primary + : Theme.of(context).colorScheme.surface; + final walletTypeToCrypto = walletTypeToCryptoCurrency(item.type); + return ListTile( + contentPadding: EdgeInsets.zero, + key: ValueKey(item.name), + trailing: childTrailingWidget?.call(item), + onTap: () => onChildItemTapped(item), + leading: SizedBox( + width: 64, + child: Row( + children: [ + item.isCurrent && shouldShowCurrentWalletPointer + ? Container( + height: 35, + width: 6, + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + topRight: Radius.circular(16), + bottomRight: Radius.circular(16), ), - ) - : SizedBox(width: 6), - SizedBox(width: 16), - Image.asset( - walletTypeToCrypto.iconPath!, - width: 32, - height: 32, - ), - ], - ), - ), - title: Text( - item.name, - maxLines: 2, - style: Theme.of(context).textTheme.bodyMedium!.copyWith( - fontSize: 18, - fontWeight: FontWeight.w500, - color: effectiveTextColor, - ), + color: currentColor, + ), + ) + : SizedBox(width: 7), + SizedBox(width: 24), + Image.asset( + walletTypeToCrypto.iconPath!, + width: 32, + height: 32, + ), + ], ), - ); - }, - ).toList(), - ), + ), + title: Text( + item.name, + maxLines: 2, + style: Theme.of(context).textTheme.bodyMedium!.copyWith( + fontSize: 18, + fontWeight: FontWeight.w500, + color: effectiveTextColor, + ), + ), + ); + }, + ).toList(), ), ); } diff --git a/lib/src/screens/nodes/widgets/node_indicator.dart b/lib/src/screens/nodes/widgets/node_indicator.dart index aa5458df25..0b6677e372 100644 --- a/lib/src/screens/nodes/widgets/node_indicator.dart +++ b/lib/src/screens/nodes/widgets/node_indicator.dart @@ -1,8 +1,8 @@ -import 'package:cake_wallet/themes/utils/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/core/custom_theme_colors.dart'; import 'package:flutter/material.dart'; class NodeIndicator extends StatelessWidget { - NodeIndicator({this.isLive = false}); + const NodeIndicator({this.isLive = false}); final bool isLive; diff --git a/lib/src/screens/receive/address_list_page.dart b/lib/src/screens/receive/address_list_page.dart index b2af4389ce..5f67947156 100644 --- a/lib/src/screens/receive/address_list_page.dart +++ b/lib/src/screens/receive/address_list_page.dart @@ -20,7 +20,6 @@ class AddressListPage extends BasePage { children: [ AddressList( addressListViewModel: addressListViewModel, - currentTheme: currentTheme, onSelect: (String address) async { Navigator.of(context).pop(address); }, diff --git a/lib/src/screens/receive/receive_page.dart b/lib/src/screens/receive/receive_page.dart index deb5838959..030c10a7f6 100644 --- a/lib/src/screens/receive/receive_page.dart +++ b/lib/src/screens/receive/receive_page.dart @@ -102,10 +102,9 @@ class ReceivePage extends BasePage { heroTag: _heroTag, amountTextFieldFocusNode: _cryptoAmountFocus, amountController: _amountController, - currentTheme: currentTheme, ), ), - AddressList(addressListViewModel: addressListViewModel, currentTheme: currentTheme), + AddressList(addressListViewModel: addressListViewModel), Padding( padding: EdgeInsets.fromLTRB(24, 24, 24, 32), child: Text( diff --git a/lib/src/screens/receive/widgets/address_cell.dart b/lib/src/screens/receive/widgets/address_cell.dart index ad28e71d49..fe26d87f02 100644 --- a/lib/src/screens/receive/widgets/address_cell.dart +++ b/lib/src/screens/receive/widgets/address_cell.dart @@ -1,5 +1,4 @@ import 'package:cake_wallet/generated/i18n.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; import 'package:cake_wallet/utils/address_formatter.dart'; import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_list_item.dart'; import 'package:cw_core/wallet_type.dart'; @@ -16,7 +15,6 @@ class AddressCell extends StatelessWidget { required this.backgroundColor, required this.textColor, required this.walletType, - required this.currentTheme, this.onTap, this.onEdit, this.onHide, @@ -35,7 +33,6 @@ class AddressCell extends StatelessWidget { required Color backgroundColor, required Color textColor, required WalletType walletType, - required MaterialThemeBase currentTheme, Function(String)? onTap, bool hasBalance = false, bool hasReceived = false, @@ -52,7 +49,6 @@ class AddressCell extends StatelessWidget { backgroundColor: backgroundColor, textColor: textColor, walletType: walletType, - currentTheme: currentTheme, onTap: onTap, onEdit: onEdit, onHide: onHide, @@ -72,7 +68,6 @@ class AddressCell extends StatelessWidget { final Color backgroundColor; final Color textColor; final WalletType walletType; - final MaterialThemeBase currentTheme; final Function(String)? onTap; final Function()? onEdit; final Function()? onHide; diff --git a/lib/src/screens/receive/widgets/address_list.dart b/lib/src/screens/receive/widgets/address_list.dart index 79b508f705..2f44b9a47e 100644 --- a/lib/src/screens/receive/widgets/address_list.dart +++ b/lib/src/screens/receive/widgets/address_list.dart @@ -19,15 +19,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; class AddressList extends StatefulWidget { - const AddressList({ - super.key, - required this.addressListViewModel, - required this.currentTheme, - this.onSelect, - }); + const AddressList({super.key, required this.addressListViewModel, this.onSelect}); final WalletAddressListViewModel addressListViewModel; - final MaterialThemeBase currentTheme; final Function(String)? onSelect; @override @@ -167,7 +161,6 @@ class _AddressListState extends State { return AddressCell.fromItem( item, isCurrent: isCurrent, - currentTheme: widget.currentTheme, walletType: widget.addressListViewModel.type, hasBalance: widget.addressListViewModel.isBalanceAvailable, hasReceived: widget.addressListViewModel.isReceivedAvailable, diff --git a/lib/src/screens/receive/widgets/currency_input_field.dart b/lib/src/screens/receive/widgets/currency_input_field.dart index 048b1d4738..2a061c4d02 100644 --- a/lib/src/screens/receive/widgets/currency_input_field.dart +++ b/lib/src/screens/receive/widgets/currency_input_field.dart @@ -1,6 +1,5 @@ import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/widgets/base_text_form_field.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; import 'package:cw_core/crypto_amount_format.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -15,7 +14,6 @@ class CurrencyAmountTextField extends StatelessWidget { this.allAmountButton = false, this.isPickerEnable = false, this.isSelected = false, - this.currentThemeType = ThemeType.dark, this.onTapPicker, this.padding, this.imageArrow, @@ -54,7 +52,6 @@ class CurrencyAmountTextField extends StatelessWidget { final bool isAmountEditable; final FormFieldValidator? currencyValueValidator; final bool isPickerEnable; - final ThemeType currentThemeType; final bool isSelected; final bool allAmountButton; final VoidCallback? allAmountCallback; @@ -84,7 +81,7 @@ class CurrencyAmountTextField extends StatelessWidget { child: imageArrow ?? Image.asset( 'assets/images/arrow_bottom_purple_icon.png', - color: textColor, + color: Theme.of(context).colorScheme.primary, height: 8, ), ), diff --git a/lib/src/screens/receive/widgets/qr_widget.dart b/lib/src/screens/receive/widgets/qr_widget.dart index b44f30a59d..6a40850b64 100644 --- a/lib/src/screens/receive/widgets/qr_widget.dart +++ b/lib/src/screens/receive/widgets/qr_widget.dart @@ -4,7 +4,6 @@ import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/src/screens/exchange/widgets/currency_picker.dart'; import 'package:cake_wallet/src/screens/receive/widgets/currency_input_field.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/receive/widgets/qr_image.dart'; import 'package:cake_wallet/src/widgets/bottom_sheet/base_bottom_sheet_widget.dart'; @@ -24,7 +23,6 @@ import 'package:url_launcher/url_launcher.dart'; class QRWidget extends StatelessWidget { QRWidget({ required this.addressListViewModel, - required this.currentTheme, this.qrVersion, this.heroTag, required this.amountController, @@ -36,7 +34,6 @@ class QRWidget extends StatelessWidget { final TextEditingController amountController; final FocusNode? amountTextFieldFocusNode; final GlobalKey formKey; - final MaterialThemeBase currentTheme; final int? qrVersion; final String? heroTag; @@ -211,7 +208,6 @@ class QRWidget extends StatelessWidget { amountFocusNode: amountTextFieldFocusNode, amountController: amountController, padding: EdgeInsets.only(top: 20, left: _width / 4), - currentThemeType: currentTheme.type, isAmountEditable: true, tag: addressListViewModel.selectedCurrency.tag, onTapPicker: () => _presentPicker(context), @@ -312,7 +308,6 @@ class QRWidget extends StatelessWidget { builder: (context) => InfoBottomSheet( titleText: S.of(context).payjoin_unavailable_sheet_title, content: S.of(context).payjoin_unavailable_sheet_content, - currentTheme: currentTheme, footerType: FooterType.doubleActionButton, doubleActionLeftButtonText: S.of(context).learn_more, onLeftActionButtonPressed: () => launchUrl( diff --git a/lib/src/screens/restore/restore_options_page.dart b/lib/src/screens/restore/restore_options_page.dart index 63a9c60f4c..4d9300b06d 100644 --- a/lib/src/screens/restore/restore_options_page.dart +++ b/lib/src/screens/restore/restore_options_page.dart @@ -10,7 +10,6 @@ import 'package:cake_wallet/utils/permission_handler.dart'; import 'package:cake_wallet/utils/responsive_layout_util.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; import 'package:cake_wallet/view_model/restore/wallet_restore_from_qr_code.dart'; -import 'package:cake_wallet/wallet_type_utils.dart'; import 'package:cw_core/wallet_info.dart'; import 'package:flutter/material.dart'; import 'package:permission_handler/permission_handler.dart'; @@ -20,12 +19,13 @@ class RestoreOptionsPage extends BasePage { @override String get title => S.current.restore_restore_wallet; - final bool isNewInstall; @override - Widget body(BuildContext context) => - _RestoreOptionsBody(isNewInstall: isNewInstall, themeType: currentTheme.type); + Widget body(BuildContext context) => _RestoreOptionsBody( + isNewInstall: isNewInstall, + themeType: currentTheme.type, + ); } class _RestoreOptionsBody extends StatefulWidget { @@ -71,70 +71,68 @@ class _RestoreOptionsBodyState extends State<_RestoreOptionsBody> { return Center( child: Container( - width: ResponsiveLayoutUtilBase.kDesktopMaxWidthConstraint, - height: double.infinity, - padding: EdgeInsets.symmetric(vertical: 24, horizontal: 24), - child: SingleChildScrollView( - child: Column( - children: [ - OptionTile( - key: ValueKey('restore_options_from_seeds_or_keys_button_key'), - onPressed: () => Navigator.pushNamed(context, Routes.restoreWalletFromSeedKeys), - image: imageSeedKeys, - title: S.of(context).restore_title_from_seed_keys, - description: S.of(context).restore_description_from_seed_keys, - ), - if (FeatureFlag.hasBitcoinViewOnly && DeviceInfo.instance.isMobile) - Padding( - padding: EdgeInsets.only(top: 24), - child: OptionTile( - key: ValueKey('restore_options_from_cupcake_button_key'), - onPressed: () => _onScanQRCode(context), - image: imageRestoreCupcake, - title: S.of(context).restore_title_from_cupcake, - description: S.of(context).restore_description_from_cupcake, - tag: S.of(context).new_tag, - ), - ), + width: ResponsiveLayoutUtilBase.kDesktopMaxWidthConstraint, + height: double.infinity, + padding: EdgeInsets.symmetric(vertical: 24, horizontal: 24), + child: SingleChildScrollView( + child: Column( + children: [ + OptionTile( + key: ValueKey('restore_options_from_seeds_or_keys_button_key'), + onPressed: () => Navigator.pushNamed(context, Routes.restoreWalletFromSeedKeys), + image: imageSeedKeys, + title: S.of(context).restore_title_from_seed_keys, + description: S.of(context).restore_description_from_seed_keys, + ), + if (FeatureFlag.hasBitcoinViewOnly && DeviceInfo.instance.isMobile) Padding( - padding: EdgeInsets.only(top: 24), + padding: EdgeInsets.only(top: 12), child: OptionTile( - key: ValueKey('restore_options_from_hardware_wallet_button_key'), - onPressed: () => Navigator.pushNamed( - context, - isSingleCoin - ? Routes.connectHardwareWallet - : Routes.restoreWalletFromHardwareWallet), - image: imageRestoreHW, - title: S.of(context).restore_title_from_hardware_wallet, - description: S.of(context).restore_description_from_hardware_wallet, + key: ValueKey('restore_options_from_cupcake_button_key'), + onPressed: () => _onScanQRCode(context), + image: imageRestoreCupcake, + title: S.of(context).restore_title_from_cupcake, + description: S.of(context).restore_description_from_cupcake, + tag: S.of(context).new_tag, ), ), - if (widget.isNewInstall) - Padding( - padding: EdgeInsets.only(top: 24), - child: OptionTile( - key: ValueKey('restore_options_from_backup_button_key'), - onPressed: () => Navigator.pushNamed(context, Routes.restoreFromBackup), - image: imageRestoreBackup, - title: S.of(context).restore_title_from_backup, - description: S.of(context).restore_description_from_backup, - ), + Padding( + padding: EdgeInsets.only(top: 12), + child: OptionTile( + key: ValueKey('restore_options_from_hardware_wallet_button_key'), + onPressed: () => + Navigator.pushNamed(context, Routes.restoreWalletFromHardwareWallet), + image: imageRestoreHW, + title: S.of(context).restore_title_from_hardware_wallet, + description: S.of(context).restore_description_from_hardware_wallet, + ), + ), + if (widget.isNewInstall) + Padding( + padding: EdgeInsets.only(top: 12), + child: OptionTile( + key: ValueKey('restore_options_from_backup_button_key'), + onPressed: () => Navigator.pushNamed(context, Routes.restoreFromBackup), + image: imageRestoreBackup, + title: S.of(context).restore_title_from_backup, + description: S.of(context).restore_description_from_backup, ), - if (DeviceInfo.instance.isMobile) - Padding( - padding: EdgeInsets.only(top: 24), - child: OptionTile( - key: ValueKey('restore_options_from_qr_button_key'), - onPressed: () => _onScanQRCode(context), - image: imageRestoreQR, - title: S.of(context).scan_qr_code, - description: S.of(context).cold_or_recover_wallet, - ), + ), + if (DeviceInfo.instance.isMobile) + Padding( + padding: EdgeInsets.only(top: 12), + child: OptionTile( + key: ValueKey('restore_options_from_qr_button_key'), + onPressed: () => _onScanQRCode(context), + image: imageRestoreQR, + title: S.of(context).scan_qr_code, + description: S.of(context).cold_or_recover_wallet, ), - ], - ), - )), + ), + ], + ), + ), + ), ); } diff --git a/lib/src/screens/restore/wallet_restore_page.dart b/lib/src/screens/restore/wallet_restore_page.dart index 411178c834..ef2fd3eb58 100644 --- a/lib/src/screens/restore/wallet_restore_page.dart +++ b/lib/src/screens/restore/wallet_restore_page.dart @@ -42,7 +42,6 @@ class WalletRestorePage extends BasePage { : S.current.restore_title_from_keys, style: Theme.of(context).textTheme.titleMedium?.copyWith( fontSize: 18, - fontWeight: FontWeight.w600, ), ), @@ -147,7 +146,6 @@ class WalletRestorePage extends BasePage { bottom: MediaQuery.of(bottomSheetContext).viewInsets.bottom, ), child: AddPassphraseBottomSheet( - currentTheme: currentTheme, titleText: S.of(context).add_passphrase, onRestoreButtonPressed: (passphrase) async { await _onPassphraseBottomSheetRestoreButtonPressed( diff --git a/lib/src/screens/root/root.dart b/lib/src/screens/root/root.dart index cfedbc36d7..f3da7945ae 100644 --- a/lib/src/screens/root/root.dart +++ b/lib/src/screens/root/root.dart @@ -153,6 +153,10 @@ class RootState extends State with WidgetsBindingObserver { break; case AppLifecycleState.resumed: + + // Reset inactive state when app resumes + if (_isInactive) setState(() => _setInactive(false)); + widget.authService.requireAuth().then((value) { if (mounted) { setState(() { @@ -201,8 +205,14 @@ class RootState extends State with WidgetsBindingObserver { @override void didChangePlatformBrightness() { + // Only handle theme changes when the app is active (not in background) + if (_isInactive) return; + if (widget.appStore.themeStore.themeMode == ThemeMode.system) { Future.delayed(Duration(milliseconds: Platform.isIOS ? 500 : 0), () { + // Double-check that app is still active before applying theme change + if (_isInactive) return; + final systemTheme = widget.appStore.themeStore.getThemeFromSystem(); if (widget.appStore.themeStore.currentTheme != systemTheme) { widget.appStore.themeStore.setTheme(systemTheme); @@ -272,6 +282,16 @@ class RootState extends State with WidgetsBindingObserver { _postFrameCallback = false; _setInactive(false); }); + + // Apply any missed theme changes after successful authentication + if (widget.appStore.themeStore.themeMode == ThemeMode.system) { + Future.delayed(Duration(milliseconds: 100), () { + final systemTheme = widget.appStore.themeStore.getThemeFromSystem(); + if (widget.appStore.themeStore.currentTheme != systemTheme) { + widget.appStore.themeStore.setTheme(systemTheme); + } + }); + } } void _setInactive(bool value) { diff --git a/lib/src/screens/seed/wallet_seed_page.dart b/lib/src/screens/seed/wallet_seed_page.dart index 8fcda18b9d..1101097f9a 100644 --- a/lib/src/screens/seed/wallet_seed_page.dart +++ b/lib/src/screens/seed/wallet_seed_page.dart @@ -68,19 +68,16 @@ class WalletSeedPage extends BasePage { crossAxisAlignment: CrossAxisAlignment.center, children: [ SizedBox(height: 16), - WarningBox( - content: S.current.cake_seeds_save_disclaimer, - currentTheme: currentTheme, - ), + WarningBox(content: S.current.cake_seeds_save_disclaimer), SizedBox(height: 36), Text( key: ValueKey('wallet_seed_page_wallet_name_text_key'), walletSeedViewModel.name, style: Theme.of(context).textTheme.bodyMedium!.copyWith( - fontSize: 18, - fontWeight: FontWeight.w600, - color: Theme.of(context).colorScheme.onSurface, - ), + fontSize: 18, + fontWeight: FontWeight.w600, + color: Theme.of(context).colorScheme.onSurface, + ), ), SizedBox(height: 24), Expanded( diff --git a/lib/src/screens/send/send_page.dart b/lib/src/screens/send/send_page.dart index f5d1807314..67dd7306e4 100644 --- a/lib/src/screens/send/send_page.dart +++ b/lib/src/screens/send/send_page.dart @@ -580,7 +580,6 @@ class SendPage extends BasePage { key: ValueKey('send_page_confirm_sending_bottom_sheet_key'), titleText: S.of(bottomSheetContext).confirm_transaction, accessibleNavigationModeSlideActionButtonText: S.of(bottomSheetContext).send, - currentTheme: currentTheme, footerType: FooterType.slideActionButton, walletType: sendViewModel.walletType, titleIconPath: sendViewModel.selectedCryptoCurrency.iconPath, @@ -630,7 +629,6 @@ class SendPage extends BasePage { builder: (BuildContext bottomSheetContext) { return showContactSheet && sendViewModel.ocpRequest == null ? InfoBottomSheet( - currentTheme: currentTheme, footerType: FooterType.doubleActionButton, titleText: S.of(bottomSheetContext).transaction_sent, contentImage: 'assets/images/contact.png', @@ -684,7 +682,6 @@ class SendPage extends BasePage { }, ) : InfoBottomSheet( - currentTheme: currentTheme, footerType: FooterType.singleActionButton, titleText: S.of(bottomSheetContext).transaction_sent, contentImage: 'assets/images/birthday_cake.png', @@ -747,7 +744,6 @@ class SendPage extends BasePage { builder: (context) { dialogContext = context; return InfoBottomSheet( - currentTheme: currentTheme, footerType: FooterType.singleActionButton, titleText: S.of(context).proceed_on_device, contentImage: 'assets/images/hardware_wallet/ledger_nano_x.png', diff --git a/lib/src/screens/send/widgets/send_card.dart b/lib/src/screens/send/widgets/send_card.dart index d1848e61da..d12071936f 100644 --- a/lib/src/screens/send/widgets/send_card.dart +++ b/lib/src/screens/send/widgets/send_card.dart @@ -121,8 +121,11 @@ class SendCardState extends State with AutomaticKeepAliveClientMixin with AutomaticKeepAliveClientMixin _handleSelectWallet( paymentViewModel, @@ -221,7 +223,6 @@ class SendCardState extends State with AutomaticKeepAliveClientMixin AlertWithOneAction( - alertTitle: S.current.background_sync, - alertContent: S.current.unrestricted_background_service_notice, - buttonText: S.current.ok, - buttonAction: () => Navigator.of(context).pop(), - )); + await showPopUp( + context: context, + builder: (context) => AlertWithOneAction( + alertTitle: S.current.background_sync, + alertContent: S.current.unrestricted_background_service_notice, + buttonText: S.current.ok, + buttonAction: () => Navigator.of(context).pop(), + )); await dashboardViewModel.disableBatteryOptimization(); for (var i = 0; i < 4 * 60; i++) { await Future.delayed(Duration(milliseconds: 250)); @@ -65,16 +64,20 @@ class BackgroundSyncPage extends BasePage { items: SyncMode.all, displayItem: (SyncMode syncMode) => syncMode.name, selectedItem: dashboardViewModel.settingsStore.currentSyncMode, - onItemSelected: (dashboardViewModel.batteryOptimizationEnabled && dashboardViewModel.hasBatteryOptimization) ? null : (syncMode) async { - dashboardViewModel.setSyncMode(syncMode); - }); + onItemSelected: (dashboardViewModel.batteryOptimizationEnabled && + dashboardViewModel.hasBatteryOptimization) + ? null + : (syncMode) async { + dashboardViewModel.setSyncMode(syncMode); + }); }), if (dashboardViewModel.hasBgsyncNetworkConstraints) Observer(builder: (context) { return SettingsSwitcherCell( title: S.current.background_sync_on_unmetered_network, value: dashboardViewModel.backgroundSyncNetworkUnmetered, - onValueChange: (_, bool value) => dashboardViewModel.setBackgroundSyncNetworkUnmetered(value), + onValueChange: (_, bool value) => + dashboardViewModel.setBackgroundSyncNetworkUnmetered(value), ); }), if (dashboardViewModel.hasBgsyncBatteryNotLowConstraints) @@ -82,7 +85,8 @@ class BackgroundSyncPage extends BasePage { return SettingsSwitcherCell( title: S.current.background_sync_on_battery_low, value: !dashboardViewModel.backgroundSyncBatteryNotLow, - onValueChange: (_, bool value) => dashboardViewModel.setBackgroundSyncBatteryNotLow(!value), + onValueChange: (_, bool value) => + dashboardViewModel.setBackgroundSyncBatteryNotLow(!value), ); }), if (dashboardViewModel.hasBgsyncChargingConstraints) @@ -90,7 +94,8 @@ class BackgroundSyncPage extends BasePage { return SettingsSwitcherCell( title: S.current.background_sync_on_charging, value: dashboardViewModel.backgroundSyncCharging, - onValueChange: (_, bool value) => dashboardViewModel.setBackgroundSyncCharging(value), + onValueChange: (_, bool value) => + dashboardViewModel.setBackgroundSyncCharging(value), ); }), if (dashboardViewModel.hasBgsyncDeviceIdleConstraints) @@ -98,25 +103,28 @@ class BackgroundSyncPage extends BasePage { return SettingsSwitcherCell( title: S.current.background_sync_on_device_idle, value: dashboardViewModel.backgroundSyncDeviceIdle, - onValueChange: (_, bool value) => dashboardViewModel.setBackgroundSyncDeviceIdle(value), + onValueChange: (_, bool value) => + dashboardViewModel.setBackgroundSyncDeviceIdle(value), ); }), Observer(builder: (context) { return SettingsSwitcherCell( title: S.current.new_transactions_notifications, value: dashboardViewModel.backgroundSyncNotificationsEnabled, - onValueChange: (_, bool value) { + onValueChange: (_, bool value) { try { dashboardViewModel.setBackgroundSyncNotificationsEnabled(value); } catch (e) { - showPopUp(context: context, builder: (context) => AlertWithOneAction( - alertTitle: S.current.error, - alertContent: S.current.notification_permission_denied, - buttonText: S.current.ok, - buttonAction: () { - Navigator.of(context).pop(); - }, - )); + showPopUp( + context: context, + builder: (context) => AlertWithOneAction( + alertTitle: S.current.error, + alertContent: S.current.notification_permission_denied, + buttonText: S.current.ok, + buttonAction: () { + Navigator.of(context).pop(); + }, + )); } }, ); diff --git a/lib/src/screens/settings/display_settings_page.dart b/lib/src/screens/settings/display_settings_page.dart index 7420575f12..003e64d906 100644 --- a/lib/src/screens/settings/display_settings_page.dart +++ b/lib/src/screens/settings/display_settings_page.dart @@ -3,6 +3,7 @@ import 'package:cake_wallet/entities/language_service.dart'; import 'package:cake_wallet/entities/sync_status_display_mode.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; +import 'package:cake_wallet/src/screens/settings/widgets/settings_choices_cell.dart'; import 'package:cake_wallet/src/screens/settings/widgets/settings_picker_cell.dart'; import 'package:cake_wallet/src/screens/settings/widgets/settings_switcher_cell.dart'; import 'package:cake_wallet/src/screens/settings/widgets/settings_theme_choice.dart'; @@ -12,6 +13,7 @@ import 'package:cake_wallet/utils/device_info.dart'; import 'package:cake_wallet/utils/feature_flag.dart'; import 'package:cake_wallet/utils/responsive_layout_util.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; +import 'package:cake_wallet/view_model/settings/choices_list_item.dart'; import 'package:cake_wallet/view_model/settings/display_settings_view_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; @@ -32,6 +34,7 @@ class DisplaySettingsPage extends BasePage { return Container( padding: EdgeInsets.only(top: 10), child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ SettingsSwitcherCell( title: S.of(context).show_market_place, @@ -100,17 +103,59 @@ class DisplaySettingsPage extends BasePage { ), if (responsiveLayoutUtil.shouldRenderMobileUI && DeviceInfo.instance.isMobile) ...[ - SettingsSwitcherCell( - title: S.of(context).use_device_theme, - value: _displaySettingsViewModel.themeMode == ThemeMode.system, - onValueChange: (_, bool value) { - _displaySettingsViewModel - .setThemeMode(value ? ThemeMode.system : ThemeMode.dark); - }, + SizedBox(height: 24), + Padding( + padding: const EdgeInsets.only(left: 24), + child: Text( + S.current.appearance, + style: Theme.of(context).textTheme.bodyMedium?.copyWith( + fontWeight: FontWeight.w400, + fontSize: 14, + height: 22 / 14, + color: Theme.of(context).colorScheme.onSurface, + ), + ), ), - Semantics( - label: S.of(context).color_theme, - child: SettingsThemeChoicesCell(_displaySettingsViewModel), + SizedBox(height: 12), + Container( + margin: EdgeInsets.symmetric(horizontal: 20), + decoration: BoxDecoration( + color: Theme.of(context).colorScheme.surfaceContainer, + borderRadius: BorderRadius.circular(16), + ), + child: Column( + children: [ + SettingsChoicesCell( + ChoicesListItem( + title: "", + items: ThemeMode.values, + selectedItem: _displaySettingsViewModel.themeMode, + onItemSelected: (ThemeMode themeMode) => + _displaySettingsViewModel.setThemeMode(themeMode), + displayItem: (ThemeMode themeMode) { + return themeMode.name[0].toUpperCase() + + themeMode.name.substring(1).toLowerCase(); + }, + ), + useGenericColor: false, + padding: EdgeInsets.all(12), + ), + Container( + decoration: BoxDecoration( + color: Theme.of(context).colorScheme.surfaceContainerHigh, + borderRadius: BorderRadius.circular(16), + ), + child: Column( + children: [ + Semantics( + label: S.of(context).color_theme, + child: SettingsThemeChoicesCell(_displaySettingsViewModel), + ), + ], + ), + ), + ], + ), ), ], ], diff --git a/lib/src/screens/settings/security_backup_page.dart b/lib/src/screens/settings/security_backup_page.dart index 172ae78d9a..9ab8d4663d 100644 --- a/lib/src/screens/settings/security_backup_page.dart +++ b/lib/src/screens/settings/security_backup_page.dart @@ -114,8 +114,8 @@ class SecurityBackupPage extends BasePage { key: ValueKey('security_backup_page_sign_and_verify'), title: S.current.sign_verify_title, handler: (_) => Navigator.of(context).pushNamed(Routes.signPage) - //_securitySettingsViewModel.pinCodeRequiredDuration, - ), + //_securitySettingsViewModel.pinCodeRequiredDuration, + ), Observer( builder: (context) { return SettingsCellWithArrow( diff --git a/lib/src/screens/settings/trocador_providers_page.dart b/lib/src/screens/settings/trocador_providers_page.dart index 56ad7541f3..e7f89ba51f 100644 --- a/lib/src/screens/settings/trocador_providers_page.dart +++ b/lib/src/screens/settings/trocador_providers_page.dart @@ -53,7 +53,11 @@ class TrocadorProvidersPage extends BasePage { } class Badge extends StatelessWidget { - Badge({required this.textColor, required this.backgroundColor, required this.title, required this.subTitle}); + Badge( + {required this.textColor, + required this.backgroundColor, + required this.title, + required this.subTitle}); final String title; final String subTitle; @@ -79,10 +83,10 @@ class Badge extends StatelessWidget { title, textAlign: TextAlign.center, style: Theme.of(context).textTheme.bodySmall!.copyWith( - color: textColor, - fontSize: 7, - fontWeight: FontWeight.w600, - ), + color: textColor, + fontSize: 7, + fontWeight: FontWeight.w600, + ), ), VerticalDivider( color: textColor, @@ -91,9 +95,9 @@ class Badge extends StatelessWidget { Text( subTitle, style: Theme.of(context).textTheme.bodySmall!.copyWith( - color: textColor, - fontWeight: FontWeight.w600, - ), + color: textColor, + fontWeight: FontWeight.w600, + ), ), ], ), diff --git a/lib/src/screens/settings/widgets/setting_priority_picker_cell.dart b/lib/src/screens/settings/widgets/setting_priority_picker_cell.dart index 72249a6b56..a15c4369ef 100644 --- a/lib/src/screens/settings/widgets/setting_priority_picker_cell.dart +++ b/lib/src/screens/settings/widgets/setting_priority_picker_cell.dart @@ -4,20 +4,20 @@ import 'package:cake_wallet/src/widgets/picker.dart'; import 'package:cake_wallet/src/widgets/standard_list.dart'; class SettingsPriorityPickerCell extends StandardListRow { - SettingsPriorityPickerCell( - {required String title, - required this.selectedItem, - required this.items, - this.displayItem, - this.images, - this.searchHintText, - this.isGridView = false, - this.matchingCriteria, - this.customValue, - this.maxValue, - this.customItemIndex, - this.onItemSelected}) - : super( + SettingsPriorityPickerCell({ + required String title, + required this.selectedItem, + required this.items, + this.displayItem, + this.images, + this.searchHintText, + this.isGridView = false, + this.matchingCriteria, + this.customValue, + this.maxValue, + this.customItemIndex, + this.onItemSelected, + }) : super( title: title, isSelected: false, onTap: (BuildContext context) async { diff --git a/lib/src/screens/settings/widgets/settings_choices_cell.dart b/lib/src/screens/settings/widgets/settings_choices_cell.dart index 0f03dce154..798093f8de 100644 --- a/lib/src/screens/settings/widgets/settings_choices_cell.dart +++ b/lib/src/screens/settings/widgets/settings_choices_cell.dart @@ -2,15 +2,19 @@ import 'package:cake_wallet/view_model/settings/choices_list_item.dart'; import 'package:flutter/material.dart'; class SettingsChoicesCell extends StatelessWidget { - const SettingsChoicesCell(this.choicesListItem, {Key? key}) : super(key: key); + const SettingsChoicesCell(this.choicesListItem, + {this.useGenericColor = true, this.padding, Key? key}) + : super(key: key); final ChoicesListItem choicesListItem; + final bool useGenericColor; + final EdgeInsets? padding; @override Widget build(BuildContext context) { return Container( - color: Theme.of(context).colorScheme.surface, - padding: EdgeInsets.only(left: 24, right: 24, top: 16, bottom: 16), + color: useGenericColor ? Theme.of(context).colorScheme.surface : null, + padding: padding ?? EdgeInsets.only(left: 24, right: 24, top: 16, bottom: 16), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, @@ -30,7 +34,14 @@ class SettingsChoicesCell extends StatelessWidget { child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), - color: Theme.of(context).colorScheme.surfaceContainerHighest, + border: useGenericColor + ? null + : Border.all( + color: Theme.of(context).colorScheme.surfaceContainerHighest, + width: 1.5, + ), + color: + useGenericColor ? Theme.of(context).colorScheme.surfaceContainerHighest : null, ), child: Row( mainAxisAlignment: MainAxisAlignment.center, diff --git a/lib/src/screens/settings/widgets/settings_switcher_cell.dart b/lib/src/screens/settings/widgets/settings_switcher_cell.dart index 2d97b3ca25..34019c2c88 100644 --- a/lib/src/screens/settings/widgets/settings_switcher_cell.dart +++ b/lib/src/screens/settings/widgets/settings_switcher_cell.dart @@ -11,16 +11,21 @@ class SettingsSwitcherCell extends StandardListRow { this.leading, void Function(BuildContext context)? onTap, Key? key, + this.padding, + this.switchBackgroundColor, }) : super(title: title, isSelected: false, decoration: decoration, onTap: onTap, key: key); final bool value; + final Color? switchBackgroundColor; final void Function(BuildContext context, bool value)? onValueChange; final Widget? leading; + final EdgeInsets? padding; @override Widget buildTrailing(BuildContext context) => StandardSwitch( value: value, onTapped: () => onValueChange?.call(context, !value), + backgroundColor: switchBackgroundColor, ); @override @@ -29,7 +34,7 @@ class SettingsSwitcherCell extends StandardListRow { final trailing = buildTrailing(context); return Container( height: 56, - padding: EdgeInsets.only(left: 12, right: 12), + padding: padding ?? EdgeInsets.only(left: 12, right: 12), child: TextButton( onPressed: () { if (onTap != null) { @@ -39,6 +44,7 @@ class SettingsSwitcherCell extends StandardListRow { } }, style: ButtonStyle( + padding: WidgetStateProperty.all(padding ?? null), //backgroundColor: MaterialStateProperty.all(Theme.of(context).colorScheme.surfaceContainer), shape: WidgetStateProperty.all( RoundedRectangleBorder( diff --git a/lib/src/screens/settings/widgets/settings_theme_choice.dart b/lib/src/screens/settings/widgets/settings_theme_choice.dart index ad7371e5ba..0536ae9f25 100644 --- a/lib/src/screens/settings/widgets/settings_theme_choice.dart +++ b/lib/src/screens/settings/widgets/settings_theme_choice.dart @@ -1,112 +1,154 @@ import 'package:cake_wallet/generated/i18n.dart'; +import 'package:cake_wallet/src/screens/settings/widgets/settings_switcher_cell.dart'; +import 'package:cake_wallet/src/widgets/cake_image_widget.dart'; import 'package:cake_wallet/themes/core/material_base_theme.dart'; -import 'package:cake_wallet/themes/utils/theme_list.dart'; +import 'package:cake_wallet/themes/theme_classes/black_theme.dart'; import 'package:cake_wallet/view_model/settings/display_settings_view_model.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_mobx/flutter_mobx.dart'; class SettingsThemeChoicesCell extends StatelessWidget { SettingsThemeChoicesCell(this._displaySettingsViewModel); - final items = ThemeList.all; - final DisplaySettingsViewModel _displaySettingsViewModel; final double cellHeight = 25; final double cellWidth = 12; - final double cellRadius = 6; + final double cellRadius = 8; @override Widget build(BuildContext context) { - return Container( - padding: EdgeInsets.all(cellHeight), - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( + return Observer( + builder: (context) { + final availableThemes = _displaySettingsViewModel.availableThemes; + final currentTheme = _displaySettingsViewModel.currentTheme; + final availableAccentColors = _displaySettingsViewModel.availableAccentColors; + final screenHeight = MediaQuery.of(context).size.height; + + final previewHeight = _getResponsivePreviewHeight(screenHeight); + final previewWidth = previewHeight * 0.6; + + return Container( + height: getHeight(context, currentTheme, currentTheme.hasAccentColors), + padding: EdgeInsets.all(12), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - S.current.color_theme, - style: Theme.of(context).textTheme.bodyMedium, - ), - ], - ), - SizedBox(height: cellHeight), - GridView.builder( - itemCount: items.length, - shrinkWrap: true, - physics: NeverScrollableScrollPhysics(), - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 3, - mainAxisExtent: 75, - crossAxisSpacing: 20, - ), - itemBuilder: (context, index) { - final MaterialThemeBase e = items[index]; - final currentTheme = _displaySettingsViewModel.theme; - final isSelected = currentTheme == e; + Expanded( + child: ListView.builder( + itemCount: availableThemes.length, + scrollDirection: Axis.horizontal, + itemBuilder: (context, index) { + final MaterialThemeBase theme = availableThemes[index]; + final isSelected = _displaySettingsViewModel.isThemeSelected(theme); - return Padding( - padding: EdgeInsets.all(5), - child: Semantics( - label: e.toString(), - selected: isSelected, - child: GestureDetector( - onTap: () { - _displaySettingsViewModel.onThemeSelected(e); - }, - child: Container( - padding: EdgeInsets.all(5), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(cellRadius), - border: isSelected - ? Border.all(color: Theme.of(context).colorScheme.primary) - : null, - color: Theme.of(context) - .colorScheme - .onSurfaceVariant - .withOpacity(currentTheme.brightness == Brightness.light ? 0.1 : 0.3), - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Container( - padding: - EdgeInsets.symmetric(horizontal: cellWidth, vertical: cellHeight), - decoration: BoxDecoration( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(cellRadius), - bottomLeft: Radius.circular(cellRadius), - ), - color: e.colorScheme.primary, - ), + return Semantics( + label: theme.toString(), + selected: isSelected, + child: GestureDetector( + onTap: () { + _displaySettingsViewModel.onThemeSelected(theme); + }, + child: Container( + margin: EdgeInsets.only(right: 24), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(cellRadius), + border: isSelected + ? Border.all( + color: Theme.of(context).colorScheme.primary, + strokeAlign: BorderSide.strokeAlignOutside) + : null, ), - Container( - padding: - EdgeInsets.symmetric(horizontal: cellWidth, vertical: cellHeight), - decoration: BoxDecoration(color: e.colorScheme.surface), + child: ClipRRect( + borderRadius: BorderRadius.circular(cellRadius), + child: CakeImageWidget( + imageUrl: _displaySettingsViewModel.getImageForTheme(theme), + fit: BoxFit.cover, + height: previewHeight, + width: previewWidth, + ), ), - Container( - padding: - EdgeInsets.symmetric(horizontal: cellWidth, vertical: cellHeight), - decoration: BoxDecoration( - borderRadius: BorderRadius.only( - topRight: Radius.circular(cellRadius), - bottomRight: Radius.circular(cellRadius), + ), + ), + ); + }, + ), + ), + if (_displaySettingsViewModel.currentTheme.hasAccentColors) ...[ + SizedBox(height: cellHeight), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + S.of(context).accent_color, + style: Theme.of(context).textTheme.bodyMedium, + ), + Container( + height: 40, + child: Row( + children: availableAccentColors.map((accentColor) { + final isSelected = _displaySettingsViewModel + .isAccentColorSelected(accentColor.name.toLowerCase()); + return GestureDetector( + onTap: () { + _displaySettingsViewModel + .onAccentColorSelected(accentColor.name.toLowerCase()); + }, + child: Container( + width: 26, + height: 26, + margin: EdgeInsets.only(right: 11), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(16), + border: isSelected + ? Border.all( + color: Theme.of(context).colorScheme.onSurfaceVariant, + width: 3) + : null, + color: accentColor.color, ), - color: e.colorScheme.tertiary, ), - ), - ], + ); + }).toList(), ), ), - ), + ], ), - ); - }, + ], + if (_displaySettingsViewModel.currentTheme is BlackTheme) + SettingsSwitcherCell( + title: S.current.oled_mode, + value: _displaySettingsViewModel.isBlackThemeOledEnabled, + onValueChange: (_, bool value) { + _displaySettingsViewModel.setBlackThemeOled(value); + }, + padding: EdgeInsets.zero, + switchBackgroundColor: currentTheme.colorScheme.secondaryContainer, + ), + ], ), - ], - ), + ); + }, ); } + + double getHeight(BuildContext context, MaterialThemeBase theme, bool hasAccentColors) { + final screenHeight = MediaQuery.of(context).size.height; + + double baseHeight = (screenHeight * 0.25).clamp(150.0, screenHeight * 0.5); + + if (hasAccentColors) { + baseHeight += (screenHeight * 0.05).clamp(35.0, 60.0); + } + + if (theme is BlackTheme) { + baseHeight += (screenHeight * 0.08).clamp(48.0, 96.0); + } + + return baseHeight; + } + + double _getResponsivePreviewHeight(double screenHeight) => + (screenHeight * 0.22).clamp(160.0, 240.0); } diff --git a/lib/src/screens/support/support_page.dart b/lib/src/screens/support/support_page.dart index 55a2b237c9..bc762c68db 100644 --- a/lib/src/screens/support/support_page.dart +++ b/lib/src/screens/support/support_page.dart @@ -12,10 +12,6 @@ class SupportPage extends BasePage { final SupportViewModel supportViewModel; - final imageLiveSupport = Image.asset('assets/images/cake_icon.png'); - final imageWalletGuides = Image.asset('assets/images/wallet_guides.png'); - final imageMoreLinks = Image.asset('assets/images/more_links.png'); - @override String get title => S.current.settings_support; diff --git a/lib/src/screens/transaction_details/rbf_details_page.dart b/lib/src/screens/transaction_details/rbf_details_page.dart index 98d267d6a0..521cf06366 100644 --- a/lib/src/screens/transaction_details/rbf_details_page.dart +++ b/lib/src/screens/transaction_details/rbf_details_page.dart @@ -121,7 +121,6 @@ class RBFDetailsPage extends BasePage { } reaction((_) => transactionDetailsViewModel.sendViewModel.state, (ExecutionState state) { - if (state is! IsExecutingState && loadingBottomSheetContext != null && loadingBottomSheetContext!.mounted) { @@ -191,16 +190,20 @@ class RBFDetailsPage extends BasePage { return ConfirmSendingBottomSheet( key: ValueKey('rbf_confirm_sending_bottom_sheet'), titleText: S.of(bottomSheetContext).confirm_transaction, - currentTheme: currentTheme, walletType: transactionDetailsViewModel.sendViewModel.walletType, - titleIconPath: transactionDetailsViewModel.sendViewModel.selectedCryptoCurrency.iconPath, + titleIconPath: + transactionDetailsViewModel.sendViewModel.selectedCryptoCurrency.iconPath, currency: transactionDetailsViewModel.sendViewModel.selectedCryptoCurrency, amount: S.of(bottomSheetContext).send_amount, - amountValue: transactionDetailsViewModel.sendViewModel.pendingTransaction!.amountFormatted, - fiatAmountValue: transactionDetailsViewModel.sendViewModel.pendingTransactionFiatAmountFormatted, + amountValue: + transactionDetailsViewModel.sendViewModel.pendingTransaction!.amountFormatted, + fiatAmountValue: transactionDetailsViewModel + .sendViewModel.pendingTransactionFiatAmountFormatted, fee: S.of(bottomSheetContext).send_fee, - feeValue: transactionDetailsViewModel.sendViewModel.pendingTransaction!.feeFormatted, - feeFiatAmount: transactionDetailsViewModel.sendViewModel.pendingTransactionFeeFiatAmountFormatted, + feeValue: + transactionDetailsViewModel.sendViewModel.pendingTransaction!.feeFormatted, + feeFiatAmount: transactionDetailsViewModel + .sendViewModel.pendingTransactionFeeFiatAmountFormatted, outputs: transactionDetailsViewModel.sendViewModel.outputs, footerType: FooterType.slideActionButton, accessibleNavigationModeSlideActionButtonText: S.of(context).send, diff --git a/lib/src/screens/unspent_coins/unspent_coins_details_page.dart b/lib/src/screens/unspent_coins/unspent_coins_details_page.dart index 165995ba01..34a76d5b97 100644 --- a/lib/src/screens/unspent_coins/unspent_coins_details_page.dart +++ b/lib/src/screens/unspent_coins/unspent_coins_details_page.dart @@ -50,10 +50,12 @@ class UnspentCoinsDetailsPage extends BasePage { if (item is UnspentCoinsSwitchItem) { return Observer( - builder: (_) => UnspentCoinsSwitchRow( - title: item.title, - switchValue: item.switchValue(), - onSwitchValueChange: item.onSwitchValueChange)); + builder: (_) => UnspentCoinsSwitchRow( + title: item.title, + switchValue: item.switchValue(), + onSwitchValueChange: item.onSwitchValueChange, + ), + ); } if (item is BlockExplorerListItem) { diff --git a/lib/src/screens/wallet_connect/utils/method_utils.dart b/lib/src/screens/wallet_connect/utils/method_utils.dart index 5c4027a2b4..d79adfede2 100644 --- a/lib/src/screens/wallet_connect/utils/method_utils.dart +++ b/lib/src/screens/wallet_connect/utils/method_utils.dart @@ -5,7 +5,7 @@ import 'package:cake_wallet/src/screens/wallet_connect/models/wc_connection_mode import 'package:cake_wallet/src/screens/wallet_connect/services/walletkit_service.dart'; import 'package:cake_wallet/src/screens/wallet_connect/widgets/wc_connection_widget.dart'; import 'package:cake_wallet/src/screens/wallet_connect/widgets/wc_request_widget.dart'; -import 'package:cake_wallet/themes/utils/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/core/custom_theme_colors.dart'; import 'package:flutter/material.dart'; import 'package:reown_walletkit/reown_walletkit.dart'; diff --git a/lib/src/screens/wallet_connect/widgets/wc_request_widget.dart b/lib/src/screens/wallet_connect/widgets/wc_request_widget.dart index d6ff37fcde..d06b200198 100644 --- a/lib/src/screens/wallet_connect/widgets/wc_request_widget.dart +++ b/lib/src/screens/wallet_connect/widgets/wc_request_widget.dart @@ -1,9 +1,7 @@ -import 'package:cake_wallet/di.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/wallet_connect/services/bottom_sheet_service.dart'; import 'package:cake_wallet/src/screens/wallet_connect/widgets/wc_verify_context_widget.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart'; -import 'package:cake_wallet/themes/core/theme_store.dart'; import 'package:flutter/material.dart'; import 'package:reown_walletkit/reown_walletkit.dart'; @@ -22,13 +20,10 @@ class WCRequestWidget extends StatelessWidget { @override Widget build(BuildContext context) { - final currentTheme = getIt.get().currentTheme; - return Column( mainAxisSize: MainAxisSize.min, children: [ WCVerifyContextWidget( - currentTheme: currentTheme, verifyContext: verifyContext, ), const SizedBox(height: 8), diff --git a/lib/src/screens/wallet_connect/widgets/wc_verify_context_widget.dart b/lib/src/screens/wallet_connect/widgets/wc_verify_context_widget.dart index b85a8e10f0..efc95cc550 100644 --- a/lib/src/screens/wallet_connect/widgets/wc_verify_context_widget.dart +++ b/lib/src/screens/wallet_connect/widgets/wc_verify_context_widget.dart @@ -1,6 +1,5 @@ import 'package:cake_wallet/generated/i18n.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; -import 'package:cake_wallet/themes/utils/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/core/custom_theme_colors.dart'; import 'package:flutter/material.dart'; import 'package:reown_walletkit/reown_walletkit.dart'; @@ -8,11 +7,9 @@ class WCVerifyContextWidget extends StatelessWidget { const WCVerifyContextWidget({ super.key, required this.verifyContext, - required this.currentTheme, }); final VerifyContext? verifyContext; - final MaterialThemeBase currentTheme; @override Widget build(BuildContext context) { diff --git a/lib/src/screens/wallet_keys/wallet_keys_page.dart b/lib/src/screens/wallet_keys/wallet_keys_page.dart index 014805d859..4048636fc4 100644 --- a/lib/src/screens/wallet_keys/wallet_keys_page.dart +++ b/lib/src/screens/wallet_keys/wallet_keys_page.dart @@ -7,7 +7,6 @@ import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/widgets/seedphrase_grid_widget.dart'; import 'package:cake_wallet/src/widgets/text_info_box.dart'; import 'package:cake_wallet/src/widgets/warning_box_widget.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; import 'package:cake_wallet/utils/brightness_util.dart'; import 'package:cake_wallet/utils/clipboard_util.dart'; import 'package:cake_wallet/utils/show_bar.dart'; @@ -36,13 +35,11 @@ class WalletKeysPage extends BasePage { child: WarningBox( key: const ValueKey('wallet_keys_page_share_warning_text_key'), content: S.of(context).do_not_share_warning_text.toUpperCase(), - currentTheme: currentTheme, ), ), Expanded( child: WalletKeysPageBody( walletKeysViewModel: walletKeysViewModel, - currentTheme: currentTheme, ), ), ], @@ -54,11 +51,9 @@ class WalletKeysPage extends BasePage { class WalletKeysPageBody extends StatefulWidget { WalletKeysPageBody({ required this.walletKeysViewModel, - required this.currentTheme, }); final WalletKeysViewModel walletKeysViewModel; - final MaterialThemeBase currentTheme; @override State createState() => _WalletKeysPageBodyState(); @@ -161,7 +156,11 @@ class _WalletKeysPageBodyState extends State if (showKeyTab) Padding( padding: const EdgeInsets.only(left: 22, right: 22), - child: _buildKeysTab(context, showSilentPaymentsTab ? widget.walletKeysViewModel.items.sublist(0, 4) : widget.walletKeysViewModel.items), + child: _buildKeysTab( + context, + showSilentPaymentsTab + ? widget.walletKeysViewModel.items.sublist(0, 4) + : widget.walletKeysViewModel.items), ), if (showSilentPaymentsTab) Padding( diff --git a/lib/src/screens/wallet_list/edit_wallet_button_widget.dart b/lib/src/screens/wallet_list/edit_wallet_button_widget.dart index d926230bd1..99ef56445e 100644 --- a/lib/src/screens/wallet_list/edit_wallet_button_widget.dart +++ b/lib/src/screens/wallet_list/edit_wallet_button_widget.dart @@ -20,27 +20,17 @@ class EditWalletButtonWidget extends StatelessWidget { width: width, child: Row( children: [ - GestureDetector( - onTap: onTap, - child: Center( - child: Container( - height: 40, - width: 44, - padding: EdgeInsets.all(10), - decoration: BoxDecoration( - shape: BoxShape.circle, - color: Theme.of(context).colorScheme.surface, - ), - child: Icon( - Icons.edit, - size: 14, - color: Theme.of(context).colorScheme.onSurfaceVariant, - ), - ), + TextButton( + onPressed: onTap, + style: TextButton.styleFrom( + backgroundColor: Theme.of(context).colorScheme.surface, shape: CircleBorder()), + child: Icon( + Icons.edit, + size: 14, + color: Theme.of(context).colorScheme.onSurfaceVariant, ), ), if (isGroup) ...{ - SizedBox(width: 6), Icon( isExpanded ? Icons.keyboard_arrow_up : Icons.keyboard_arrow_down, size: 24, diff --git a/lib/src/screens/wallet_list/filtered_list.dart b/lib/src/screens/wallet_list/filtered_list.dart index 5316c84729..86368210c8 100644 --- a/lib/src/screens/wallet_list/filtered_list.dart +++ b/lib/src/screens/wallet_list/filtered_list.dart @@ -29,6 +29,23 @@ class FilteredListState extends State { if (widget.canReorder) { return Observer( builder: (_) => ReorderableListView.builder( + proxyDecorator: (child, index, animation) => Material( + child: Container( + //margin: EdgeInsets.symmetric(vertical: 5), + decoration: BoxDecoration( + color: Theme.of(context).colorScheme.surfaceContainer, + borderRadius: BorderRadius.circular(20.0), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.3), + blurRadius: 5, + offset: const Offset(0, 6), + spreadRadius: 1) + ], + ), + child: child, + ), + ), shrinkWrap: widget.shrinkWrap, physics: widget.physics ?? const BouncingScrollPhysics(), itemBuilder: widget.itemBuilder, diff --git a/lib/src/screens/wallet_list/wallet_list_page.dart b/lib/src/screens/wallet_list/wallet_list_page.dart index d8f20d2dfd..2dcaa8d382 100644 --- a/lib/src/screens/wallet_list/wallet_list_page.dart +++ b/lib/src/screens/wallet_list/wallet_list_page.dart @@ -116,21 +116,6 @@ class WalletListBody extends StatefulWidget { } class WalletListBodyState extends State { - final moneroIcon = Image.asset('assets/images/monero_logo.png', height: 24, width: 24); - final bitcoinIcon = Image.asset('assets/images/bitcoin.png', height: 24, width: 24); - final tBitcoinIcon = Image.asset('assets/images/tbtc.png', height: 24, width: 24); - final litecoinIcon = Image.asset('assets/images/litecoin_icon.png', height: 24, width: 24); - final decredIcon = Image.asset('assets/images/decred_icon.png', height: 24, width: 24); - final nonWalletTypeIcon = Image.asset('assets/images/close.png', height: 24, width: 24); - final havenIcon = Image.asset('assets/images/haven_logo.png', height: 24, width: 24); - final ethereumIcon = Image.asset('assets/images/eth_icon.png', height: 24, width: 24); - final bitcoinCashIcon = Image.asset('assets/images/bch_icon.png', height: 24, width: 24); - final nanoIcon = Image.asset('assets/images/nano_icon.png', height: 24, width: 24); - final polygonIcon = Image.asset('assets/images/matic_icon.png', height: 24, width: 24); - final solanaIcon = Image.asset('assets/images/sol_icon.png', height: 24, width: 24); - final tronIcon = Image.asset('assets/images/trx_icon.png', height: 24, width: 24); - final wowneroIcon = Image.asset('assets/images/wownero_icon.png', height: 24, width: 24); - final zanoIcon = Image.asset('assets/images/zano_icon.png', height: 24, width: 24); final scrollController = ScrollController(); final double tileHeight = 60; Flushbar? _progressBar; @@ -164,69 +149,68 @@ class WalletListBodyState extends State { ), SizedBox(height: 16), Container( - child: Observer( - builder: (_) => FilteredList( - shrinkWrap: true, - list: widget.walletListViewModel.multiWalletGroups, - updateFunction: widget.walletListViewModel.reorderAccordingToWalletList, - itemBuilder: (context, index) { - final group = widget.walletListViewModel.multiWalletGroups[index]; - final groupName = - group.groupName ?? '${S.current.wallet_group} ${index + 1}'; + child: Padding( + padding: EdgeInsets.only(left: 20, right: 20), + child: Observer( + builder: (_) => FilteredList( + shrinkWrap: true, + list: widget.walletListViewModel.multiWalletGroups, + updateFunction: widget.walletListViewModel.reorderAccordingToWalletList, + itemBuilder: (context, index) { + final group = widget.walletListViewModel.multiWalletGroups[index]; + final groupName = + group.groupName ?? '${S.current.wallet_group} ${index + 1}'; - widget.walletListViewModel.updateTileState( - index, - widget.walletListViewModel.expansionTileStateTrack[index] ?? false, - ); + widget.walletListViewModel.updateTileState( + index, + widget.walletListViewModel.expansionTileStateTrack[index] ?? false, + ); - return GroupedWalletExpansionTile( - onExpansionChanged: (value) { - widget.walletListViewModel.updateTileState(index, value); - setState(() {}); - }, - shouldShowCurrentWalletPointer: true, - borderRadius: BorderRadius.all(Radius.circular(16)), - margin: EdgeInsets.only(left: 20, right: 20, bottom: 12), - title: groupName, - tileKey: ValueKey('group_wallets_expansion_tile_widget_$index'), - leadingWidget: Icon( - Icons.account_balance_wallet_outlined, - size: 28, - ), - trailingWidget: EditWalletButtonWidget( - width: 74, - isGroup: true, - isExpanded: - widget.walletListViewModel.expansionTileStateTrack[index]!, - onTap: () { - final wallet = widget.walletListViewModel - .convertWalletInfoToWalletListItem(group.wallets.first); - Navigator.of(context).pushNamed( - Routes.walletEdit, - arguments: WalletEditPageArguments( - walletListViewModel: widget.walletListViewModel, - editingWallet: wallet, - isWalletGroup: true, - groupName: groupName, - walletGroupKey: group.groupKey, - ), - ); + return GroupedWalletExpansionTile( + onExpansionChanged: (value) { + widget.walletListViewModel.updateTileState(index, value); + setState(() {}); }, - ), - childWallets: group.wallets.map((walletInfo) { - return widget.walletListViewModel - .convertWalletInfoToWalletListItem(walletInfo); - }).toList(), - isSelected: false, - onChildItemTapped: (wallet) => - wallet.isCurrent ? null : _loadWallet(wallet), - childTrailingWidget: (item) { - return item.isCurrent - ? SizedBox.shrink() - : Padding( - padding: const EdgeInsets.only(right: 16), - child: EditWalletButtonWidget( - width: 44, + shouldShowCurrentWalletPointer: true, + borderRadius: BorderRadius.all(Radius.circular(16)), + title: groupName, + tileKey: ValueKey('group_wallets_expansion_tile_widget_$index'), + leadingWidget: Icon( + Icons.account_balance_wallet_outlined, + size: 28, + ), + trailingWidget: EditWalletButtonWidget( + width: 88, + isGroup: true, + isExpanded: + widget.walletListViewModel.expansionTileStateTrack[index]!, + onTap: () { + final wallet = widget.walletListViewModel + .convertWalletInfoToWalletListItem(group.wallets.first); + Navigator.of(context).pushNamed( + Routes.walletEdit, + arguments: WalletEditPageArguments( + walletListViewModel: widget.walletListViewModel, + editingWallet: wallet, + isWalletGroup: true, + groupName: groupName, + walletGroupKey: group.groupKey, + ), + ); + }, + ), + childWallets: group.wallets.map((walletInfo) { + return widget.walletListViewModel + .convertWalletInfoToWalletListItem(walletInfo); + }).toList(), + isSelected: false, + onChildItemTapped: (wallet) => + wallet.isCurrent ? null : _loadWallet(wallet), + childTrailingWidget: (item) { + return item.isCurrent + ? SizedBox.shrink() + : EditWalletButtonWidget( + width: 60, onTap: () => Navigator.of(context).pushNamed( Routes.walletEdit, arguments: WalletEditPageArguments( @@ -234,11 +218,11 @@ class WalletListBodyState extends State { editingWallet: item, ), ), - ), - ); - }, - ); - }, + ); + }, + ); + }, + ), ), ), ), @@ -257,68 +241,70 @@ class WalletListBodyState extends State { ), ), SizedBox(height: 16), - Container( - child: Observer( - builder: (_) => FilteredList( - shrinkWrap: true, - list: widget.walletListViewModel.singleWalletsList, - updateFunction: widget.walletListViewModel.reorderAccordingToWalletList, - itemBuilder: (context, index) { - final wallet = widget.walletListViewModel.singleWalletsList[index]; - final currentColor = wallet.isCurrent - ? Theme.of(context).colorScheme.primary - : Theme.of(context).colorScheme.surface; - - return GroupedWalletExpansionTile( - tileKey: ValueKey('single_wallets_expansion_tile_widget_$index'), - isCurrentlySelectedWallet: wallet.isCurrent, - leadingWidget: SizedBox( - width: wallet.isCurrent ? 56 : 40, - child: Row( - children: [ - wallet.isCurrent - ? Container( - height: 35, - width: 6, - margin: EdgeInsets.only(right: 16), - decoration: BoxDecoration( - borderRadius: BorderRadius.only( - topRight: Radius.circular(16), - bottomRight: Radius.circular(16), + Padding( + padding: EdgeInsets.only(left: 20, right: 20), + child: Container( + child: Observer( + builder: (_) => FilteredList( + shrinkWrap: true, + list: widget.walletListViewModel.singleWalletsList, + updateFunction: widget.walletListViewModel.reorderAccordingToWalletList, + itemBuilder: (context, index) { + final wallet = widget.walletListViewModel.singleWalletsList[index]; + final currentColor = wallet.isCurrent + ? Theme.of(context).colorScheme.primary + : Theme.of(context).colorScheme.surface; + return GroupedWalletExpansionTile( + tileKey: ValueKey('single_wallets_expansion_tile_widget_$index'), + isCurrentlySelectedWallet: wallet.isCurrent, + leadingWidget: SizedBox( + width: wallet.isCurrent ? 56 : 40, + child: Row( + children: [ + wallet.isCurrent + ? Container( + height: 35, + width: 6, + margin: EdgeInsets.only(right: 16), + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + topRight: Radius.circular(16), + bottomRight: Radius.circular(16), + ), + color: currentColor, ), - color: currentColor, - ), - ) - : SizedBox(width: 6), - Image.asset( - walletTypeToCryptoCurrency(wallet.type).iconPath!, - width: 32, - height: 32, - ), - ], + ) + : SizedBox(width: 6), + Image.asset( + walletTypeToCryptoCurrency(wallet.type).iconPath!, + width: 32, + height: 32, + ), + ], + ), ), - ), - title: wallet.name, - isSelected: false, - borderRadius: BorderRadius.all(Radius.circular(16)), - margin: EdgeInsets.only(left: 20, right: 20, bottom: 12), - onTitleTapped: () => wallet.isCurrent ? null : _loadWallet(wallet), - trailingWidget: wallet.isCurrent - ? null - : EditWalletButtonWidget( - width: 44, - onTap: () { - Navigator.of(context).pushNamed( - Routes.walletEdit, - arguments: WalletEditPageArguments( - walletListViewModel: widget.walletListViewModel, - editingWallet: wallet, - ), - ); - }, - ), - ); - }, + title: wallet.name, + isSelected: false, + borderRadius: BorderRadius.all(Radius.circular(16)), + margin: EdgeInsets.only(left: 20, right: 20, bottom: 12), + onTitleTapped: () => wallet.isCurrent ? null : _loadWallet(wallet), + trailingWidget: wallet.isCurrent + ? null + : EditWalletButtonWidget( + width: 64, + onTap: () { + Navigator.of(context).pushNamed( + Routes.walletEdit, + arguments: WalletEditPageArguments( + walletListViewModel: widget.walletListViewModel, + editingWallet: wallet, + ), + ); + }, + ), + ); + }, + ), ), ), ), @@ -481,7 +467,8 @@ class WalletListBodyState extends State { walletType: WalletType.monero, hardwareWalletType: HardwareWalletType.ledger, onConnectDevice: (context, ledgerVM) async { - if (ledgerVM is LedgerViewModel) monero!.setGlobalLedgerConnection(ledgerVM.connection); + if (ledgerVM is LedgerViewModel) + monero!.setGlobalLedgerConnection(ledgerVM.connection); didConnect = true; Navigator.of(context).pop(); }, diff --git a/lib/src/screens/welcome/create_pin_welcome_page.dart b/lib/src/screens/welcome/create_pin_welcome_page.dart index 49082a1e67..7637d7abf8 100644 --- a/lib/src/screens/welcome/create_pin_welcome_page.dart +++ b/lib/src/screens/welcome/create_pin_welcome_page.dart @@ -1,6 +1,5 @@ import 'package:cake_wallet/src/widgets/cake_image_widget.dart'; import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart'; -import 'package:cake_wallet/themes/utils/custom_theme_colors.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:cake_wallet/routes.dart'; @@ -59,9 +58,7 @@ class CreatePinWelcomePage extends BasePage { gradient: LinearGradient( colors: [ Theme.of(context).colorScheme.surface, - currentTheme.isDark - ? CustomThemeColors.backgroundGradientColorDark - : CustomThemeColors.backgroundGradientColorLight, + currentTheme.customColors.backgroundGradientColor, ], begin: Alignment.topCenter, end: Alignment.bottomCenter, diff --git a/lib/src/widgets/base_text_form_field.dart b/lib/src/widgets/base_text_form_field.dart index 05baed589d..fbff5a3382 100644 --- a/lib/src/widgets/base_text_form_field.dart +++ b/lib/src/widgets/base_text_form_field.dart @@ -45,7 +45,8 @@ class BaseTextFormField extends StatelessWidget { this.borderWidth = 1.0, this.prefixIconConstraints, this.suffixIconConstraints, - super.key, this.suffixText, + super.key, + this.suffixText, }); final TextEditingController? controller; @@ -125,12 +126,12 @@ class BaseTextFormField extends StatelessWidget { alignLabelWithHint: alignLabelWithHint, contentPadding: contentPadding, floatingLabelBehavior: floatingLabelBehavior ?? FloatingLabelBehavior.never, - prefixIconConstraints: prefixIconConstraints ?? - const BoxConstraints(minWidth: 0, minHeight: 0), + prefixIconConstraints: + prefixIconConstraints ?? const BoxConstraints(minWidth: 40, minHeight: 0), prefix: prefix, prefixIcon: prefixIcon, - suffixIconConstraints: suffixIconConstraints ?? - const BoxConstraints(minWidth: 0, minHeight: 0), + suffixIconConstraints: + suffixIconConstraints ?? const BoxConstraints(minWidth: 0, minHeight: 0), suffix: suffix, suffixIcon: suffixIcon, filled: !hasUnderlineBorder, diff --git a/lib/src/widgets/blockchain_height_widget.dart b/lib/src/widgets/blockchain_height_widget.dart index cb7f71b24a..a835048fd4 100644 --- a/lib/src/widgets/blockchain_height_widget.dart +++ b/lib/src/widgets/blockchain_height_widget.dart @@ -37,7 +37,6 @@ class BlockchainHeightWidget extends StatefulWidget { final Function()? toggleSingleScan; final WalletType walletType; final Key? blockHeightTextFieldKey; - @override State createState() => BlockchainHeightState(); } diff --git a/lib/src/widgets/bottom_sheet/add_passphrase_bottom_sheet_widget.dart b/lib/src/widgets/bottom_sheet/add_passphrase_bottom_sheet_widget.dart index d00fd12fda..dde80d1397 100644 --- a/lib/src/widgets/bottom_sheet/add_passphrase_bottom_sheet_widget.dart +++ b/lib/src/widgets/bottom_sheet/add_passphrase_bottom_sheet_widget.dart @@ -2,18 +2,16 @@ import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/widgets/base_text_form_field.dart'; import 'package:cake_wallet/src/widgets/cake_image_widget.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; +import 'package:cake_wallet/themes/core/theme_extension.dart'; import 'package:flutter/material.dart'; class AddPassphraseBottomSheet extends StatefulWidget { AddPassphraseBottomSheet({ required String titleText, - required this.currentTheme, required this.onRestoreButtonPressed, }); final void Function(String) onRestoreButtonPressed; - final MaterialThemeBase currentTheme; @override State createState() => _AddPassphraseBottomSheetState(); @@ -43,8 +41,8 @@ class _AddPassphraseBottomSheetState extends State { bool obscurePassphrase = true; @override Widget build(BuildContext context) { - - final passphraseImage = widget.currentTheme.isDark ? passphraseImageDark : passphraseImageLight; + final passphraseImage = + context.currentTheme.isDark ? passphraseImageDark : passphraseImageLight; return Container( decoration: BoxDecoration( diff --git a/lib/src/widgets/bottom_sheet/base_bottom_sheet_widget.dart b/lib/src/widgets/bottom_sheet/base_bottom_sheet_widget.dart index a822158a19..4b17a71d78 100644 --- a/lib/src/widgets/bottom_sheet/base_bottom_sheet_widget.dart +++ b/lib/src/widgets/bottom_sheet/base_bottom_sheet_widget.dart @@ -1,6 +1,5 @@ import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/widgets/standard_slide_button_widget.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; import 'package:flutter/material.dart'; enum FooterType { none, slideActionButton, singleActionButton, doubleActionButton } @@ -11,7 +10,6 @@ abstract class BaseBottomSheet extends StatelessWidget { required this.titleText, this.titleIconPath, required this.footerType, - this.currentTheme, this.slideActionButtonText, this.onSlideActionComplete, this.singleActionButtonText, @@ -25,12 +23,11 @@ abstract class BaseBottomSheet extends StatelessWidget { this.leftActionButtonKey, this.rightActionButtonKey, required this.maxHeight, - }) : assert(footerType == FooterType.none || currentTheme != null, + }) : assert(footerType == FooterType.none, 'currentTheme is required unless footerType is none'); final String titleText; final String? titleIconPath; - final MaterialThemeBase? currentTheme; final FooterType footerType; final String? slideActionButtonText; final VoidCallback? onSlideActionComplete; @@ -115,7 +112,6 @@ abstract class BaseBottomSheet extends StatelessWidget { key: ValueKey('base_bottom_sheet_widget_standard_slide_button_key'), buttonText: slideActionButtonText ?? '', onSlideComplete: onSlideActionComplete ?? () {}, - currentTheme: currentTheme!, accessibleNavigationModeButtonText: accessibleNavigationModeSlideActionButtonText ?? '', ), ); diff --git a/lib/src/widgets/bottom_sheet/cake_pay_card_info_bottom_sheet_widget.dart b/lib/src/widgets/bottom_sheet/cake_pay_card_info_bottom_sheet_widget.dart index 900f59bb9d..21d6863b05 100644 --- a/lib/src/widgets/bottom_sheet/cake_pay_card_info_bottom_sheet_widget.dart +++ b/lib/src/widgets/bottom_sheet/cake_pay_card_info_bottom_sheet_widget.dart @@ -2,8 +2,6 @@ import 'package:cake_wallet/cake_pay/src/widgets/cake_pay_alert_modal.dart'; import 'package:cake_wallet/cake_pay/src/widgets/flip_card_widget.dart'; import 'package:cake_wallet/cake_pay/src/widgets/link_extractor.dart'; import 'package:cake_wallet/generated/i18n.dart'; -import 'package:cake_wallet/palette.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; import 'package:cake_wallet/utils/image_utill.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; import 'package:flutter/material.dart'; @@ -13,7 +11,6 @@ import 'base_bottom_sheet_widget.dart'; class CakePayCardInfoBottomSheet extends BaseBottomSheet { CakePayCardInfoBottomSheet({ required String titleText, - required MaterialThemeBase currentTheme, required FooterType footerType, String? titleIconPath, String? singleActionButtonText, @@ -32,12 +29,10 @@ class CakePayCardInfoBottomSheet extends BaseBottomSheet { this.howToUse, this.applyBoxShadow = false, Key? key, - }) : _currentTheme = currentTheme, - super( + }) : super( titleText: titleText, maxHeight: 900, titleIconPath: titleIconPath, - currentTheme: currentTheme, footerType: footerType, singleActionButtonText: singleActionButtonText, onSingleActionButtonPressed: onSingleActionButtonPressed, @@ -51,7 +46,6 @@ class CakePayCardInfoBottomSheet extends BaseBottomSheet { key: key); final VoidCallback onUpdateBalancePressed; - final MaterialThemeBase _currentTheme; final String? contentImage; final String? howToUse; final bool isReloadable; @@ -63,15 +57,15 @@ class CakePayCardInfoBottomSheet extends BaseBottomSheet { @override Widget contentWidget(BuildContext context) { final itemTitleTextStyle = Theme.of(context).textTheme.bodyMedium!.copyWith( - fontSize: 16, - fontWeight: FontWeight.w500, - decoration: TextDecoration.none, - ); + fontSize: 16, + fontWeight: FontWeight.w500, + decoration: TextDecoration.none, + ); final itemSubTitleTextStyle = Theme.of(context).textTheme.bodySmall!.copyWith( - fontWeight: FontWeight.w600, - color: Theme.of(context).colorScheme.onSurfaceVariant, - decoration: TextDecoration.none, - ); + fontWeight: FontWeight.w600, + color: Theme.of(context).colorScheme.onSurfaceVariant, + decoration: TextDecoration.none, + ); final tileBackgroundColor = Theme.of(context).colorScheme.surfaceContainer; @@ -165,9 +159,7 @@ class _HowToUseTile extends StatelessWidget { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( - S.of(context).how_to_use_card, - style: Theme.of(context).textTheme.bodyLarge), + Text(S.of(context).how_to_use_card, style: Theme.of(context).textTheme.bodyLarge), Icon( Icons.chevron_right_rounded, color: Theme.of(context).textTheme.titleLarge!.color!, @@ -261,11 +253,9 @@ Widget _buildCardImage(BuildContext ctx, String path, bool addShadow) { return Container( decoration: addShadow ? BoxDecoration( - borderRadius: border, - boxShadow: [ - BoxShadow(color: Colors.black.withAlpha(150), blurRadius: 5) - ], - ) + borderRadius: border, + boxShadow: [BoxShadow(color: Colors.black.withAlpha(150), blurRadius: 5)], + ) : null, child: ClipRRect( borderRadius: border, @@ -290,9 +280,7 @@ Widget _buildBarcodeSide(BuildContext context, {required String cardNumber, requ decoration: BoxDecoration( color: Theme.of(context).cardColor.withAlpha(200), borderRadius: BorderRadius.circular(10), - boxShadow: [ - BoxShadow(color: Colors.black.withAlpha(150), blurRadius: 5) - ], + boxShadow: [BoxShadow(color: Colors.black.withAlpha(150), blurRadius: 5)], ), child: Column( mainAxisAlignment: MainAxisAlignment.center, @@ -300,7 +288,6 @@ Widget _buildBarcodeSide(BuildContext context, {required String cardNumber, requ Expanded( child: Container( color: Theme.of(context).textTheme.titleLarge!.color!.withOpacity(.1), - ), ), const SizedBox(height: 12), @@ -345,7 +332,6 @@ Widget _buildBarcodeSide(BuildContext context, {required String cardNumber, requ ), ], ), - ], ), ), diff --git a/lib/src/widgets/bottom_sheet/confirm_sending_bottom_sheet_widget.dart b/lib/src/widgets/bottom_sheet/confirm_sending_bottom_sheet_widget.dart index 47cacea1e2..4bac63a239 100644 --- a/lib/src/widgets/bottom_sheet/confirm_sending_bottom_sheet_widget.dart +++ b/lib/src/widgets/bottom_sheet/confirm_sending_bottom_sheet_widget.dart @@ -1,7 +1,6 @@ import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/widgets/rounded_icon_button.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; -import 'package:cake_wallet/themes/utils/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/core/theme_extension.dart'; import 'package:cake_wallet/utils/address_formatter.dart'; import 'package:cake_wallet/utils/image_utill.dart'; import 'package:cake_wallet/view_model/cake_pay/cake_pay_buy_card_view_model.dart'; @@ -18,7 +17,6 @@ import 'base_bottom_sheet_widget.dart'; class ConfirmSendingBottomSheet extends BaseBottomSheet { ConfirmSendingBottomSheet({ required String titleText, - required MaterialThemeBase currentTheme, required FooterType footerType, String? titleIconPath, String? slideActionButtonText, @@ -43,12 +41,10 @@ class ConfirmSendingBottomSheet extends BaseBottomSheet { this.quantity, Key? key, }) : showScrollbar = outputs.length > 3, - _currentTheme = currentTheme, super( titleText: titleText, maxHeight: 900, titleIconPath: titleIconPath, - currentTheme: currentTheme, footerType: footerType, slideActionButtonText: slideActionButtonText ?? 'Swipe to send', onSlideActionComplete: onSlideActionComplete, @@ -57,7 +53,6 @@ class ConfirmSendingBottomSheet extends BaseBottomSheet { key: key); final CryptoCurrency currency; - final MaterialThemeBase _currentTheme; final String? paymentId; final String? paymentIdValue; final String? expirationTime; @@ -91,9 +86,9 @@ class ConfirmSendingBottomSheet extends BaseBottomSheet { decoration: TextDecoration.none, ); - final tileBackgroundColor = _currentTheme.isDark - ? CustomThemeColors.backgroundGradientColorDark.withAlpha(140) - : CustomThemeColors.cardGradientColorPrimaryLight; + final tileBackgroundColor = context.currentTheme.isDark + ? context.customColors.backgroundGradientColor.withAlpha(140) + : context.customColors.cardGradientColorPrimary; Widget content = Padding( padding: EdgeInsets.fromLTRB(8, 0, showScrollbar ? 16 : 8, 8), diff --git a/lib/src/widgets/bottom_sheet/info_bottom_sheet_widget.dart b/lib/src/widgets/bottom_sheet/info_bottom_sheet_widget.dart index 351616f526..12627a3cf4 100644 --- a/lib/src/widgets/bottom_sheet/info_bottom_sheet_widget.dart +++ b/lib/src/widgets/bottom_sheet/info_bottom_sheet_widget.dart @@ -1,17 +1,8 @@ import 'package:auto_size_text/auto_size_text.dart'; -import 'package:cake_wallet/src/widgets/simple_checkbox.dart'; - - import 'package:cake_wallet/utils/image_utill.dart'; -import 'package:cake_wallet/src/widgets/primary_button.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; - - import 'package:cake_wallet/routes.dart'; -import 'package:cake_wallet/src/widgets/primary_button.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; @@ -19,9 +10,12 @@ import 'package:flutter/material.dart'; import 'base_bottom_sheet_widget.dart'; class LoadingBottomSheet extends BaseBottomSheet { - LoadingBottomSheet( - {required String titleText, String? titleIconPath}) - : super(titleText: titleText, titleIconPath: titleIconPath, footerType: FooterType.none, maxHeight: 900); + LoadingBottomSheet({required String titleText, String? titleIconPath}) + : super( + titleText: titleText, + titleIconPath: titleIconPath, + footerType: FooterType.none, + maxHeight: 900); @override Widget contentWidget(BuildContext context) { @@ -36,7 +30,6 @@ class InfoBottomSheet extends BaseBottomSheet { InfoBottomSheet({ required String titleText, String? titleIconPath, - required this.currentTheme, required this.footerType, this.contentImage, this.contentImageColor, @@ -59,7 +52,6 @@ class InfoBottomSheet extends BaseBottomSheet { titleText: titleText, titleIconPath: titleIconPath, maxHeight: 900, - currentTheme: currentTheme, footerType: footerType, singleActionButtonText: singleActionButtonText, onSingleActionButtonPressed: onSingleActionButtonPressed, @@ -72,7 +64,6 @@ class InfoBottomSheet extends BaseBottomSheet { rightActionButtonKey: rightActionButtonKey, key: key); - final MaterialThemeBase currentTheme; final FooterType footerType; final String? contentImage; final Color? contentImageColor; @@ -91,7 +82,6 @@ class InfoBottomSheet extends BaseBottomSheet { final double? contentImageSize; final bool showDisclaimerText; - @override Widget contentWidget(BuildContext context) { return SizedBox( @@ -137,35 +127,36 @@ class InfoBottomSheet extends BaseBottomSheet { bottomActionPanel ?? const SizedBox(), if (showDisclaimerText) Padding( - padding: const EdgeInsets.only(top: 20, bottom: 10), - child: RichText( - textAlign: TextAlign.center, - text: TextSpan( - style: Theme.of(context).textTheme.bodyMedium?.copyWith( - color: Theme.of(context).colorScheme.onSurfaceVariant, - ), - children: [ - TextSpan( - text: 'By continuing you agree to this ', - style: Theme.of(context).textTheme.bodyMedium?.copyWith( - color: Theme.of(context).colorScheme.onSurfaceVariant, - fontWeight: FontWeight.w500, + padding: const EdgeInsets.only(top: 20, bottom: 10), + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: Theme.of(context).textTheme.bodyMedium?.copyWith( + color: Theme.of(context).colorScheme.onSurfaceVariant, + ), + children: [ + TextSpan( + text: 'By continuing you agree to this ', + style: Theme.of(context).textTheme.bodyMedium?.copyWith( + color: Theme.of(context).colorScheme.onSurfaceVariant, + fontWeight: FontWeight.w500, + ), ), - ), - TextSpan( - text: 'disclaimer', - style: Theme.of(context).textTheme.bodyMedium?.copyWith( - color: Theme.of(context).colorScheme.onSurfaceVariant, - decoration: TextDecoration.underline, - fontWeight: FontWeight.w700, + TextSpan( + text: 'disclaimer', + style: Theme.of(context).textTheme.bodyMedium?.copyWith( + color: Theme.of(context).colorScheme.onSurfaceVariant, + decoration: TextDecoration.underline, + fontWeight: FontWeight.w700, + ), + recognizer: TapGestureRecognizer() + ..onTap = + () => Navigator.pushNamed(context, Routes.readThirdPartyDisclaimer), ), - recognizer: TapGestureRecognizer() - ..onTap = () => Navigator.pushNamed(context, Routes.readThirdPartyDisclaimer), - ), - ], + ], + ), ), ), - ), ], ), ); diff --git a/lib/src/widgets/bottom_sheet/info_steps_bottom_sheet_widget.dart b/lib/src/widgets/bottom_sheet/info_steps_bottom_sheet_widget.dart index 327b2d5430..6dbc3ee5a8 100644 --- a/lib/src/widgets/bottom_sheet/info_steps_bottom_sheet_widget.dart +++ b/lib/src/widgets/bottom_sheet/info_steps_bottom_sheet_widget.dart @@ -1,6 +1,6 @@ import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; +import 'package:cake_wallet/themes/core/theme_extension.dart'; import 'package:flutter/material.dart'; import 'base_bottom_sheet_widget.dart'; @@ -13,15 +13,17 @@ class InfoStep { } class InfoStepsBottomSheet extends BaseBottomSheet { - final MaterialThemeBase currentTheme; final List steps; InfoStepsBottomSheet({ required String titleText, required this.steps, String? titleIconPath, - required this.currentTheme, - }) : super(titleText: titleText, titleIconPath: titleIconPath, footerType: FooterType.none, maxHeight: 900); + }) : super( + titleText: titleText, + titleIconPath: titleIconPath, + footerType: FooterType.none, + maxHeight: 900); @override Widget contentWidget(BuildContext context) => SizedBox( @@ -33,8 +35,7 @@ class InfoStepsBottomSheet extends BaseBottomSheet { child: Column( children: steps .map((step) => Container( - margin: EdgeInsets.only( - bottom: 15, left: 20, right: 20), + margin: EdgeInsets.only(bottom: 15, left: 20, right: 20), padding: EdgeInsets.all(10), alignment: Alignment.center, decoration: BoxDecoration( @@ -51,35 +52,24 @@ class InfoStepsBottomSheet extends BaseBottomSheet { padding: EdgeInsets.only(left: 16), child: Column( mainAxisSize: MainAxisSize.max, - mainAxisAlignment: - MainAxisAlignment.start, - crossAxisAlignment: - CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( step.title, - style: Theme.of(context) - .textTheme - .bodyMedium! - .copyWith( + style: Theme.of(context).textTheme.bodyMedium!.copyWith( fontSize: 20, fontWeight: FontWeight.w500, - color: Theme.of(context) - .colorScheme - .onSurface, + color: context.currentTheme.colorScheme.onSurface, ), ), Padding( padding: EdgeInsets.only(top: 5), child: Text( step.description, - style: Theme.of(context) - .textTheme - .bodyMedium! - .copyWith( - color: Theme.of(context) - .colorScheme - .onSurfaceVariant, + style: Theme.of(context).textTheme.bodyMedium!.copyWith( + color: context + .currentTheme.colorScheme.onSurfaceVariant, ), ), ) @@ -98,10 +88,10 @@ class InfoStepsBottomSheet extends BaseBottomSheet { padding: const EdgeInsets.all(16), child: PrimaryButton( text: S.of(context).close, - color: Theme.of(context).colorScheme.primary, - textColor: currentTheme.isDark - ? Theme.of(context).colorScheme.onSurfaceVariant - : Theme.of(context).colorScheme.onPrimary, + color: context.currentTheme.colorScheme.primary, + textColor: context.currentTheme.isDark + ? context.currentTheme.colorScheme.onSurfaceVariant + : context.currentTheme.colorScheme.onPrimary, onPressed: () => Navigator.of(context).pop(), ), ) diff --git a/lib/src/widgets/bottom_sheet/payment_confirmation_bottom_sheet.dart b/lib/src/widgets/bottom_sheet/payment_confirmation_bottom_sheet.dart index 6ade0be128..23913aa2ab 100644 --- a/lib/src/widgets/bottom_sheet/payment_confirmation_bottom_sheet.dart +++ b/lib/src/widgets/bottom_sheet/payment_confirmation_bottom_sheet.dart @@ -6,7 +6,6 @@ import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cw_core/wallet_type.dart'; import 'package:cake_wallet/view_model/payment/payment_view_model.dart'; import 'package:cake_wallet/view_model/wallet_switcher_view_model.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; class PaymentConfirmationBottomSheet extends BaseBottomSheet { @@ -15,7 +14,6 @@ class PaymentConfirmationBottomSheet extends BaseBottomSheet { required this.paymentFlowResult, required this.paymentViewModel, required this.walletSwitcherViewModel, - required this.currentTheme, required this.paymentRequest, required this.onSelectWallet, required this.onChangeWallet, @@ -24,13 +22,11 @@ class PaymentConfirmationBottomSheet extends BaseBottomSheet { titleText: '', footerType: FooterType.none, maxHeight: 900, - currentTheme: currentTheme, ); final PaymentFlowResult paymentFlowResult; final PaymentViewModel paymentViewModel; final WalletSwitcherViewModel walletSwitcherViewModel; - final MaterialThemeBase currentTheme; final PaymentRequest paymentRequest; final VoidCallback onSelectWallet; final VoidCallback onChangeWallet; diff --git a/lib/src/widgets/bottom_sheet/swap_confirmation_bottom_sheet.dart b/lib/src/widgets/bottom_sheet/swap_confirmation_bottom_sheet.dart index c11edf0ad1..0864e882cd 100644 --- a/lib/src/widgets/bottom_sheet/swap_confirmation_bottom_sheet.dart +++ b/lib/src/widgets/bottom_sheet/swap_confirmation_bottom_sheet.dart @@ -19,7 +19,6 @@ import 'package:cw_core/wallet_type.dart'; import 'package:cake_wallet/view_model/payment/payment_view_model.dart'; import 'package:cake_wallet/view_model/exchange/exchange_view_model.dart'; import 'package:cake_wallet/exchange/exchange_trade_state.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:cake_wallet/src/widgets/alert_with_one_action.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; @@ -29,7 +28,6 @@ class SwapConfirmationBottomSheet extends BaseBottomSheet { SwapConfirmationBottomSheet({ Key? key, required this.paymentFlowResult, - required this.currentTheme, required this.exchangeViewModel, required this.authService, this.sessionId, @@ -37,11 +35,9 @@ class SwapConfirmationBottomSheet extends BaseBottomSheet { titleText: S.current.swap, footerType: FooterType.none, maxHeight: 900, - currentTheme: currentTheme, ); final PaymentFlowResult paymentFlowResult; - final MaterialThemeBase currentTheme; final ExchangeViewModel exchangeViewModel; final AuthService authService; final String? sessionId; diff --git a/lib/src/widgets/bottom_sheet/swap_details_bottom_sheet.dart b/lib/src/widgets/bottom_sheet/swap_details_bottom_sheet.dart index 9830d381a3..79e6cff68d 100644 --- a/lib/src/widgets/bottom_sheet/swap_details_bottom_sheet.dart +++ b/lib/src/widgets/bottom_sheet/swap_details_bottom_sheet.dart @@ -7,7 +7,6 @@ import 'package:cake_wallet/src/widgets/bottom_sheet/base_bottom_sheet_widget.da import 'package:cw_core/wallet_type.dart'; import 'package:cake_wallet/view_model/exchange/exchange_trade_view_model.dart'; import 'package:cake_wallet/src/widgets/standard_slide_button_widget.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; import 'package:cake_wallet/core/execution_state.dart'; import 'package:cake_wallet/view_model/send/send_view_model_state.dart'; import 'package:cake_wallet/src/widgets/bottom_sheet/info_bottom_sheet_widget.dart'; @@ -22,11 +21,9 @@ import 'package:flutter_mobx/flutter_mobx.dart'; class SwapDetailsBottomSheet extends StatefulWidget { SwapDetailsBottomSheet({ Key? key, - required this.currentTheme, required this.exchangeTradeViewModel, }) : super(key: key); - final MaterialThemeBase currentTheme; final ExchangeTradeViewModel exchangeTradeViewModel; @override @@ -124,7 +121,6 @@ class _SwapDetailsBottomSheetState extends State { isScrollControlled: true, builder: (BuildContext bottomSheetContext) { return InfoBottomSheet( - currentTheme: widget.currentTheme, footerType: FooterType.singleActionButton, titleText: S.of(bottomSheetContext).transaction_sent, contentImage: 'assets/images/birthday_cake.png', @@ -155,7 +151,6 @@ class _SwapDetailsBottomSheetState extends State { titleText: 'Confirm Swap', footerType: FooterType.none, maxHeight: 900, - currentTheme: widget.currentTheme, exchangeTradeViewModel: widget.exchangeTradeViewModel, onExecuteSwap: _executeSwap, ); @@ -192,14 +187,12 @@ class _SwapDetailsBottomSheetContent extends BaseBottomSheet { required String titleText, required FooterType footerType, required double maxHeight, - MaterialThemeBase? currentTheme, required this.exchangeTradeViewModel, required this.onExecuteSwap, }) : super( titleText: titleText, footerType: footerType, maxHeight: maxHeight, - currentTheme: currentTheme, ); final ExchangeTradeViewModel exchangeTradeViewModel; @@ -250,7 +243,6 @@ class _SwapDetailsBottomSheetContent extends BaseBottomSheet { knobColor: Theme.of(context).colorScheme.primary, buttonText: 'Swipe to swap', onSlideComplete: onExecuteSwap, - currentTheme: currentTheme!, accessibleNavigationModeButtonText: 'Complete swap', ); }, diff --git a/lib/src/widgets/bottom_sheet/tooltip_bottom_sheet.dart b/lib/src/widgets/bottom_sheet/tooltip_bottom_sheet.dart index 6b75d37535..4984836c9c 100644 --- a/lib/src/widgets/bottom_sheet/tooltip_bottom_sheet.dart +++ b/lib/src/widgets/bottom_sheet/tooltip_bottom_sheet.dart @@ -6,7 +6,6 @@ class TooltipSheet extends BaseBottomSheet { final String tooltip; const TooltipSheet({ - required super.currentTheme, required super.titleText, super.titleIconPath, required this.tooltip, @@ -25,22 +24,22 @@ class TooltipSheet extends BaseBottomSheet { @override Widget contentWidget(BuildContext context) => Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10), - color: Theme.of(context).colorScheme.surfaceContainer), - margin: const EdgeInsets.all(12), - padding: const EdgeInsets.all(12), - child: AutoSizeText( - tooltip, - textAlign: TextAlign.center, - style: Theme.of(context).textTheme.bodyMedium!.copyWith( - fontSize: 16, - fontWeight: FontWeight.w500, - color: Theme.of(context).colorScheme.onSurfaceVariant, - decoration: TextDecoration.none, - ), - ), - ); + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: Theme.of(context).colorScheme.surfaceContainer), + margin: const EdgeInsets.all(12), + padding: const EdgeInsets.all(12), + child: AutoSizeText( + tooltip, + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.bodyMedium!.copyWith( + fontSize: 16, + fontWeight: FontWeight.w500, + color: Theme.of(context).colorScheme.onSurfaceVariant, + decoration: TextDecoration.none, + ), + ), + ); Widget footerWidget(BuildContext context) => SizedBox.shrink(); } diff --git a/lib/src/widgets/bottom_sheet/wallet_switcher_bottom_sheet.dart b/lib/src/widgets/bottom_sheet/wallet_switcher_bottom_sheet.dart index 81e0fd075e..e99e344c4f 100644 --- a/lib/src/widgets/bottom_sheet/wallet_switcher_bottom_sheet.dart +++ b/lib/src/widgets/bottom_sheet/wallet_switcher_bottom_sheet.dart @@ -6,13 +6,11 @@ import 'package:cw_core/wallet_info.dart'; import 'package:cw_core/wallet_type.dart'; import 'package:cake_wallet/view_model/wallet_switcher_view_model.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; class WalletSwitcherBottomSheet extends BaseBottomSheet { WalletSwitcherBottomSheet({ Key? key, required this.viewModel, - required this.currentTheme, this.filterWalletType, this.subtitle, this.onWalletSelected, @@ -20,11 +18,9 @@ class WalletSwitcherBottomSheet extends BaseBottomSheet { titleText: S.current.select_a_wallet, footerType: FooterType.none, maxHeight: 900, - currentTheme: currentTheme, ); final WalletSwitcherViewModel viewModel; - final MaterialThemeBase currentTheme; final WalletType? filterWalletType; final String? subtitle; final Function(WalletInfo)? onWalletSelected; diff --git a/lib/src/widgets/dashboard_card_widget.dart b/lib/src/widgets/dashboard_card_widget.dart index d5b4f8853a..69b41b53f9 100644 --- a/lib/src/widgets/dashboard_card_widget.dart +++ b/lib/src/widgets/dashboard_card_widget.dart @@ -1,8 +1,7 @@ +import 'package:cake_wallet/themes/core/theme_extension.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import '../../themes/utils/custom_theme_colors.dart'; - class DashBoardRoundedCardWidget extends StatelessWidget { DashBoardRoundedCardWidget({ this.onTap, @@ -19,7 +18,6 @@ class DashBoardRoundedCardWidget extends StatelessWidget { super.key, this.marginV, this.marginH, - required this.isDarkTheme, }); final VoidCallback? onTap; @@ -35,7 +33,6 @@ class DashBoardRoundedCardWidget extends StatelessWidget { final double? marginH; final double? shadowSpread; final double? shadowBlur; - final bool isDarkTheme; @override Widget build(BuildContext context) { @@ -48,12 +45,8 @@ class DashBoardRoundedCardWidget extends StatelessWidget { borderRadius: BorderRadius.circular(15), gradient: LinearGradient( colors: [ - isDarkTheme - ? CustomThemeColors.cardGradientColorPrimaryDark - : CustomThemeColors.cardGradientColorPrimaryLight, - isDarkTheme - ? CustomThemeColors.cardGradientColorSecondaryDark - : CustomThemeColors.cardGradientColorSecondaryLight, + context.customColors.cardGradientColorPrimary, + context.customColors.cardGradientColorSecondary, ], begin: Alignment.topCenter, end: Alignment.bottomCenter, @@ -76,6 +69,8 @@ class DashBoardRoundedCardWidget extends StatelessWidget { style: TextButton.styleFrom( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(15), + side: BorderSide( + width: 1.25, color: Theme.of(context).colorScheme.surfaceContainerHigh), ), padding: EdgeInsets.only(left: 24, top: 24, right: 20, bottom: 24), ), diff --git a/lib/src/widgets/gradient_background.dart b/lib/src/widgets/gradient_background.dart index fd9066ece5..a36fb75f01 100644 --- a/lib/src/widgets/gradient_background.dart +++ b/lib/src/widgets/gradient_background.dart @@ -1,8 +1,8 @@ -import 'package:cake_wallet/themes/utils/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/core/theme_extension.dart'; import 'package:flutter/material.dart'; class GradientBackground extends StatelessWidget { - const GradientBackground({required this.scaffold}); + const GradientBackground({required this.scaffold, super.key}); final Widget scaffold; @@ -14,9 +14,7 @@ class GradientBackground extends StatelessWidget { gradient: LinearGradient( colors: [ Theme.of(context).colorScheme.surface, - Theme.of(context).brightness == Brightness.dark - ? CustomThemeColors.backgroundGradientColorDark - : CustomThemeColors.backgroundGradientColorLight, + context.customColors.backgroundGradientColor, ], begin: Alignment.topCenter, end: Alignment.bottomCenter, diff --git a/lib/src/widgets/option_tile.dart b/lib/src/widgets/option_tile.dart index cdc4fb9f4d..f241797da0 100644 --- a/lib/src/widgets/option_tile.dart +++ b/lib/src/widgets/option_tile.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:cake_wallet/themes/core/theme_extension.dart'; class OptionTile extends StatelessWidget { const OptionTile({ @@ -23,10 +24,22 @@ class OptionTile extends StatelessWidget { return Container( width: double.infinity, alignment: Alignment.center, - child: ElevatedButton( + decoration: ShapeDecoration( + gradient: LinearGradient( + colors: [ + context.customColors.cardGradientColorPrimary, + context.customColors.cardGradientColorSecondary, + ], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + ), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15)), + ), + child: TextButton( style: TextButton.styleFrom( - backgroundColor: Theme.of(context).colorScheme.surfaceContainer, - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + side: BorderSide(width: 1.25, color: Theme.of(context).colorScheme.surfaceContainerHigh), + backgroundColor: Colors.transparent, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15)), padding: EdgeInsets.all(24), ), onPressed: onPressed, @@ -50,15 +63,15 @@ class OptionTile extends StatelessWidget { constraints: BoxConstraints(maxWidth: 220), child: Text(title, style: Theme.of(context).textTheme.titleMedium), ), - if (tag != null) Container( - decoration: BoxDecoration( - border: Border.all(), - borderRadius: BorderRadius.circular(20), - color: Theme.of(context).colorScheme.onSurfaceVariant - ), - padding: EdgeInsets.symmetric(horizontal: 5), - margin: EdgeInsets.only(left: 5), - child: Text(tag!)) + if (tag != null) + Container( + decoration: BoxDecoration( + border: Border.all(), + borderRadius: BorderRadius.circular(20), + color: Theme.of(context).colorScheme.onSurfaceVariant), + padding: EdgeInsets.symmetric(horizontal: 5), + margin: EdgeInsets.only(left: 5), + child: Text(tag!)) ], ), Padding( diff --git a/lib/src/widgets/picker.dart b/lib/src/widgets/picker.dart index b1fa6f5e58..5726457498 100644 --- a/lib/src/widgets/picker.dart +++ b/lib/src/widgets/picker.dart @@ -4,7 +4,7 @@ import 'dart:math'; import 'package:cake_wallet/entities/seed_type.dart'; import 'package:cake_wallet/src/widgets/search_bar_widget.dart'; -import 'package:cake_wallet/themes/utils/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/core/theme_extension.dart'; import 'package:cake_wallet/utils/responsive_layout_util.dart'; import 'package:cw_core/transaction_priority.dart'; import 'package:flutter/material.dart'; @@ -77,7 +77,6 @@ class _PickerState extends State> { List images; List filteredItems = []; List filteredImages = []; - final TextEditingController searchController = TextEditingController(); ScrollController controller = ScrollController(); @@ -519,16 +518,13 @@ class _PickerState extends State> { } Widget buildSlider({required int index, required bool isActivated}) { - final isDarkMode = Theme.of(context).brightness == Brightness.dark; return Row( children: [ Expanded( child: Slider( activeColor: Theme.of(context).colorScheme.primary, - inactiveColor: isDarkMode - ? CustomThemeColors.toggleColorOffStateDark - : CustomThemeColors.toggleColorOffStateLight, - thumbColor: CustomThemeColors.toggleKnobStateColorLight, + inactiveColor: context.customColors.toggleColorOffState, + thumbColor: context.customColors.toggleKnobStateColor, value: widget.sliderValue == null || widget.sliderValue! < 1 ? 1 : widget.sliderValue!, onChanged: isActivated ? widget.onSliderChanged : null, min: widget.minValue ?? 1, diff --git a/lib/src/widgets/primary_button.dart b/lib/src/widgets/primary_button.dart index b4d8cfdaaf..750d4cb455 100644 --- a/lib/src/widgets/primary_button.dart +++ b/lib/src/widgets/primary_button.dart @@ -46,16 +46,15 @@ class PrimaryButton extends StatelessWidget { borderRadius: borderRadius ?? BorderRadius.circular(12.0), ), ), - overlayColor: WidgetStateProperty.all(Colors.transparent), ), child: Text( text, textAlign: TextAlign.center, style: Theme.of(context).textTheme.bodyMedium!.copyWith( - fontSize: 15.0, - fontWeight: FontWeight.w600, - color: isDisabled ? textColor.withOpacity(0.5) : textColor, - ), + fontSize: 15.0, + fontWeight: FontWeight.w600, + color: isDisabled ? textColor.withOpacity(0.5) : textColor, + ), ), ), ), @@ -117,10 +116,10 @@ class LoadingPrimaryButton extends StatelessWidget { : Text( text, style: Theme.of(context).textTheme.bodyMedium!.copyWith( - fontSize: 15.0, - fontWeight: FontWeight.w600, - color: isDisabled ? textColor.withOpacity(0.5) : textColor, - ), + fontSize: 15.0, + fontWeight: FontWeight.w600, + color: isDisabled ? textColor.withOpacity(0.5) : textColor, + ), ), ), ), @@ -228,7 +227,7 @@ class PrimaryImageButton extends StatelessWidget { child: SizedBox( width: double.infinity, height: 52.0, - child: ElevatedButton( + child: TextButton( onPressed: onPressed, style: ButtonStyle( backgroundColor: WidgetStateProperty.all(color), diff --git a/lib/src/widgets/seed_language_picker.dart b/lib/src/widgets/seed_language_picker.dart index e2b10aa4cb..96c236649c 100644 --- a/lib/src/widgets/seed_language_picker.dart +++ b/lib/src/widgets/seed_language_picker.dart @@ -15,8 +15,12 @@ class SeedLanguagePickerOption { } final List seedLanguages = [ - SeedLanguagePickerOption('English', S.current.seed_language_english, - Image.asset('assets/images/flags/usa.png'), [MoneroSeedType.legacy, MoneroSeedType.polyseed, MoneroSeedType.bip39]), + SeedLanguagePickerOption( + 'English', + S.current.seed_language_english, + Image.asset('assets/images/flags/usa.png'), + [MoneroSeedType.legacy, MoneroSeedType.polyseed, MoneroSeedType.bip39], + ), SeedLanguagePickerOption('Chinese (Simplified)', S.current.seed_language_chinese, Image.asset('assets/images/flags/chn.png'), [MoneroSeedType.legacy, MoneroSeedType.polyseed]), SeedLanguagePickerOption('Chinese (Traditional)', S.current.seed_language_chinese_traditional, @@ -48,12 +52,12 @@ const defaultSeedLanguage = 'English'; enum Places { topLeft, topRight, bottomLeft, bottomRight, inside } class SeedLanguagePicker extends StatefulWidget { - SeedLanguagePicker( - {Key? key, - this.selected = defaultSeedLanguage, - this.seedType = MoneroSeedType.defaultSeedType, - required this.onItemSelected}) - : super(key: key); + SeedLanguagePicker({ + Key? key, + this.selected = defaultSeedLanguage, + this.seedType = MoneroSeedType.defaultSeedType, + required this.onItemSelected, + }) : super(key: key); final MoneroSeedType seedType; final String selected; diff --git a/lib/src/widgets/service_status_tile.dart b/lib/src/widgets/service_status_tile.dart index b43740c45b..1b7b320a4b 100644 --- a/lib/src/widgets/service_status_tile.dart +++ b/lib/src/widgets/service_status_tile.dart @@ -1,6 +1,6 @@ import 'package:auto_size_text/auto_size_text.dart'; import 'package:cake_wallet/entities/service_status.dart'; -import 'package:cake_wallet/themes/utils/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/core/custom_theme_colors.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; @@ -22,11 +22,10 @@ class ServiceStatusTile extends StatelessWidget { child: AutoSizeText( "${status.title}${status.status != null ? " - ${status.status}" : ""}", style: Theme.of(context).textTheme.bodyMedium!.copyWith( - fontSize: 16, - - fontWeight: FontWeight.w800, - height: 1, - ), + fontSize: 16, + fontWeight: FontWeight.w800, + height: 1, + ), maxLines: 1, textAlign: TextAlign.start, ), diff --git a/lib/src/widgets/services_updates_widget.dart b/lib/src/widgets/services_updates_widget.dart index eaa50867cb..19f1674674 100644 --- a/lib/src/widgets/services_updates_widget.dart +++ b/lib/src/widgets/services_updates_widget.dart @@ -43,7 +43,7 @@ class _ServicesUpdatesWidgetState extends State { }, child: CakeImageWidget( imageUrl: "assets/images/notif.svg", - color: Theme.of(context).colorScheme.onSurface, + color: Theme.of(context).colorScheme.primary, width: DeviceInfo.instance.isDesktop ? 30 : 20, ), ); @@ -108,7 +108,7 @@ class _ServicesUpdatesWidgetState extends State { horizontal: 24, vertical: 20, ), - child: PrimaryImageButton( + child: PrimaryButton( onPressed: () { try { launchUrl( @@ -118,10 +118,6 @@ class _ServicesUpdatesWidgetState extends State { mode: LaunchMode.externalApplication); } catch (_) {} }, - image: Image.asset( - "assets/images/status_website_image.png", - color: Theme.of(context).colorScheme.onPrimary, - ), text: "Status Website", color: Theme.of(context).colorScheme.primary, textColor: Theme.of(context).colorScheme.onPrimary, @@ -139,7 +135,7 @@ class _ServicesUpdatesWidgetState extends State { children: [ CakeImageWidget( imageUrl: "assets/images/notif.svg", - color: Theme.of(context).colorScheme.onSurface, + color: Theme.of(context).colorScheme.primary, width: DeviceInfo.instance.isDesktop ? 30 : 20, ), if (state.hasData && state.data!.hasUpdates && !wasOpened) diff --git a/lib/src/widgets/setting_actions.dart b/lib/src/widgets/setting_actions.dart index ae0552e2ee..78f1ee1426 100644 --- a/lib/src/widgets/setting_actions.dart +++ b/lib/src/widgets/setting_actions.dart @@ -34,7 +34,7 @@ class SettingActions { static SettingActions silentPaymentsSettingAction = SettingActions._( key: ValueKey('dashboard_page_menu_widget_silent_payment_settings_button_key'), name: (context) => S.of(context).silent_payments_settings, - image: 'assets/images/bitcoin_menu.png', + image: 'assets/images/crypto/bitcoin.png', onTap: (BuildContext context) { Navigator.of(context).pushNamed(Routes.silentPaymentsSettings); }, @@ -43,16 +43,17 @@ class SettingActions { static SettingActions exportOutputsAction = SettingActions._( key: ValueKey('dashboard_page_menu_widget_export_outputs_settings_button_key'), name: (context) => S.of(context).export_outputs, - image: 'assets/images/monero_menu.png', + image: 'assets/images/crypto/monero.png', onTap: (BuildContext context) { - Navigator.of(context).pushNamed(Routes.urqrAnimatedPage, arguments: {'export-outputs': 'export-outputs'}); + Navigator.of(context) + .pushNamed(Routes.urqrAnimatedPage, arguments: {'export-outputs': 'export-outputs'}); }, ); - + static SettingActions litecoinMwebSettingAction = SettingActions._( key: ValueKey('dashboard_page_menu_widget_litecoin_mweb_settings_button_key'), name: (context) => S.of(context).litecoin_mweb_settings, - image: 'assets/images/litecoin_menu.png', + image: 'assets/images/crypto/litecoin.png', onTap: (BuildContext context) { Navigator.of(context).pushNamed(Routes.mwebSettings); }, diff --git a/lib/src/widgets/standard_slide_button_widget.dart b/lib/src/widgets/standard_slide_button_widget.dart index 641e050365..d531cfb6c1 100644 --- a/lib/src/widgets/standard_slide_button_widget.dart +++ b/lib/src/widgets/standard_slide_button_widget.dart @@ -1,6 +1,5 @@ import 'package:cake_wallet/src/widgets/primary_button.dart'; -import 'package:cake_wallet/themes/core/material_base_theme.dart'; -import 'package:cake_wallet/themes/utils/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/core/theme_extension.dart'; import 'package:flutter/material.dart'; class StandardSlideButton extends StatefulWidget { @@ -9,7 +8,6 @@ class StandardSlideButton extends StatefulWidget { required this.onSlideComplete, this.buttonText = '', this.height = 48.0, - required this.currentTheme, required this.accessibleNavigationModeButtonText, this.tileBackgroundColor, this.knobColor, @@ -18,11 +16,10 @@ class StandardSlideButton extends StatefulWidget { final VoidCallback onSlideComplete; final String buttonText; final double height; - final MaterialThemeBase currentTheme; final String accessibleNavigationModeButtonText; final Color? tileBackgroundColor; final Color? knobColor; - + @override StandardSlideButtonState createState() => StandardSlideButtonState(); } @@ -39,9 +36,7 @@ class StandardSlideButtonState extends State { Widget build(BuildContext context) { final bool accessible = MediaQuery.of(context).accessibleNavigation; - final tileBackgroundColor = widget.currentTheme.isDark - ? CustomThemeColors.backgroundGradientColorDark - : CustomThemeColors.backgroundGradientColorLight; + final tileBackgroundColor = context.currentTheme.customColors.backgroundGradientColor; return accessible ? PrimaryButton( diff --git a/lib/src/widgets/standard_switch.dart b/lib/src/widgets/standard_switch.dart index 8100263b7e..076292976d 100644 --- a/lib/src/widgets/standard_switch.dart +++ b/lib/src/widgets/standard_switch.dart @@ -1,12 +1,16 @@ -import 'package:cake_wallet/themes/utils/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/core/theme_extension.dart'; import 'package:flutter/material.dart'; class StandardSwitch extends StatefulWidget { - const StandardSwitch({required this.value, required this.onTapped}); + const StandardSwitch({ + required this.value, + required this.onTapped, + this.backgroundColor, + }); final bool value; + final Color? backgroundColor; final VoidCallback onTapped; - @override StandardSwitchState createState() => StandardSwitchState(); } @@ -14,7 +18,6 @@ class StandardSwitch extends StatefulWidget { class StandardSwitchState extends State { @override Widget build(BuildContext context) { - final isDarkMode = Theme.of(context).brightness == Brightness.dark; return Semantics( toggled: widget.value, child: GestureDetector( @@ -28,20 +31,16 @@ class StandardSwitchState extends State { decoration: BoxDecoration( color: widget.value ? Theme.of(context).colorScheme.primary - : isDarkMode - ? CustomThemeColors.toggleColorOffStateDark - : CustomThemeColors.toggleColorOffStateLight, - borderRadius: BorderRadius.all( - Radius.circular(14.0), - ), + : widget.backgroundColor ?? context.currentTheme.customColors.toggleColorOffState, + borderRadius: BorderRadius.all(Radius.circular(14.0)), ), child: Container( width: 24.0, height: 24.0, decoration: BoxDecoration( - color: isDarkMode + color: context.currentTheme.isDark ? Theme.of(context).colorScheme.surface - : CustomThemeColors.toggleKnobStateColorLight, + : context.currentTheme.customColors.toggleKnobStateColor, shape: BoxShape.circle, ), ), diff --git a/lib/src/widgets/template_tile.dart b/lib/src/widgets/template_tile.dart index 879288ce79..3fda11b7cc 100644 --- a/lib/src/widgets/template_tile.dart +++ b/lib/src/widgets/template_tile.dart @@ -1,4 +1,4 @@ -import 'package:cake_wallet/themes/utils/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/core/custom_theme_colors.dart'; import 'package:flutter/material.dart'; class TemplateTile extends StatefulWidget { diff --git a/lib/src/widgets/warning_box_widget.dart b/lib/src/widgets/warning_box_widget.dart index 1068e5519e..184a6c1441 100644 --- a/lib/src/widgets/warning_box_widget.dart +++ b/lib/src/widgets/warning_box_widget.dart @@ -1,11 +1,9 @@ -import 'package:cake_wallet/themes/core/material_base_theme.dart'; -import 'package:cake_wallet/themes/utils/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/core/theme_extension.dart'; import 'package:flutter/material.dart'; class WarningBox extends StatelessWidget { const WarningBox({ required this.content, - required this.currentTheme, this.showBorder = true, this.textColor, this.textAlign, @@ -18,7 +16,6 @@ class WarningBox extends StatelessWidget { }); final String content; - final MaterialThemeBase currentTheme; final bool showBorder; final Color? textColor; final TextAlign? textAlign; @@ -33,15 +30,11 @@ class WarningBox extends StatelessWidget { return Container( padding: padding ?? EdgeInsets.symmetric(horizontal: 12, vertical: 8), decoration: BoxDecoration( - color: currentTheme.isDark - ? CustomThemeColors.warningContainerColorDark - : CustomThemeColors.warningContainerColorLight, + color: context.customColors.warningContainerColor, borderRadius: BorderRadius.all(Radius.circular(12)), border: showBorder ? Border.all( - color: currentTheme.isDark - ? CustomThemeColors.warningOutlineColorDark - : CustomThemeColors.warningOutlineColorLight, + color: context.customColors.warningOutlineColor, width: 2.0, ) : null, @@ -53,8 +46,8 @@ class WarningBox extends StatelessWidget { Icons.warning_amber_rounded, size: iconSize ?? 64, color: textColor ?? Theme.of(context).colorScheme.onSurface, - ), - SizedBox(width:iconSpacing ?? 6), + ), + SizedBox(width: iconSpacing ?? 6), Expanded( child: Text( content, diff --git a/lib/themes/core/custom_theme_colors.dart b/lib/themes/core/custom_theme_colors.dart new file mode 100644 index 0000000000..f0b93f0369 --- /dev/null +++ b/lib/themes/core/custom_theme_colors.dart @@ -0,0 +1,25 @@ +import 'package:flutter/material.dart'; + +/// Abstract interface for theme-specific custom colors +/// Each theme implementation should provide its own custom colors +abstract class CustomThemeColors { + // Warning colors + Color get warningContainerColor; + Color get warningOutlineColor; + + // Background gradient colors + Color get backgroundMainColor; + Color get backgroundGradientColor; + + // Card gradient colors + Color get cardGradientColorPrimary; + Color get cardGradientColorSecondary; + + // Toggle colors + Color get toggleKnobStateColor; + Color get toggleColorOffState; + + // Sync colors (common across themes) + static const syncGreen = Color(0xFFFF12A439); + static const syncYellow = Color(0xFFFFFB84E); +} diff --git a/lib/themes/core/material_base_theme.dart b/lib/themes/core/material_base_theme.dart index 3b99f464e4..41d75c6472 100644 --- a/lib/themes/core/material_base_theme.dart +++ b/lib/themes/core/material_base_theme.dart @@ -1,7 +1,13 @@ import 'package:flutter/material.dart'; +import 'package:cake_wallet/themes/core/custom_theme_colors.dart'; enum ThemeType { light, dark } +abstract interface class ThemeAccentColor { + Color get color; + String get name; +} + /// Abstract base class for theme data in the app. /// This class defines the contract that all theme implementations must follow. abstract class MaterialThemeBase { @@ -32,4 +38,17 @@ abstract class MaterialThemeBase { ThemeData get themeData; bool get isDark => brightness == Brightness.dark; + + /// Custom colors provider for theme-specific colors + CustomThemeColors get customColors; + + /// Theme family identifier for grouping themes with accent colors + String? get themeFamily; + + String? get accentColorId; + + String? get accentColorName; + + /// Whether this theme has accent color variants + bool get hasAccentColors => themeFamily != null; } diff --git a/lib/themes/core/theme_extension.dart b/lib/themes/core/theme_extension.dart new file mode 100644 index 0000000000..823474a345 --- /dev/null +++ b/lib/themes/core/theme_extension.dart @@ -0,0 +1,11 @@ +import 'package:cake_wallet/di.dart'; +import 'package:cake_wallet/themes/core/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/core/material_base_theme.dart'; +import 'package:cake_wallet/themes/core/theme_store.dart'; +import 'package:flutter/material.dart'; + +/// For access to the current theme that we would have had to do a lot of constructor pass down for. +extension ThemeX on BuildContext { + MaterialThemeBase get currentTheme => getIt().currentTheme; + CustomThemeColors get customColors => currentTheme.customColors; +} diff --git a/lib/themes/core/theme_store.dart b/lib/themes/core/theme_store.dart index 687e24e646..0f272f4730 100644 --- a/lib/themes/core/theme_store.dart +++ b/lib/themes/core/theme_store.dart @@ -7,6 +7,7 @@ import 'package:cake_wallet/themes/utils/theme_list.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'material_base_theme.dart'; +import 'package:cake_wallet/themes/theme_classes/black_theme.dart'; part 'theme_store.g.dart'; @@ -20,6 +21,9 @@ abstract class ThemeStoreBase with Store { @observable ThemeMode _themeMode = ThemeMode.system; + @observable + bool _isOled = false; + @computed MaterialThemeBase get currentTheme => _currentTheme; @@ -29,6 +33,38 @@ abstract class ThemeStoreBase with Store { @computed bool get isDarkMode => _currentTheme.isDark; + @computed + bool get isOled => _isOled; + + @computed + bool get hasCustomTheme => sharedPreferences.getInt(PreferencesKey.currentTheme) != null; + + @computed + MaterialThemeBase? get savedCustomTheme { + final raw = sharedPreferences.getInt(PreferencesKey.currentTheme); + return raw != null ? ThemeList.deserialize(raw: raw) : null; + } + + @computed + MaterialThemeBase? get savedDarkTheme { + try { + final raw = sharedPreferences.getInt(PreferencesKey.savedDarkTheme); + return raw != null ? ThemeList.deserialize(raw: raw) : null; + } catch (e) { + return null; + } + } + + @computed + MaterialThemeBase? get savedLightTheme { + try { + final raw = sharedPreferences.getInt(PreferencesKey.savedLightTheme); + return raw != null ? ThemeList.deserialize(raw: raw) : null; + } catch (e) { + return null; + } + } + late SharedPreferences sharedPreferences; @action @@ -37,6 +73,15 @@ abstract class ThemeStoreBase with Store { _currentTheme = theme; await sharedPreferences.setInt(PreferencesKey.currentTheme, theme.raw); + _isOled = theme is BlackTheme ? theme.isOled : false; + await sharedPreferences.setBool(PreferencesKey.blackThemeOled, _isOled); + + // Save preferred themes for system mode + if (theme.isDark) { + await sharedPreferences.setInt(PreferencesKey.savedDarkTheme, theme.raw); + } else { + await sharedPreferences.setInt(PreferencesKey.savedLightTheme, theme.raw); + } } @action @@ -44,11 +89,33 @@ abstract class ThemeStoreBase with Store { if (_themeMode == mode) return; _themeMode = mode; - await _saveThemeModeToPrefs(mode); if (mode == ThemeMode.system) { - setTheme(getThemeFromSystem()); + // We'll always use getThemeFromSystem() for system mode to respect saved themes + await setTheme(getThemeFromSystem()); + return; + } + + if (!hasCustomTheme) return; + + final savedTheme = savedCustomTheme; + if (savedTheme == null) return; + + if (_isThemeCompatibleWithMode(savedTheme, mode)) { + await setTheme(savedTheme); + } + } + + @action + Future setOledEnabled(bool value) async { + if (_isOled == value) return; + _isOled = value; + await sharedPreferences.setBool(PreferencesKey.blackThemeOled, value); + + if (_currentTheme is BlackTheme) { + final current = _currentTheme as BlackTheme; + await setTheme(BlackTheme(current.accentColor, isOled: value)); } } @@ -109,13 +176,22 @@ abstract class ThemeStoreBase with Store { /// Loads the saved theme from SharedPreferences Future loadSavedTheme({bool isFromBackup = false}) async { try { - final savedTheme = sharedPreferences.getInt(PreferencesKey.currentTheme); - if (savedTheme == null) { + _isOled = sharedPreferences.getBool(PreferencesKey.blackThemeOled) ?? false; + final theme = savedCustomTheme; + + if (!hasCustomTheme || theme == null) { await _setSystemTheme(); return; } - final theme = ThemeList.deserialize(raw: savedTheme); + if (theme is BlackTheme) { + final adjusted = BlackTheme(theme.accentColor, isOled: _isOled); + if (_currentTheme != adjusted) { + await setTheme(adjusted); + } + } else if (_currentTheme != theme) { + await setTheme(theme); + } final newThemeMode = _getThemeModeOnStartUp(theme, isFromBackup); @@ -127,16 +203,14 @@ abstract class ThemeStoreBase with Store { if (_themeMode != newThemeMode) { await setThemeMode(newThemeMode); } - - if (_currentTheme != theme) { - await setTheme(theme); - } } catch (e) { await _setSystemTheme(); } } Future _setSystemTheme({bool isNewInstall = false}) async { + if (!isNewInstall && hasCustomTheme) return; + final systemTheme = getThemeFromSystem(); if (_currentTheme != systemTheme) { @@ -145,10 +219,9 @@ abstract class ThemeStoreBase with Store { if (isNewInstall) { await _saveThemeModeToPrefs(ThemeMode.system); - } - - if (_themeMode != ThemeMode.system) { - await setThemeMode(ThemeMode.system); + if (_themeMode != ThemeMode.system) { + await setThemeMode(ThemeMode.system); + } } } @@ -169,6 +242,47 @@ abstract class ThemeStoreBase with Store { MaterialThemeBase getThemeFromSystem() { final systemBrightness = WidgetsBinding.instance.platformDispatcher.platformBrightness; - return systemBrightness == Brightness.dark ? ThemeList.darkTheme : ThemeList.lightTheme; + + if (systemBrightness == Brightness.dark) { + // Prefer saved dark theme when available + try { + final savedDark = savedDarkTheme; + if (savedDark != null) { + if (savedDark is BlackTheme) { + // We'll use the OLED flag from the saved theme itself, not from separate preference + return BlackTheme(savedDark.accentColor, isOled: savedDark.isOled); + } + return savedDark; + } + } catch (_) {} + + // If no saved dark theme, check if current theme is BlackTheme with accent colors + // and preserve it when switching to dark mode + if (_currentTheme is BlackTheme) { + final currentBlackTheme = _currentTheme as BlackTheme; + return BlackTheme(currentBlackTheme.accentColor, isOled: currentBlackTheme.isOled); + } + + return ThemeList.darkTheme; + } + + // Light system preference: prefer saved light theme when available + try { + final savedLight = savedLightTheme; + if (savedLight != null) return savedLight; + } catch (_) {} + return ThemeList.lightTheme; + } + + /// Checks if a theme is compatible with a theme mode + bool _isThemeCompatibleWithMode(MaterialThemeBase theme, ThemeMode mode) { + switch (mode) { + case ThemeMode.light: + return !theme.isDark; + case ThemeMode.dark: + return theme.isDark; + case ThemeMode.system: + return true; // All themes are compatible with system mode + } } } diff --git a/lib/themes/custom_theme_colors/black_theme_custom_colors.dart b/lib/themes/custom_theme_colors/black_theme_custom_colors.dart new file mode 100644 index 0000000000..df86361a97 --- /dev/null +++ b/lib/themes/custom_theme_colors/black_theme_custom_colors.dart @@ -0,0 +1,28 @@ +import 'dart:ui'; +import 'package:cake_wallet/themes/core/custom_theme_colors.dart'; + +class BlackThemeCustomColors extends CustomThemeColors { + @override + Color get warningContainerColor => const Color(0xFF8E5800); + + @override + Color get warningOutlineColor => const Color(0xFFFFB84E); + + @override + Color get backgroundMainColor => const Color(0xFF000000); + + @override + Color get backgroundGradientColor => const Color(0xFF000000); + + @override + Color get cardGradientColorPrimary => const Color(0xFF202023); + + @override + Color get cardGradientColorSecondary => const Color(0xFF181819); + + @override + Color get toggleKnobStateColor => const Color(0xFFFFFFFF); + + @override + Color get toggleColorOffState => const Color(0xFF2B292B); +} diff --git a/lib/themes/custom_theme_colors/dark_theme_custom_colors.dart b/lib/themes/custom_theme_colors/dark_theme_custom_colors.dart new file mode 100644 index 0000000000..d8975bbe8b --- /dev/null +++ b/lib/themes/custom_theme_colors/dark_theme_custom_colors.dart @@ -0,0 +1,28 @@ +import 'dart:ui'; +import 'package:cake_wallet/themes/core/custom_theme_colors.dart'; + +class DarkThemeCustomColors extends CustomThemeColors { + @override + Color get warningContainerColor => const Color(0xFF8E5800); + + @override + Color get warningOutlineColor => const Color(0xFFFFB84E); + + @override + Color get backgroundMainColor => const Color(0xFF000000); + + @override + Color get backgroundGradientColor => const Color(0xFF0F1A36); + + @override + Color get cardGradientColorPrimary => const Color(0xFF2B3A67); + + @override + Color get cardGradientColorSecondary => const Color(0xFF1C2A4F); + + @override + Color get toggleKnobStateColor => const Color(0xFFFFFFFF); + + @override + Color get toggleColorOffState => const Color(0xFF3A4F88); +} diff --git a/lib/themes/custom_theme_colors/light_theme_custom_colors.dart b/lib/themes/custom_theme_colors/light_theme_custom_colors.dart new file mode 100644 index 0000000000..98fb1f1547 --- /dev/null +++ b/lib/themes/custom_theme_colors/light_theme_custom_colors.dart @@ -0,0 +1,28 @@ +import 'dart:ui'; +import 'package:cake_wallet/themes/core/custom_theme_colors.dart'; + +class LightThemeCustomColors extends CustomThemeColors { + @override + Color get warningContainerColor => const Color(0xFFFFCC00); + + @override + Color get warningOutlineColor => const Color(0xFF312938); + + @override + Color get backgroundMainColor => const Color(0xFF000000); + + @override + Color get backgroundGradientColor => const Color(0xFFE7E7FD); + + @override + Color get cardGradientColorPrimary => const Color(0xFFFFFFFF); + + @override + Color get cardGradientColorSecondary => const Color(0xFFF3F3FF); + + @override + Color get toggleKnobStateColor => const Color(0xFFFFFFFF); + + @override + Color get toggleColorOffState => const Color(0xFFCACAE7); +} diff --git a/lib/themes/theme_classes/black_theme.dart b/lib/themes/theme_classes/black_theme.dart new file mode 100644 index 0000000000..336e942404 --- /dev/null +++ b/lib/themes/theme_classes/black_theme.dart @@ -0,0 +1,299 @@ +import 'package:flutter/material.dart'; +import 'package:cake_wallet/themes/core/material_base_theme.dart'; +import 'package:cake_wallet/themes/core/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/custom_theme_colors/black_theme_custom_colors.dart'; + +enum BlackThemeAccentColor implements ThemeAccentColor { + cakePrimary(Color(0xFF52B6F0), 'Cake Primary'), + bchGreen(Color(0xFF44BA52), 'BCH Green'), + bitcoinYellow(Color(0xFFFFC107), 'Bitcoin Yellow'), + moneroOrange(Color(0xFFFF6600), 'Monero Orange'), + tronRed(Color(0xFFFF4242), 'Tron Red'), + frostingPurple(Color(0xFFBABAF3), 'Frosting Purple'); + + const BlackThemeAccentColor(this.color, this.name); + + @override + final Color color; + + @override + final String name; +} + +class BlackTheme extends MaterialThemeBase { + BlackTheme(this.accentColor, {this.isOled = false}); + + final BlackThemeAccentColor accentColor; + final bool isOled; + + @override + Brightness get brightness => Brightness.dark; + + @override + ThemeMode get themeMode => ThemeMode.dark; + + @override + Color get primaryColor => accentColor.color; + + @override + Color get secondaryColor => const Color(0xFFCCC4CD); + + @override + Color get errorColor => const Color(0xFFFFB4AB); + + @override + Color get surfaceColor => isOled ? const Color(0xFF000000) : const Color(0xFF131314); + + @override + Color get tertiaryColor => const Color(0xFFDEBFC5); + + @override + ColorScheme get colorScheme => ColorScheme.dark( + primary: primaryColor, + onPrimary: const Color(0xFF352D3C), + primaryContainer: const Color(0xFF28212F), + onPrimaryContainer: const Color(0xFFB7ABBE), + secondary: secondaryColor, + onSecondary: const Color(0xFF332F36), + secondaryContainer: const Color(0xFF454148), + onSecondaryContainer: const Color(0xFFDFD6DF), + tertiary: tertiaryColor, + onTertiary: const Color(0xFF3F2B30), + tertiaryContainer: const Color(0xFF321F24), + onTertiaryContainer: const Color(0xFFC6A8AE), + error: errorColor, + onError: const Color(0xFFB71919), + errorContainer: const Color(0xFFC53636), + onErrorContainer: const Color(0xFFFFDAD6), + surface: surfaceColor, + background: surfaceColor, + onSurface: const Color(0xFFE6E1E3), + onSurfaceVariant: const Color(0xFFB4B4B4), + surfaceContainerLowest: isOled ? const Color(0xFF000000) : const Color(0xFF0F0E0F), + surfaceContainerLow: Color(0xFF1C1B1C), + surfaceContainer: Color(0xFF211F20), + surfaceContainerHigh: Color(0xFF2B292B), + surfaceContainerHighest: Color(0xFF363435), + outline: const Color(0xFF958F95), + outlineVariant: const Color(0xFF49454B), + ); + + static const String fontFamily = 'Lato'; + + @override + TextTheme get textTheme => TextTheme( + displayLarge: TextStyle( + fontSize: 57, + fontWeight: FontWeight.w400, + letterSpacing: -0.25, + color: colorScheme.onSurface, + ), + displayMedium: TextStyle( + fontSize: 45, + fontWeight: FontWeight.w400, + letterSpacing: 0, + color: colorScheme.onSurface, + ), + displaySmall: TextStyle( + fontSize: 36, + fontWeight: FontWeight.w400, + letterSpacing: 0, + color: colorScheme.onSurface, + ), + headlineLarge: TextStyle( + fontSize: 32, + fontWeight: FontWeight.w400, + letterSpacing: 0, + color: colorScheme.onSurface, + ), + headlineMedium: TextStyle( + fontSize: 28, + fontWeight: FontWeight.w400, + letterSpacing: 0, + color: colorScheme.onSurface, + ), + headlineSmall: TextStyle( + fontSize: 24, + fontWeight: FontWeight.w400, + letterSpacing: 0, + color: colorScheme.onSurface, + ), + titleLarge: TextStyle( + fontSize: 22, + fontWeight: FontWeight.w400, + letterSpacing: 0, + color: colorScheme.onSurface, + ), + titleMedium: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + letterSpacing: 0.15, + color: colorScheme.onSurface, + ), + titleSmall: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + letterSpacing: 0.1, + color: colorScheme.onSurface, + ), + bodyLarge: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w400, + letterSpacing: 0.5, + color: colorScheme.onSurface, + ), + bodyMedium: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w400, + letterSpacing: 0.25, + color: colorScheme.onSurface, + ), + bodySmall: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w400, + letterSpacing: 0.4, + color: colorScheme.onSurface, + ), + labelLarge: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + letterSpacing: 0.1, + color: colorScheme.onSurface, + ), + labelMedium: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w500, + letterSpacing: 0.5, + color: colorScheme.onSurface, + ), + labelSmall: TextStyle( + fontSize: 10, + fontWeight: FontWeight.w500, + letterSpacing: 0.5, + color: colorScheme.onSurface, + ), + ); + + @override + ThemeData get themeData => ThemeData( + useMaterial3: true, + fontFamily: fontFamily, + brightness: brightness, + colorScheme: colorScheme, + scaffoldBackgroundColor: surfaceColor, + canvasColor: surfaceColor, + cardColor: colorScheme.surface, + textTheme: textTheme, + appBarTheme: AppBarTheme( + backgroundColor: surfaceColor, + foregroundColor: colorScheme.onSurface, + elevation: 0, + ), + cardTheme: CardThemeData( + color: colorScheme.surface, + elevation: 1, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + ), + elevatedButtonTheme: ElevatedButtonThemeData( + style: ElevatedButton.styleFrom( + backgroundColor: colorScheme.primary, + foregroundColor: colorScheme.onPrimary, + elevation: 0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + ), + ), + ), + outlinedButtonTheme: OutlinedButtonThemeData( + style: OutlinedButton.styleFrom( + foregroundColor: colorScheme.primary, + side: BorderSide(color: colorScheme.outline), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + ), + ), + ), + textButtonTheme: TextButtonThemeData( + style: TextButton.styleFrom( + foregroundColor: colorScheme.primary, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + ), + ), + ), + inputDecorationTheme: InputDecorationTheme( + filled: true, + fillColor: colorScheme.surfaceContainer, + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: BorderSide.none, + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: BorderSide.none, + ), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: BorderSide(color: colorScheme.primary), + ), + errorBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: BorderSide(color: colorScheme.error), + ), + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: BorderSide(color: colorScheme.error), + ), + disabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: BorderSide.none, + ), + ), + ); + + @override + String get title => 'Black Theme (${accentColor.name})'; + + @override + ThemeType get type => ThemeType.dark; + + @override + int get raw { + final baseValue = switch (accentColor) { + BlackThemeAccentColor.cakePrimary => 12, + BlackThemeAccentColor.bchGreen => 13, + BlackThemeAccentColor.bitcoinYellow => 14, + BlackThemeAccentColor.moneroOrange => 15, + BlackThemeAccentColor.tronRed => 16, + BlackThemeAccentColor.frostingPurple => 17, + }; + if (!isOled) return baseValue; + // OLED encodes as 100 + base to avoid collisions + return 100 + baseValue; + } + + @override + CustomThemeColors get customColors => BlackThemeCustomColors(); + + @override + String? get themeFamily => 'BlackTheme'; + + @override + String? get accentColorId => accentColor.name.toLowerCase(); + + @override + String? get accentColorName => accentColor.name; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is BlackTheme && + runtimeType == other.runtimeType && + accentColor == other.accentColor && + isOled == other.isOled; + + @override + int get hashCode => Object.hash(accentColor, isOled); +} diff --git a/lib/themes/theme_classes/dark_theme.dart b/lib/themes/theme_classes/dark_theme.dart index c047a97954..ade19e5e75 100644 --- a/lib/themes/theme_classes/dark_theme.dart +++ b/lib/themes/theme_classes/dark_theme.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; import 'package:cake_wallet/themes/core/material_base_theme.dart'; +import 'package:cake_wallet/themes/core/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/custom_theme_colors/dark_theme_custom_colors.dart'; class DarkTheme extends MaterialThemeBase { @override @@ -47,8 +49,8 @@ class DarkTheme extends MaterialThemeBase { surfaceContainerLowest: Color(0xFF171C30), surfaceContainerLow: Color(0xFF2D385C), surfaceContainer: Color(0xFF24335B), - surfaceContainerHigh: Color(0xFF212C47), - surfaceContainerHighest: Color(0xFF2A3B67), + surfaceContainerHigh: Color(0xFF2A3E73), + surfaceContainerHighest: Color(0xFF334C8C), outline: const Color(0xFF9EACC1), outlineVariant: const Color(0xFF3E5579), ); @@ -231,4 +233,16 @@ class DarkTheme extends MaterialThemeBase { @override int get raw => 1; + + @override + CustomThemeColors get customColors => DarkThemeCustomColors(); + + @override + String? get themeFamily => null; + + @override + String? get accentColorId => null; + + @override + String? get accentColorName => null; } diff --git a/lib/themes/theme_classes/light_theme.dart b/lib/themes/theme_classes/light_theme.dart index 5248815fb3..e9b28f9e45 100644 --- a/lib/themes/theme_classes/light_theme.dart +++ b/lib/themes/theme_classes/light_theme.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; import 'package:cake_wallet/themes/core/material_base_theme.dart'; +import 'package:cake_wallet/themes/core/custom_theme_colors.dart'; +import 'package:cake_wallet/themes/custom_theme_colors/light_theme_custom_colors.dart'; class LightTheme extends MaterialThemeBase { @override @@ -228,4 +230,16 @@ class LightTheme extends MaterialThemeBase { @override int get raw => 0; + + @override + CustomThemeColors get customColors => LightThemeCustomColors(); + + @override + String? get themeFamily => null; + + @override + String? get accentColorId => null; + + @override + String? get accentColorName => null; } diff --git a/lib/themes/utils/custom_theme_colors.dart b/lib/themes/utils/custom_theme_colors.dart deleted file mode 100644 index 54f823fc76..0000000000 --- a/lib/themes/utils/custom_theme_colors.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'dart:ui'; - -class CustomThemeColors { - static const syncGreen = Color(0xFFFF12A439); - static const syncYellow = Color(0xFFFFFB84E); - - static const warningOutlineColorDark = Color(0xFFFFB84E); - static const warningContainerColorDark = Color(0xFF8E5800); - static const warningContainerColorLight = Color(0xFFFFCC00); - static const warningOutlineColorLight = Color(0xFF312938); - - static const backgroundGradientColorDark = Color(0xFF0F1A36); - static const backgroundGradientColorLight = Color(0xFFE7E7FD); - - static const cardGradientColorPrimaryDark = Color(0xFF2B3A67); - static const cardGradientColorPrimaryLight = Color(0xFFFFFFFF); - static const cardGradientColorSecondaryDark = Color(0xFF1C2A4F); - static const cardGradientColorSecondaryLight = Color(0xFFF3F3FF); - - static const toggleKnobStateColorLight = Color(0xFFFFFFFF); - static const toggleColorOffStateLight = Color(0xFFCACAE7); - static const toggleColorOffStateDark = Color(0xFF3A4F88); -} diff --git a/lib/themes/utils/theme_list.dart b/lib/themes/utils/theme_list.dart index 32c6805a7d..4b9f925463 100644 --- a/lib/themes/utils/theme_list.dart +++ b/lib/themes/utils/theme_list.dart @@ -1,16 +1,59 @@ import 'package:cake_wallet/themes/core/material_base_theme.dart'; import 'package:cake_wallet/themes/theme_classes/dark_theme.dart'; import 'package:cake_wallet/themes/theme_classes/light_theme.dart'; +import 'package:cake_wallet/themes/theme_classes/black_theme.dart'; class ThemeList { static final all = [ darkTheme, lightTheme, + blackThemeCakePrimary, + blackThemeBCHGreen, + blackThemeBitcoinYellow, + blackThemeMoneroOrange, + blackThemeTronRed, + blackThemeFrostingPurple, ]; static final lightTheme = LightTheme(); static final darkTheme = DarkTheme(); + static final blackThemeCakePrimary = BlackTheme(BlackThemeAccentColor.cakePrimary); + static final blackThemeCakePrimaryOled = BlackTheme( + BlackThemeAccentColor.cakePrimary, + isOled: true, + ); + + static final blackThemeBitcoinYellow = BlackTheme(BlackThemeAccentColor.bitcoinYellow); + static final blackThemeBitcoinYellowOled = BlackTheme( + BlackThemeAccentColor.bitcoinYellow, + isOled: true, + ); + + static final blackThemeMoneroOrange = BlackTheme(BlackThemeAccentColor.moneroOrange); + static final blackThemeMoneroOrangeOled = BlackTheme( + BlackThemeAccentColor.moneroOrange, + isOled: true, + ); + + static final blackThemeBCHGreen = BlackTheme(BlackThemeAccentColor.bchGreen); + static final blackThemeBCHGreenOled = BlackTheme( + BlackThemeAccentColor.bchGreen, + isOled: true, + ); + + static final blackThemeTronRed = BlackTheme(BlackThemeAccentColor.tronRed); + static final blackThemeTronRedOled = BlackTheme( + BlackThemeAccentColor.tronRed, + isOled: true, + ); + + static final blackThemeFrostingPurple = BlackTheme(BlackThemeAccentColor.frostingPurple); + static final blackThemeFrostingPurpleOled = BlackTheme( + BlackThemeAccentColor.frostingPurple, + isOled: true, + ); + static MaterialThemeBase deserialize({required int raw}) { switch (raw) { case 0: @@ -26,8 +69,33 @@ class ThemeList { case 6: case 8: case 9: - default: return darkTheme; + case 12: + return blackThemeCakePrimary; + case 13: + return blackThemeBCHGreen; + case 14: + return blackThemeBitcoinYellow; + case 15: + return blackThemeMoneroOrange; + case 16: + return blackThemeTronRed; + case 17: + return blackThemeFrostingPurple; + case 112: + return blackThemeCakePrimaryOled; + case 113: + return blackThemeBCHGreenOled; + case 114: + return blackThemeBitcoinYellowOled; + case 115: + return blackThemeMoneroOrangeOled; + case 116: + return blackThemeTronRedOled; + case 117: + return blackThemeFrostingPurpleOled; + default: + return blackThemeCakePrimary; } } } diff --git a/lib/themes/utils/theme_provider.dart b/lib/themes/utils/theme_provider.dart index 89cf05d851..58a66e2359 100644 --- a/lib/themes/utils/theme_provider.dart +++ b/lib/themes/utils/theme_provider.dart @@ -1,5 +1,6 @@ import 'package:cake_wallet/themes/core/theme_store.dart'; import 'package:cake_wallet/themes/utils/theme_list.dart'; +import 'package:cake_wallet/themes/theme_classes/black_theme.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; @@ -19,10 +20,16 @@ class ThemeProvider extends StatelessWidget { Widget build(BuildContext context) { return Observer( builder: (_) { - final theme = themeStore.currentTheme.themeData; - final darkTheme = ThemeList.darkTheme.themeData; + final currentTheme = themeStore.currentTheme; + final theme = currentTheme.themeData; final themeMode = themeStore.themeMode; + final isCustomTheme = ThemeList.all.contains(currentTheme) || currentTheme is BlackTheme; + if (isCustomTheme) { + return materialAppBuilder(context, theme, theme, themeMode); + } + + final darkTheme = ThemeList.darkTheme.themeData; return materialAppBuilder(context, theme, darkTheme, themeMode); }, ); diff --git a/lib/view_model/buy/buy_sell_view_model.dart b/lib/view_model/buy/buy_sell_view_model.dart index 1874fe39ef..601fca5240 100644 --- a/lib/view_model/buy/buy_sell_view_model.dart +++ b/lib/view_model/buy/buy_sell_view_model.dart @@ -78,8 +78,6 @@ abstract class BuySellViewModelBase extends WalletChangeListenerViewModel with S cryptoCurrency = wallet.currency; } - bool get isDarkTheme => _appStore.themeStore.currentTheme.isDark; - double get amount { final formattedFiatAmount = double.tryParse(fiatAmount) ?? 200.0; final formattedCryptoAmount = diff --git a/lib/view_model/exchange/exchange_view_model.dart b/lib/view_model/exchange/exchange_view_model.dart index aa18d877ac..390a0bec4a 100644 --- a/lib/view_model/exchange/exchange_view_model.dart +++ b/lib/view_model/exchange/exchange_view_model.dart @@ -549,7 +549,7 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with if (result[i] != 0) { /// add this provider as its valid for this trade try { - newSortedProviders[result[i]] = _providers[i]; + newSortedProviders[result[i]] = _providers[i]; } catch (e) { // will throw "Concurrent modification during iteration" error if modified at the same // time [createTrade] is called, as this is not a normal map, but a sorted map diff --git a/lib/view_model/settings/display_settings_view_model.dart b/lib/view_model/settings/display_settings_view_model.dart index c3c4209028..02500083ab 100644 --- a/lib/view_model/settings/display_settings_view_model.dart +++ b/lib/view_model/settings/display_settings_view_model.dart @@ -3,6 +3,8 @@ import 'package:cake_wallet/entities/fiat_currency.dart'; import 'package:cake_wallet/entities/sync_status_display_mode.dart'; import 'package:cake_wallet/store/settings_store.dart'; import 'package:cake_wallet/themes/core/material_base_theme.dart'; +import 'package:cake_wallet/themes/theme_classes/black_theme.dart'; +import 'package:cake_wallet/themes/utils/theme_list.dart'; import 'package:mobx/mobx.dart'; import 'package:cake_wallet/entities/fiat_api_mode.dart'; import 'package:cake_wallet/themes/core/theme_store.dart'; @@ -34,11 +36,14 @@ abstract class DisplaySettingsViewModelBase with Store { bool get shouldShowMarketPlaceInDashboard => _settingsStore.shouldShowMarketPlaceInDashboard; @computed - ThemeData get theme => _themeStore.currentTheme.themeData; + MaterialThemeBase get currentTheme => _themeStore.currentTheme; @computed ThemeMode get themeMode => _themeStore.themeMode; + @computed + bool get isBlackThemeOledEnabled => _themeStore.currentTheme is BlackTheme && _themeStore.isOled; + @computed bool get disabledFiatApiMode => _settingsStore.fiatApiMode == FiatApiMode.disabled; @@ -51,6 +56,50 @@ abstract class DisplaySettingsViewModelBase with Store { @computed String get backgroundImage => _settingsStore.backgroundImage; + @computed + List get availableThemes { + List themes; + switch (themeMode) { + case ThemeMode.light: + themes = ThemeList.all.where((theme) => theme.brightness == Brightness.light).toList(); + break; + case ThemeMode.dark: + themes = ThemeList.all.where((theme) => theme.brightness == Brightness.dark).toList(); + break; + case ThemeMode.system: + final systemBrightness = WidgetsBinding.instance.platformDispatcher.platformBrightness; + themes = ThemeList.all.where((theme) => theme.brightness == systemBrightness).toList(); + break; + } + + List groupedThemes = []; + Set addedThemeFamilies = {}; + + for (final theme in themes) { + if (theme.hasAccentColors) { + final family = theme.themeFamily!; + if (!addedThemeFamilies.contains(family)) { + groupedThemes.add(theme); + addedThemeFamilies.add(family); + } + } else { + groupedThemes.add(theme); + } + } + + return groupedThemes; + } + + @computed + List get availableAccentColors { + if (!currentTheme.hasAccentColors) return []; + + if (currentTheme.themeFamily == 'BlackTheme') { + return BlackThemeAccentColor.values; + } + return []; + } + @action void setBalanceDisplayMode(BalanceDisplayMode value) => _settingsStore.balanceDisplayMode = value; @@ -70,8 +119,52 @@ abstract class DisplaySettingsViewModelBase with Store { @action Future onThemeSelected(MaterialThemeBase newTheme) async { + if (newTheme is BlackTheme && _themeStore.isOled) { + await setTheme(BlackTheme(newTheme.accentColor, isOled: true)); + return; + } await setTheme(newTheme); - await setThemeMode(newTheme.themeMode); + } + + @action + Future onAccentColorSelected(String accentColorId) async { + if (!currentTheme.hasAccentColors) return; + + try { + final newTheme = ThemeList.all.firstWhere( + (theme) => + theme.hasAccentColors && + theme.themeFamily == currentTheme.themeFamily && + theme.accentColorId == accentColorId, + ); + + if (newTheme != currentTheme) { + if (newTheme is BlackTheme && _themeStore.isOled) { + await onThemeSelected(BlackTheme(newTheme.accentColor, isOled: true)); + } else { + await onThemeSelected(newTheme); + } + } + } catch (_) {} + } + + @action + Future setBlackThemeOled(bool value) async { + if (_themeStore.currentTheme is BlackTheme) { + await _themeStore.setOledEnabled(value); + } + } + + bool isThemeSelected(MaterialThemeBase theme) { + if (!theme.hasAccentColors) return currentTheme == theme; + + return currentTheme.hasAccentColors && currentTheme.themeFamily == theme.themeFamily; + } + + bool isAccentColorSelected(String accentColorId) { + if (!currentTheme.hasAccentColors) return false; + + return currentTheme.accentColorId == accentColorId; } @action @@ -79,9 +172,35 @@ abstract class DisplaySettingsViewModelBase with Store { await _themeStore.setTheme(newTheme); } + MaterialThemeBase? getFirstMatchingTheme(ThemeMode mode) { + List themes; + switch (mode) { + case ThemeMode.light: + themes = ThemeList.all.where((theme) => theme.brightness == Brightness.light).toList(); + break; + case ThemeMode.dark: + themes = ThemeList.all.where((theme) => theme.brightness == Brightness.dark).toList(); + break; + case ThemeMode.system: + final systemBrightness = WidgetsBinding.instance.platformDispatcher.platformBrightness; + themes = ThemeList.all.where((theme) => theme.brightness == systemBrightness).toList(); + break; + } + + return themes.isNotEmpty ? themes.first : null; + } + @action Future setThemeMode(ThemeMode value) async { await _themeStore.setThemeMode(value); + // We won't override the saved custom theme when switching to system mode. + // We'll just let the ThemeStore resolve it based on system brightness and saved theme. + if (value != ThemeMode.system) { + final matchingTheme = getFirstMatchingTheme(value); + if (matchingTheme != null) { + await setTheme(matchingTheme); + } + } } @action @@ -101,4 +220,22 @@ abstract class DisplaySettingsViewModelBase with Store { @action void setBackgroundImage(String path) => _settingsStore.backgroundImage = path; + + String getImageForTheme(MaterialThemeBase theme) { + switch (theme.title) { + case 'Dark Theme': + return 'assets/images/dark.svg'; + case 'Light Theme': + return 'assets/images/light.svg'; + case 'Black Theme (Cake Primary)': + case 'Black Theme (BCH Green)': + case 'Black Theme (Bitcoin Yellow)': + case 'Black Theme (Monero Orange)': + case 'Black Theme (Tron Red)': + case 'Black Theme (Frosting Purple)': + return 'assets/images/black_accent.svg'; + default: + return 'assets/images/dark.svg'; + } + } } diff --git a/pubspec_base.yaml b/pubspec_base.yaml index 5a6072b4a4..eef7039e69 100644 --- a/pubspec_base.yaml +++ b/pubspec_base.yaml @@ -105,7 +105,7 @@ dependencies: git: url: https://github.com/LacticWhale/socks_dart ref: 27ad7c2efae8d7460325c74b90f660085cbd0685 - flutter_svg: ^2.0.9 + flutter_svg: ^2.2.0 polyseed: ^0.0.7 nostr_tools: git: @@ -215,6 +215,7 @@ flutter: - assets/images/ - assets/images/flags/ - assets/images/hardware_wallet/ + - assets/images/crypto/ - assets/node_list.yml - assets/haven_node_list.yml - assets/bitcoin_electrum_server_list.yml diff --git a/res/values/strings_ar.arb b/res/values/strings_ar.arb index bf05dc5940..f4c102c006 100644 --- a/res/values/strings_ar.arb +++ b/res/values/strings_ar.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "يتيح لك Cake Pay شراء بطاقات هدايا بأصول افتراضية بسهولة ، ويمكن إنفاقها على الفور لدى أكثر من 150,000 تاجر في الولايات المتحدة.", + "accent_color": "لون لهجة", "account": "حساب", "accounts": "حسابتي", "accounts_subaddresses": "الحسابات والعناوين الفرعية", @@ -55,6 +56,7 @@ "and": "و", "anonpay_description": "توليد ${type}. يمكن للمستلم ${method} بأي عملة مشفرة مدعومة ، وستتلقى أموالاً في هذه", "apk_update": "تحديث APK", + "appearance": "مظهر", "approve": "ﺪﻤﺘﻌﻳ", "approve_request": "الموافقة على الطلب", "approve_tokens": "الموافقة على الرموز", @@ -568,6 +570,7 @@ "offline": "غير متصل على الانترنت", "ok": "حسناً", "old_fee": "الرسوم القديمة", + "oled_mode": "وضع OLED", "onion_link": "رابط البصل", "online": "متصل", "onramper_option_description": "شراء بسرعة التشفير مع العديد من طرق الدفع. متوفر في معظم البلدان. ينتشر وتختلف الرسوم.", @@ -1149,4 +1152,4 @@ "youCanGoBackToYourDapp": "يمكنك العودة إلى DAPP الخاص بك الآن", "your": "لك", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_bg.arb b/res/values/strings_bg.arb index b42f18a8f3..0fb5c6db6e 100644 --- a/res/values/strings_bg.arb +++ b/res/values/strings_bg.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Cake Pay Ви позволява лесно да купувате предплатени карти, които веднага могат да се използват с над 150,000 търговци на територията на САЩ.", + "accent_color": "Цвят на акцент", "account": "Профил", "accounts": "Профили", "accounts_subaddresses": "Профили и подадреси", @@ -55,6 +56,7 @@ "and": "и", "anonpay_description": "Генерирайте ${type}. Получателят може да ${method} с всяка поддържана криптовалута и вие ще получите средства в този портфейл.", "apk_update": "APK ъпдейт", + "appearance": "Външен вид", "approve": "Одобряване", "approve_request": "Одобрете искане", "approve_tokens": "Одобрете жетоните", @@ -568,6 +570,7 @@ "offline": "Офлайн", "ok": "Ок", "old_fee": "Стара такса", + "oled_mode": "OLED режим", "onion_link": "Лукова връзка", "online": "Онлайн", "onramper_option_description": "Бързо купувайте криптовалута с много методи за плащане. Предлага се в повечето страни. Разпространенията и таксите варират.", @@ -1149,4 +1152,4 @@ "youCanGoBackToYourDapp": "Можете да се върнете при вашия Dapp сега", "your": "Вашия", "yy": "гг" -} +} \ No newline at end of file diff --git a/res/values/strings_cs.arb b/res/values/strings_cs.arb index 996d23c87f..334c2a85d0 100644 --- a/res/values/strings_cs.arb +++ b/res/values/strings_cs.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Cake Pay umožňuje jednoduše nakupovat dárkové karty pomocí virtuálních prostředků, které lze okamžitě uplatnit u více než 150 000 obchodníků ve Spojených státech.", + "accent_color": "Accent Color", "account": "Účet", "accounts": "Účty", "accounts_subaddresses": "Účty a subadresy", @@ -55,6 +56,7 @@ "and": "a", "anonpay_description": "Vygenerujte ${type}. Příjemce může ${method} s jakoukoli podporovanou kryptoměnou a vy obdržíte prostředky v této peněžence.", "apk_update": "aktualizace APK", + "appearance": "Vzhled", "approve": "Schvalovat", "approve_request": "Schválit žádost", "approve_tokens": "Schválit tokeny", @@ -568,6 +570,7 @@ "offline": "Offline", "ok": "OK", "old_fee": "Starý poplatek", + "oled_mode": "OLED režim", "onion_link": "Cibulový odkaz", "online": "Online", "onramper_option_description": "Rychle si koupte krypto s mnoha metodami plateb. K dispozici ve většině zemí. Rozpětí a poplatky se liší.", @@ -1149,4 +1152,4 @@ "youCanGoBackToYourDapp": "Nyní se můžete vrátit do svého dappu", "your": "Vaše", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index f7f3b63688..eb590b2162 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Mit Cake Pay können Sie ganz einfach Geschenkkarten mit virtuellen Vermögenswerten kaufen, die Sie sofort bei über 150.000 Händlern in den Vereinigten Staaten ausgeben können.", + "accent_color": "Akzentfarbe", "account": "Konto", "accounts": "Konten", "accounts_subaddresses": "Konten und Unteradressen", @@ -55,6 +56,7 @@ "and": "Und", "anonpay_description": "Generieren Sie ${type}. Der Empfänger kann ${method} mit jeder unterstützten Kryptowährung verwenden, und Sie erhalten Geld in dieser Wallet.", "apk_update": "APK-Update", + "appearance": "Aussehen", "approve": "Genehmigen", "approve_request": "Anfrage genehmigen", "approve_tokens": "Token genehmigen", @@ -568,6 +570,7 @@ "offline": "offline", "ok": "OK", "old_fee": "Alte Gebühr", + "oled_mode": "OLED -Modus", "onion_link": "Onion-Link", "online": "online", "onramper_option_description": "Kaufen Sie schnell Krypto mit vielen Zahlungsmethoden. In den meisten Ländern erhältlich. Spreads und Gebühren variieren.", @@ -1152,4 +1155,4 @@ "youCanGoBackToYourDapp": "Sie können jetzt zu Ihrem Dapp zurückkehren", "your": "Dein", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 135214db8d..2848ce61ed 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Cake Pay allows you to easily buy gift cards with virtual assets, spendable instantly at over 150,000 merchants in the United States.", + "accent_color": "Accent color", "account": "Account", "accounts": "Accounts", "accounts_subaddresses": "Accounts and subaddresses", @@ -55,6 +56,7 @@ "and": "and", "anonpay_description": "Generate ${type}. The recipient can ${method} with any supported cryptocurrency, and you will receive funds in this wallet.", "apk_update": "APK update", + "appearance": "Appearance", "approve": "Approve", "approve_request": "Approve Request", "approve_tokens": "Approve tokens", @@ -568,6 +570,7 @@ "offline": "Offline", "ok": "OK", "old_fee": "Old fee", + "oled_mode": "OLED mode", "onion_link": "Onion link", "online": "Online", "onramper_option_description": "Quickly buy crypto with many payment methods. Available in most countries. Spreads and fees vary.", @@ -1150,4 +1153,4 @@ "youCanGoBackToYourDapp": "You can go back to your dApp now", "your": "Your", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 31cd806b88..834c849f18 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Cake Pay te permite comprar fácilmente tarjetas de regalo con activos virtuales, gastables instantáneamente en más de 150,000 comerciantes en los Estados Unidos.", + "accent_color": "Color acento", "account": "Cuenta", "accounts": "Cuentas", "accounts_subaddresses": "Cuentas y subdirecciones", @@ -55,6 +56,7 @@ "and": "y", "anonpay_description": "Genera ${type}. El destinatario puede ${method} con cualquier criptomoneda admitida, y recibirá fondos en esta billetera.", "apk_update": "Actualización de APK", + "appearance": "Apariencia", "approve": "Aprobar", "approve_request": "Aprobar la solicitud", "approve_tokens": "Aprobar tokens", @@ -568,6 +570,7 @@ "offline": "fuera de línea", "ok": "OK", "old_fee": "Tarifa antigua", + "oled_mode": "Modo OLED", "onion_link": "Enlace de cebolla (Tor)", "online": "En línea", "onramper_option_description": "Compra rápidamente cripto con muchos métodos de pago. Disponible en la mayoría de los países. Los diferenciales y las tarifas varían.", @@ -1151,4 +1154,4 @@ "youCanGoBackToYourDapp": "Puedes volver a tu dapp ahora", "your": "Su", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index 6cdfb85027..c1f54b3638 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Cake Pay vous permet d'acheter facilement des cartes-cadeaux avec des actifs virtuels, utilisables instantanément chez plus de 150 000 marchands aux États-Unis.", + "accent_color": "Couleur accent", "account": "Compte", "accounts": "Comptes", "accounts_subaddresses": "Comptes et sous-adresses", @@ -55,6 +56,7 @@ "and": "et", "anonpay_description": "Générez ${type}. Le destinataire peut ${method} avec n'importe quelle crypto-monnaie prise en charge, et vous recevrez des fonds dans ce portefeuille (wallet).", "apk_update": "Mise à jour de l'APK", + "appearance": "Apparence", "approve": "Approuver", "approve_request": "Approuver la demande", "approve_tokens": "Approuver les jetons", @@ -568,6 +570,7 @@ "offline": "Hors ligne", "ok": "OK", "old_fee": "Anciens", + "oled_mode": "Mode OLED", "onion_link": "Lien .onion", "online": "En ligne", "onramper_option_description": "Achetez rapidement des cryptomonnaies avec de nombreuses méthodes de paiement. Disponible dans la plupart des pays. Les spreads et les frais peuvent varier.", @@ -1149,4 +1152,4 @@ "youCanGoBackToYourDapp": "Vous pouvez retourner à votre Dapp maintenant", "your": "Ton", "yy": "AA" -} +} \ No newline at end of file diff --git a/res/values/strings_ha.arb b/res/values/strings_ha.arb index a492d49237..e9069a4299 100644 --- a/res/values/strings_ha.arb +++ b/res/values/strings_ha.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Biyan Cake yana ba ku damar sauƙin siyan katunan kyauta tare da kadarorin kama-da-wane, wanda za'a iya kashewa nan take a sama da yan kasuwa 150,000 a Amurka.", + "accent_color": "Launi mai launi", "account": "Asusu", "accounts": "Lissafi", "accounts_subaddresses": "Accounts da subaddresses", @@ -55,6 +56,7 @@ "and": "kuma", "anonpay_description": "Ƙirƙirar ${type}. Maƙiyantun mai nasara zai iya ${method} da duk abubuwan da ke samun lambar waya, kuma zaku samu kuɗin dama a wannan kashi.", "apk_update": "apk sabunta", + "appearance": "Bayyanawa", "approve": "Amincewa", "approve_request": "Amince da bukata", "approve_tokens": "Amince da Alamu", @@ -568,6 +570,7 @@ "offline": "Offline", "ok": "OK", "old_fee": "Tsohon kudin", + "oled_mode": "Yanayin Oled", "onion_link": "Lambar onion", "online": "Kan layi", "onramper_option_description": "Da sauri sayi Crypto tare da hanyoyin biyan kuɗi da yawa. Akwai a yawancin ƙasashe. Yaduwa da kudade sun bambanta.", @@ -1152,4 +1155,4 @@ "youCanGoBackToYourDapp": "Kuna iya komawa zuwa DPP ɗinku yanzu", "your": "Naku", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index 5a94c1fe55..0515899e00 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "केक पे आपको वर्चुअल संपत्ति के साथ आसानी से उपहार कार्ड खरीदने की अनुमति देता है, जिसे संयुक्त राज्य में 150,000 से अधिक व्यापारियों पर तुरंत खर्च किया जा सकता है।", + "accent_color": "उच्चारण रंग", "account": "लेखा", "accounts": "हिसाब किताब", "accounts_subaddresses": "लेखा और उपदेस", @@ -55,6 +56,7 @@ "and": "और", "anonpay_description": "${type} उत्पन्न करें। प्राप्तकर्ता किसी भी समर्थित क्रिप्टोकरेंसी के साथ ${method} कर सकता है, और आपको इस वॉलेट में धन प्राप्त होगा।", "apk_update": "APK अद्यतन", + "appearance": "उपस्थिति", "approve": "मंज़ूरी देना", "approve_request": "अनुरोध को स्वीकृत करें", "approve_tokens": "टोकन को मंजूरी देना", @@ -568,6 +570,7 @@ "offline": "ऑफ़लाइन", "ok": "ठीक है", "old_fee": "पुराना फीस", + "oled_mode": "OLED मोड", "onion_link": "प्याज का लिंक", "online": "ऑनलाइन", "onramper_option_description": "जल्दी से कई भुगतान विधियों के साथ क्रिप्टो खरीदें। अधिकांश देशों में उपलब्ध है। फैलता है और फीस अलग -अलग होती है।", @@ -1151,4 +1154,4 @@ "youCanGoBackToYourDapp": "अब आप अपने DAPP पर वापस जा सकते हैं", "your": "आपका", "yy": "वाईवाई" -} +} \ No newline at end of file diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index d3db2ade7f..b65dd079fb 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Cake Pay vam omogućuje jednostavnu kupnju darovnih kartica s virtualnim sredstvima, koja se trenutno mogu potrošiti kod više od 150 000 trgovaca u Sjedinjenim Državama.", + "accent_color": "Naglašena boja", "account": "Račun", "accounts": "Računi", "accounts_subaddresses": "Računi i podadrese", @@ -55,6 +56,7 @@ "and": "i", "anonpay_description": "Generiraj ${type}. Primatelj može ${method} s bilo kojom podržanom kriptovalutom, a vi ćete primiti sredstva u ovaj novčanik.", "apk_update": "APK ažuriranje", + "appearance": "Izgled", "approve": "Odobriti", "approve_request": "Odobriti zahtjev", "approve_tokens": "Odobriti tokene", @@ -568,6 +570,7 @@ "offline": "izvan mreže", "ok": "OK", "old_fee": "Stara naknada", + "oled_mode": "OLED način", "onion_link": "Poveznica luka", "online": "Na mreži", "onramper_option_description": "Brzo kupite kriptovalute s mnogim načinima plaćanja. Dostupno u većini zemalja. Širenja i naknade variraju.", @@ -1149,4 +1152,4 @@ "youCanGoBackToYourDapp": "Sada se možete vratiti na svoj dapp", "your": "Vaš", "yy": "GG" -} +} \ No newline at end of file diff --git a/res/values/strings_hy.arb b/res/values/strings_hy.arb index 577fe0b320..12fec6eca2 100644 --- a/res/values/strings_hy.arb +++ b/res/values/strings_hy.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Cake Pay-ը Ձեզ թույլ է տալիս հեշտությամբ գնել նվեր քարտեր վիրտուալ ակտիվներով, որոնք անմիջապես ծախսվում են ԱՄՆ-ի 150,000-ից ավելի առևտրականների մոտ:", + "accent_color": "Շեշտադրիչ գույն", "account": "Հաշիվ", "accounts": "Հաշիվներ", "accounts_subaddresses": "Հաշիվներ և ենթահասցեներ", @@ -55,6 +56,7 @@ "and": "և", "anonpay_description": "${type} ստեղծել: Ստացողը կարող է ${method} ցանկացած աջակցվող կրիպտոարժույթով, և դուք կստանաք միջոցներ այս դրամապանակում։", "apk_update": "APK թարմացում", + "appearance": "Արտաքին տեսք", "approve": "Հաստատել", "approve_request": "Հաստատում է հայցը", "approve_tokens": "Հաստատում է նշանները", @@ -567,6 +569,7 @@ "offline": "Անցանց", "ok": "Լավ", "old_fee": "Հին վճար", + "oled_mode": "OLED ռեժիմ", "onion_link": "Onion հղում", "online": "Առցանց", "onramper_option_description": "Արագ գնեք կրիպտոցուլեր շատ վճարման մեթոդներով։ Հասանելի է մեծ մասամբ երկրներում։ Տարածված և վճարները փոփոխվում են", @@ -1147,4 +1150,4 @@ "youCanGoBackToYourDapp": "Այժմ կարող եք վերադառնալ ձեր DAPP- ին", "your": "Քո", "yy": "ՏՏ" -} +} \ No newline at end of file diff --git a/res/values/strings_id.arb b/res/values/strings_id.arb index 7165a49e43..6cc51528a0 100644 --- a/res/values/strings_id.arb +++ b/res/values/strings_id.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Cake Pay memungkinkan Anda untuk dengan mudah membeli kartu hadiah dengan aset virtual, yang dapat digunakan segera di lebih dari 150.000 pedagang di Amerika Serikat.", + "accent_color": "Warna aksen", "account": "Akun", "accounts": "Akun", "accounts_subaddresses": "Akun dan sub-alamat", @@ -55,6 +56,7 @@ "and": "dan", "anonpay_description": "Hasilkan ${type}. Penerima dapat ${method} dengan cryptocurrency apa pun yang didukung, dan Anda akan menerima dana di dompet ini.", "apk_update": "Pembaruan APK", + "appearance": "Penampilan", "approve": "Menyetujui", "approve_request": "Menyetujui permintaan", "approve_tokens": "Menyetujui token", @@ -568,6 +570,7 @@ "offline": "Offline", "ok": "OK", "old_fee": "Biaya lama", + "oled_mode": "Mode OLED", "onion_link": "Tautan bawang", "online": "Online", "onramper_option_description": "Beli crypto dengan cepat dengan banyak metode pembayaran. Tersedia di sebagian besar negara. Spread dan biaya bervariasi.", @@ -1152,4 +1155,4 @@ "youCanGoBackToYourDapp": "Anda dapat kembali ke dapp Anda sekarang", "your": "Milikmu", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index 40c88b2cf8..9ceff0ccdc 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Cake Pay ti consente di acquistare facilmente buoni regalo con asset virtuali, spendibili istantaneamente presso oltre 150.000 commercianti negli Stati Uniti.", + "accent_color": "Colore accento", "account": "Conto", "accounts": "Conti", "accounts_subaddresses": "Accounts e sottoindirizzi", @@ -55,6 +56,7 @@ "and": "e", "anonpay_description": "Genera ${type}. Il destinatario può ${method} con qualsiasi criptovaluta supportata, e riceverai fondi in questo portafoglio.", "apk_update": "Aggiornamento APK", + "appearance": "Aspetto", "approve": "Approvare", "approve_request": "Approvare la richiesta", "approve_tokens": "Approvare i token", @@ -568,6 +570,7 @@ "offline": "Offline", "ok": "OK", "old_fee": "Vecchia commissione", + "oled_mode": "Modalità OLED", "onion_link": "Link Onion", "online": "in linea", "onramper_option_description": "Acquista rapidamente la criptovaluta con molti metodi di pagamento. Disponibile nella maggior parte dei paesi. Gli spread e le commissioni variano.", @@ -1152,4 +1155,4 @@ "youCanGoBackToYourDapp": "Puoi tornare al tuo DApp ora", "your": "Tuo", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index 55f4d4dae7..7babd77bf5 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Cake Payを使用すると、仮想資産を含むギフトカードを簡単に購入でき、米国内の150,000を超える加盟店ですぐに利用できます。", + "accent_color": "アクセント色", "account": "アカウント", "accounts": "アカウント", "accounts_subaddresses": "アカウントとサブアドレス", @@ -55,6 +56,7 @@ "and": "と", "anonpay_description": "${type} を生成します。受取人はサポートされている任意の暗号通貨で ${method} でき、あなたはこのウォレットで資金を受け取ります。", "apk_update": "APKアップデート", + "appearance": "外観", "approve": "承認する", "approve_request": "リクエストを承認します", "approve_tokens": "トークンを承認します", @@ -569,6 +571,7 @@ "offline": "オフライン", "ok": "OK", "old_fee": "古い料金", + "oled_mode": "OLEDモード", "onion_link": "オニオンリンク", "online": "オンライン", "onramper_option_description": "多くの支払い方法で暗号をすばやく購入してください。ほとんどの国で利用可能です。スプレッドと料金は異なります。", @@ -1150,4 +1153,4 @@ "youCanGoBackToYourDapp": "あなたは今あなたのダップに戻ることができます", "your": "あなたの", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index fbfa21f2e3..b7c00cd2c7 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Cake Pay를 사용하면 가상 자산으로 기프트 카드를 쉽게 구매하여 미국 내 150,000개 이상의 가맹점에서 즉시 사용할 수 있습니다.", + "accent_color": "악센트 색상", "account": "계정", "accounts": "계정", "accounts_subaddresses": "계정 및 하위 주소", @@ -55,6 +56,7 @@ "and": "및", "anonpay_description": "${type} 생성. 수신자는 지원되는 모든 암호화폐로 ${method}할 수 있으며, 귀하는 이 지갑으로 자금을 받게 됩니다.", "apk_update": "APK 업데이트", + "appearance": "모습", "approve": "승인", "approve_request": "요청 승인", "approve_tokens": "토큰을 승인합니다", @@ -568,6 +570,7 @@ "offline": "오프라인", "ok": "확인", "old_fee": "이전 수수료", + "oled_mode": "OLED 모드", "onion_link": "Onion 링크", "online": "온라인", "onramper_option_description": "다양한 결제 방법으로 빠르게 암호화폐 구매. 대부분의 국가에서 사용 가능. 스프레드 및 수수료는 다양함.", @@ -1150,4 +1153,4 @@ "youCanGoBackToYourDapp": "이제 dApp으로 돌아갈 수 있습니다", "your": "당신의", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_my.arb b/res/values/strings_my.arb index a93c5c5dfc..4005cc3620 100644 --- a/res/values/strings_my.arb +++ b/res/values/strings_my.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Cake Pay သည် အမေရိကန်ပြည်ထောင်စုရှိ ကုန်သည် 150,000 ကျော်တွင် လက်ဆောင်ကတ်များကို လက်ဆောင်ကတ်များကို အလွယ်တကူ ဝယ်ယူနိုင်စေပါသည်။", + "accent_color": "အသံထွက်အရောင်", "account": "အကောင့်", "accounts": "အကောင့်များ", "accounts_subaddresses": "အကောင့်များနှင့် လိပ်စာများ", @@ -55,6 +56,7 @@ "and": "နှင့်", "anonpay_description": "${type} ကို ဖန်တီးပါ။ လက်ခံသူက ${method} ကို ပံ့ပိုးပေးထားသည့် cryptocurrency တစ်ခုခုဖြင့် လုပ်ဆောင်နိုင်ပြီး၊ သင်သည် ဤပိုက်ဆံအိတ်တွင် ရံပုံငွေများ ရရှိမည်ဖြစ်သည်။", "apk_update": "APK အပ်ဒိတ်", + "appearance": "ဖြစ်ပေါ်လာခြင်း", "approve": "လက်မခံပါ။", "approve_request": "တောင်းဆိုမှုကိုအတည်ပြု", "approve_tokens": "တိုကင်အတည်ပြု", @@ -568,6 +570,7 @@ "offline": "အော့ဖ်လိုင်း", "ok": "ရလား", "old_fee": "ကြေးဟောင်း", + "oled_mode": "OLED mode ကို", "onion_link": "ကြက်သွန်လင့်", "online": "အွန်လိုင်း", "onramper_option_description": "ငွေပေးချေမှုနည်းလမ်းများစွာဖြင့် Crypto ကိုလျင်မြန်စွာ 0 ယ်ပါ။ နိုင်ငံအများစုတွင်ရရှိနိုင်ပါသည်။ ဖြန့်ဖြူးနှင့်အခကြေးငွေကွဲပြားခြားနားသည်။", @@ -1149,4 +1152,4 @@ "youCanGoBackToYourDapp": "သငျသညျယခုသင်၏ dapp ကိုပြန်သွားနိုင်ပါတယ်", "your": "ခင်ဗျားတို့၏", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 1322cbb02a..df67a9447c 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Met Cake Pay kunt u eenvoudig cadeaubonnen kopen met virtuele activa, die direct kunnen worden uitgegeven bij meer dan 150.000 handelaren in de Verenigde Staten.", + "accent_color": "Accentkleur", "account": "Account", "accounts": "Accounts", "accounts_subaddresses": "Accounts en subadressen", @@ -55,6 +56,7 @@ "and": "en", "anonpay_description": "Genereer ${type}. De ontvanger kan ${method} gebruiken met elke ondersteunde cryptocurrency en u ontvangt geld in deze portemonnee", "apk_update": "APK-update", + "appearance": "Verschijning", "approve": "Goedkeuren", "approve_request": "Het verzoek goedkeuren", "approve_tokens": "Tokens goedkeuren", @@ -568,6 +570,7 @@ "offline": "Offline", "ok": "OK", "old_fee": "Oude vergoeding", + "oled_mode": "OLED -modus", "onion_link": "Ui koppeling", "online": "online", "onramper_option_description": "Koop snel crypto met veel betaalmethoden. Beschikbaar in de meeste landen. Spreads en vergoedingen variëren.", @@ -1150,4 +1153,4 @@ "youCanGoBackToYourDapp": "U kunt nu terug naar uw DApp gaan", "your": "Jouw", "yy": "JJ" -} +} \ No newline at end of file diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index ee6583af72..273cf14ac1 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Cake Pay umożliwia łatwe kupowanie kart podarunkowych z wirtualnymi saldami, które można natychmiast wydać u ponad 150 000 sprzedawców.", + "accent_color": "Kolor akcentu", "account": "Konto", "accounts": "Konta", "accounts_subaddresses": "Konta i podadresy", @@ -55,6 +56,7 @@ "and": "i", "anonpay_description": "Wygeneruj ${type}. Odbiorca może ${method} z dowolną obsługiwaną kryptowalutą, a Ty otrzymasz środki w tym portfelu.", "apk_update": "Aktualizacja APK", + "appearance": "Wygląd", "approve": "Zatwierdzić", "approve_request": "Zatwierdzić żądanie", "approve_tokens": "Zatwierdzić tokeny", @@ -568,6 +570,7 @@ "offline": "Offline", "ok": "Ok", "old_fee": "Stara opłata", + "oled_mode": "Tryb OLED", "onion_link": "Link .onion", "online": "online", "onramper_option_description": "Szybko kup kryptowaluty z wieloma metodami płatności. Dostępne w większości krajów. Ceny i opłaty różnią się.", @@ -1149,4 +1152,4 @@ "youCanGoBackToYourDapp": "Możesz teraz wrócić do swojego dapp", "your": "Twój", "yy": "RR" -} +} \ No newline at end of file diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 1ce58e4215..10eef448f6 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "O Cake Pay permite que você compre facilmente cartões-presente com ativos virtuais, que podem ser gastos instantaneamente em mais de 150.000 comerciantes nos Estados Unidos.", + "accent_color": "Cor de destaque", "account": "Conta", "accounts": "Contas", "accounts_subaddresses": "Contas e sub-endereços", @@ -55,6 +56,7 @@ "and": "e", "anonpay_description": "Gere ${type}. O destinatário pode ${method} com qualquer criptomoeda suportada e você receberá fundos nesta carteira.", "apk_update": "Atualização de APK", + "appearance": "Aparência", "approve": "Aprovar", "approve_request": "Aprovar solicitação", "approve_tokens": "Aprovar tokens", @@ -569,6 +571,7 @@ "offline": "offline", "ok": "Ok", "old_fee": "Taxa antiga", + "oled_mode": "Modo OLED", "onion_link": "ligação de cebola", "online": "Online", "onramper_option_description": "Compre rapidamente criptografia com muitos métodos de pagamento. Disponível na maioria dos países. Os spreads e taxas variam.", @@ -1152,4 +1155,4 @@ "youCanGoBackToYourDapp": "Você pode voltar para o seu dapp agora", "your": "Seu", "yy": "aa" -} +} \ No newline at end of file diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index 9ac6d852a0..419da09bc5 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Cake Pay позволяет вам легко покупать подарочные карты с виртуальными активами, которые можно мгновенно потратить в более чем 150 000 продавцов в Соединенных Штатах.", + "accent_color": "Акцентный цвет", "account": "Аккаунт", "accounts": "Аккаунты", "accounts_subaddresses": "Аккаунты и субадреса", @@ -55,6 +56,7 @@ "and": "и", "anonpay_description": "Создайте ${type}. Получатель может использовать ${method} с любой поддерживаемой криптовалютой, и вы получите средства на этот кошелек.", "apk_update": "Обновление APK", + "appearance": "Появление", "approve": "Утвердить", "approve_request": "Утвердить запрос", "approve_tokens": "Одобрить токены", @@ -568,6 +570,7 @@ "offline": "Не в сети", "ok": "OK", "old_fee": "Старая плата", + "oled_mode": "OLED -режим", "onion_link": "Луковая ссылка", "online": "Онлайн", "onramper_option_description": "Быстро купите крипто со многими способами оплаты. Доступно в большинстве стран. Спреды и сборы различаются.", @@ -1150,4 +1153,4 @@ "youCanGoBackToYourDapp": "Вы можете вернуться к своему даппу сейчас", "your": "Твой", "yy": "ГГ" -} +} \ No newline at end of file diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb index 4c8a916813..d84e1694ec 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Cake Pay ช่วยให้คุณสามารถซื้อบัตรของขวัญง่ายๆ ด้วยการใช้สินทรัพย์อนุกรม ซื้อใช้ได้ทันทีกับมากกว่า 150,000 ร้านค้าในสหรัฐอเมริกา", + "accent_color": "สีเน้น", "account": "บัญชี", "accounts": "บัญชี", "accounts_subaddresses": "บัญชีและที่อยู่ย่อย", @@ -55,6 +56,7 @@ "and": "และ", "anonpay_description": "สร้าง ${type} ผู้รับสามารถ ${method} ด้วยสกุลเงินดิจิทัลที่รองรับ และคุณจะได้รับเงินในกระเป๋าสตางค์นี้", "apk_update": "ปรับปรุง APK", + "appearance": "รูปร่าง", "approve": "อนุมัติ", "approve_request": "อนุมัติคำขอ", "approve_tokens": "อนุมัติโทเค็น", @@ -568,6 +570,7 @@ "offline": "ออฟไลน์", "ok": "ตกลง", "old_fee": "ค่าธรรมเนียมเก่า", + "oled_mode": "โหมด OLED", "onion_link": "ลิงค์หัวหอม", "online": "ออนไลน์", "onramper_option_description": "ซื้อ crypto อย่างรวดเร็วด้วยวิธีการชำระเงินจำนวนมาก มีให้บริการในประเทศส่วนใหญ่ สเปรดและค่าธรรมเนียมแตกต่างกันไป", @@ -1149,4 +1152,4 @@ "youCanGoBackToYourDapp": "คุณสามารถกลับไปที่ dapp ของคุณได้ทันที", "your": "ของคุณ", "yy": "ปี" -} +} \ No newline at end of file diff --git a/res/values/strings_tl.arb b/res/values/strings_tl.arb index fc7a1a8417..0c597a8d3b 100644 --- a/res/values/strings_tl.arb +++ b/res/values/strings_tl.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Binibigyan-daan ka ng Cake Pay na madaling makabili ng mga gift card na may mga virtual na asset na magagastos kaagad sa mahigit na 150,000 merchant sa United States.", + "accent_color": "Kulay ng accent", "account": "Account", "accounts": "Mga Account", "accounts_subaddresses": "Mga account at mga subaddress", @@ -55,6 +56,7 @@ "and": "at", "anonpay_description": "Bumuo ng ${type}. Ang tatanggap ay maaaring ${method} na may anumang suportadong cryptocurrency, at makakatanggap ka ng mga pondo sa wallet na ito.", "apk_update": "APK update", + "appearance": "Hitsura", "approve": "Aprubahan", "approve_request": "Aprubahan ang kahilingan", "approve_tokens": "Aprubahan ang mga token", @@ -568,6 +570,7 @@ "offline": "Offline", "ok": "OK", "old_fee": "Dating fee", + "oled_mode": "OLED mode", "onion_link": "Onion link", "online": "Online", "onramper_option_description": "Mabilis na bumili ng crypto na may maraming paraan ng pagbabayad. Available sa karamihan ng mga bansa. Iba-iba ang mga spread at fee.", @@ -1149,4 +1152,4 @@ "youCanGoBackToYourDapp": "Maaari kang bumalik sa iyong dapp ngayon", "your": "IYONG", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_tr.arb b/res/values/strings_tr.arb index e18e00379e..1ab66df719 100644 --- a/res/values/strings_tr.arb +++ b/res/values/strings_tr.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Cake Pay, Amerika Birleşik Devletleri'ndeki 150.000'den fazla işyerinde anında harcanabilen sanal varlıklarla kolayca hediye kartları satın almanızı sağlar.", + "accent_color": "Aksan rengi", "account": "Hesap", "accounts": "Hesaplar", "accounts_subaddresses": "Hesaplar ve alt adresler", @@ -55,6 +56,7 @@ "and": "ve", "anonpay_description": "${type} oluşturun. Alıcı, desteklenen herhangi bir kripto para birimi ile ${method} yapabilir ve bu cüzdanda para alırsınız.", "apk_update": "APK güncellemesi", + "appearance": "Dış görünüş", "approve": "Onaylamak", "approve_request": "Talebi Onaylama", "approve_tokens": "Jetonları onaylayın", @@ -568,6 +570,7 @@ "offline": "Çevrimdışı", "ok": "Tamam", "old_fee": "Eski ücret", + "oled_mode": "OLED modu", "onion_link": "soğan bağlantısı", "online": "Çevrimiçi", "onramper_option_description": "Birçok ödeme yöntemi ile hızlı bir şekilde kripto satın alın. Çoğu ülkede mevcuttur. Forma ve ücretler değişir.", @@ -1149,4 +1152,4 @@ "youCanGoBackToYourDapp": "Şimdi Dapp'ınıza geri dönebilirsin", "your": "Senin", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index 620a036fcb..00477eef1e 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Cake Pay дозволяє вам легко купувати подарункові картки з віртуальними активами, які можна миттєво витратити в понад 150 000 продавців у Сполучених Штатах.", + "accent_color": "Акцентний колір", "account": "Акаунт", "accounts": "Акаунти", "accounts_subaddresses": "Акаунти та субадреси", @@ -55,6 +56,7 @@ "and": "і", "anonpay_description": "Згенерувати ${type}. Одержувач може ${method} будь-якою підтримуваною криптовалютою, і ви отримаєте кошти на цей гаманець.", "apk_update": "Оновлення APK", + "appearance": "Зовнішність", "approve": "Затвердити", "approve_request": "Запитайте запит", "approve_tokens": "Затвердити токени", @@ -568,6 +570,7 @@ "offline": "Офлайн", "ok": "OK", "old_fee": "Стара комісія", + "oled_mode": "ОЛЕД -режим", "onion_link": "Посилання на цибулю", "online": "Онлайн", "onramper_option_description": "Швидко купуйте криптовалюту з багатьма методами оплати. Доступний у більшості країн. Поширення та збори різняться.", @@ -1150,4 +1153,4 @@ "youCanGoBackToYourDapp": "Ви можете повернутися до свого DAPP зараз", "your": "Ваш", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_ur.arb b/res/values/strings_ur.arb index f8e1b770ae..479fbc5747 100644 --- a/res/values/strings_ur.arb +++ b/res/values/strings_ur.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Cake پے آپ کو ورچوئل اثاثوں کے ساتھ گفٹ کارڈز آسانی سے خریدنے کی اجازت دیتا ہے، جو ریاستہائے متحدہ میں 150,000 سے زیادہ تاجروں پر فوری طور پر خرچ کیے جا سکتے ہیں۔", + "accent_color": "لہجہ رنگ", "account": "کھاتہ", "accounts": "اکاؤنٹس", "accounts_subaddresses": "اکاؤنٹس اور ذیلی پتے", @@ -55,6 +56,7 @@ "and": "اور", "anonpay_description": "${type} بنائیں۔ وصول کنندہ کسی بھی تعاون یافتہ کرپٹو کرنسی کے ساتھ ${method} کرسکتا ہے، اور آپ کو اس بٹوے میں فنڈز موصول ہوں گے۔", "apk_update": "APK اپ ڈیٹ", + "appearance": "ظاہری شکل", "approve": "ﻭﺮﮐ ﺭﻮﻈﻨﻣ", "approve_request": "درخواست کو منظور کریں", "approve_tokens": "ٹوکن کو منظور کریں", @@ -568,6 +570,7 @@ "offline": "آف لائن", "ok": "ٹھیک ہے", "old_fee": "پرانی فیس", + "oled_mode": "OLED موڈ", "onion_link": "پیاز کا لنک", "online": "آن لائن", "onramper_option_description": "ادائیگی کے بہت سے طریقوں سے جلدی سے کرپٹو خریدیں۔ زیادہ تر ممالک میں دستیاب ہے۔ پھیلاؤ اور فیس مختلف ہوتی ہے۔", @@ -1151,4 +1154,4 @@ "youCanGoBackToYourDapp": "اب آپ اپنے ڈی اے پی پی پر واپس جاسکتے ہیں", "your": "آپ کا", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_vi.arb b/res/values/strings_vi.arb index afd305084a..f7435ce9c3 100644 --- a/res/values/strings_vi.arb +++ b/res/values/strings_vi.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Cake Pay cho phép bạn dễ dàng mua thẻ quà tặng bằng tài sản ảo, có thể sử dụng ngay lập tức tại hơn 150.000 cửa hàng tại Hoa Kỳ.", + "accent_color": "Màu nhấn", "account": "Tài khoản", "accounts": "Tài khoản", "accounts_subaddresses": "Tài khoản và địa chỉ phụ", @@ -55,6 +56,7 @@ "and": "và", "anonpay_description": "Tạo ${type}. Người nhận có thể ${method} với bất kỳ loại tiền điện tử nào được hỗ trợ, và bạn sẽ nhận được tiền trong ví này.", "apk_update": "Cập nhật APK", + "appearance": "Vẻ bề ngoài", "approve": "Phê duyệt", "approve_request": "Phê duyệt yêu cầu", "approve_tokens": "Phê duyệt mã thông báo", @@ -566,6 +568,7 @@ "offline": "Ngoại tuyến", "ok": "OK", "old_fee": "Phí cũ", + "oled_mode": "Chế độ OLED", "onion_link": "Liên kết Onion", "online": "Trực tuyến", "onramper_option_description": "Mua tiền điện tử nhanh chóng với nhiều phương thức thanh toán. Có sẵn ở hầu hết các quốc gia. Chênh lệch và phí thay đổi.", @@ -1146,4 +1149,4 @@ "youCanGoBackToYourDapp": "Bạn có thể quay lại DAPP của mình ngay bây giờ", "your": "Của bạn", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_yo.arb b/res/values/strings_yo.arb index 9c589871e3..0e02afcdec 100644 --- a/res/values/strings_yo.arb +++ b/res/values/strings_yo.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Cake Pay jẹ́ kí ẹ lè fi owó wẹ́ẹ̀bù ra àwọn káàdì ìrajà t'á lò nínú iye ìtajà kan. Ẹ lè san wọn láìpẹ́ nítajà 150,000 nínú Amẹ́ríkà.", + "accent_color": "Awọ ara", "account": "Àkáǹtì", "accounts": "Àwọn àkáǹtì", "accounts_subaddresses": "Àwọn àkáǹtì àti àwọn àdírẹ́sì kékeré", @@ -55,6 +56,7 @@ "and": "àti", "anonpay_description": "Ṣe akọkọ ${type}. Awọn alabara le ${method} pẹlu eyikeyi iwo ise ati owo yoo wọle si iwe iwe yii.", "apk_update": "Àtúnse áàpù títun wà", + "appearance": "Ifarahan", "approve": "Fi ọwọ si", "approve_request": "IKILỌ RẸ", "approve_tokens": "Ṣe fọwọsi awọn àmi", @@ -569,6 +571,7 @@ "offline": "kò wà lórí ayélujára", "ok": "Ó dáa", "old_fee": "Oya atijọ", + "oled_mode": "Ipo OED", "onion_link": "Kọja ilọ alubosa", "online": "Lórí ayélujára", "onramper_option_description": "Ni kiakia Ra Crypto pẹlu ọpọlọpọ awọn ọna isanwo. Wa ni ọpọlọpọ awọn orilẹ-ede. Itankale ati awọn idiyele yatọ.", @@ -1150,4 +1153,4 @@ "youCanGoBackToYourDapp": "O le pada si tapla rẹ bayi", "your": "Rẹ", "yy": "Ọd" -} +} \ No newline at end of file diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index fdfa4d4389..ab51211983 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -1,5 +1,6 @@ { "about_cake_pay": "Cake Pay 让您可以轻松购买带有虚拟资产的礼品卡,可立即在美国超过 150,000 家商家消费。", + "accent_color": "口音颜色", "account": "帐户", "accounts": "账户", "accounts_subaddresses": "账户和子地址", @@ -55,6 +56,7 @@ "and": "和", "anonpay_description": "生成 ${type}。收款人可以使用任何受支持的加密货币 ${method},您将在此钱包中收到资金。", "apk_update": "APK更新", + "appearance": "外貌", "approve": "批准", "approve_request": "批准请求", "approve_tokens": "批准令牌", @@ -568,6 +570,7 @@ "offline": "离线", "ok": "确认", "old_fee": "旧费用", + "oled_mode": "OLED模式", "onion_link": "洋葱链接", "online": "在线", "onramper_option_description": "快速使用许多付款方式购买加密货币。在大多数国家 /地区可用。利差和费用各不相同。", @@ -1149,4 +1152,4 @@ "youCanGoBackToYourDapp": "您现在可以回到DAPP", "your": "你的", "yy": "YY" -} +} \ No newline at end of file