Cw 396 additional themes (#962)

* fix: SectionStandardList using BuildContext as param * refactor: deprecated backgroundColor -> colorScheme.background * refactor: themeBase and current themes * refactor: accentTextTheme.titleLarge.color -> dialogTheme.backgroundColor * refactor: gradient background * refactor: text themes using the same color as primaryColor * refactor: accentTextTheme.bodySmall.color -> cardColor * refactor: text themes using same dialogBackgroundColor * refactor: scrollbarTheme * refactor: create SyncIndicatorTheme * refactor: SectionDivider * refactor: base_page improvements and simplify * refactor: collapsible_standart_list improvements * refactor: accentTextTheme.bodyLarge.backgroundColor -> KeyboardTheme.keyboardBarColor * refactor: create PinCodeTheme for accentTextTheme.bodyMedium * refactor: create SupportPageTheme for accentTextTheme.displayLarge.backgroundColor and fix cases that use it * refactor: accentTextTheme.displayLarge.color -> disabledColor * refactor: create ExchangePageTheme * refactor: create DashboardPageTheme and use textColor * refactor: create NewWalletTheme for accentTextTheme.displayMedium * refactor: create BalancePageTheme for accentTextTheme.displaySmall.backgroundColor * refactor: create AddressTheme for accentTextTheme.displaySmall.color * refactor: create IndicatorDotTheme * refactor: create CakeMenuTheme * refactor: create FilterTheme * refactor: create WalletListTheme * refactor: accentTextTheme.bodySmall.decorationColor -> InfoTheme.textColor * refactor: accentTextTheme.titleLarge.backgroundColor -> PickerTheme.dividerColor * refactor: primaryTextTheme.bodyLarge.backgroundColor -> AlertTheme.leftButtonTextColor * refactor: primaryTextTheme.displayLarge.backgroundColor -> OrderTheme.iconColor * refactor: create SendPageTheme * fix: missing migrated styles * refactor: primaryTextTheme.labelSmall.decorationColor -> PlaceholderTheme.color * refactor: create TransactionTradeTheme * refactor: create CakeTextTheme * refactor: create AccountListTheme * refactor: create ReceivePageTheme * refactor: create QRCodeTheme * refactor: move remaining items to CakeTextTheme and some missing fixes * feat(display_settings): add new theme selector * feat: additional themes * fix: conflict error * fix(lag): move colorScheme initialization to constructor * feat: add backdropColor to alert and picker backdrop filters * fix: merge fixes * fix: send template page missing new colors * fix: anonpay pages title and icon colors * fix: merge fixes * fix: unspent coins page * fix: also fix exchange template * fix: missing checkbox * fix: fixes for high contrast theme * Merge branch 'main' into CW-396-additional-themes * fix: merge fixes * fix: .gitignore and rm added files * Fix review comments --------- Co-authored-by: OmarHatem <omarh.ismail1@gmail.com>

Rafael Saes committed Aug 17, 2023 at 12:28 UTC 09c942564ed94ca2e5ec0faccfce808be4076edc
229 files changed +4085 -2865
.gitignore
+1 -1
@@ -143,4 +143,4 @@ assets/images/app_logo.png
143
144 macos/Runner/Info.plist
145 macos/Runner/DebugProfile.entitlements
146 -macos/Runner/Release.entitlements
\ No newline at end of file
146 +macos/Runner/Release.entitlements
cw_bitcoin/pubspec.lock
+1 -1
@@ -746,5 +746,5 @@ packages:
746 source: hosted
747 version: "3.1.1"
748 sdks:
749 - dart: ">=2.19.0 <4.0.0"
749 + dart: ">=2.19.0 <3.0.0"
750 flutter: ">=3.0.0"
cw_core/pubspec.lock
+1 -1
@@ -665,5 +665,5 @@ packages:
665 source: hosted
666 version: "3.1.1"
667 sdks:
668 - dart: ">=2.19.0 <4.0.0"
668 + dart: ">=2.19.0 <3.0.0"
669 flutter: ">=3.0.0"
cw_monero/example/pubspec.lock
+1 -1
@@ -399,5 +399,5 @@ packages:
399 source: hosted
400 version: "0.2.0+3"
401 sdks:
402 - dart: ">=2.18.1 <4.0.0"
402 + dart: ">=2.18.1 <3.0.0"
403 flutter: ">=3.0.0"
cw_monero/pubspec.lock
+1 -1
@@ -672,5 +672,5 @@ packages:
672 source: hosted
673 version: "3.1.1"
674 sdks:
675 - dart: ">=2.19.0 <4.0.0"
675 + dart: ">=2.19.0 <3.0.0"
676 flutter: ">=3.0.0"
lib/palette.dart
+8 -1
@@ -15,6 +15,9 @@ class Palette {
15 static const Color nightBlue = Color.fromRGBO(46, 57, 96, 1.0);
16 static const Color moderateOrangeYellow = Color.fromRGBO(245, 134, 82, 1.0);
17 static const Color moderateOrange = Color.fromRGBO(235, 117, 63, 1.0);
18 + static const Color moneroOrange = Color.fromRGBO(255, 102, 0, 1.0);
19 + static const Color moneroLightOrange = Color.fromRGBO(250, 240, 246, 1.0);
20 + static const Color bitcoinOrange = Color.fromRGBO(242, 169, 0, 1.0);
21 static const Color shineGreen = Color.fromRGBO(76, 189, 87, 1.0);
22 static const Color moderateGreen = Color.fromRGBO(45, 158, 56, 1.0);
23 static const Color cornflower = Color.fromRGBO(85, 147, 240, 1.0);
@@ -48,6 +51,7 @@ class Palette {
51 static const Color paleCornflowerBlue = Color.fromRGBO(185, 196, 237, 1.0);
52 static const Color manatee = Color.fromRGBO(153, 161, 176, 1.0);
53 static const Color stateGray = Color.fromRGBO(68, 74, 89, 1.0);
54 + static const Color highContrastGray = Color.fromRGBO(76, 76, 76, 1.0);
55 static const Color frostySky = Color.fromRGBO(0, 184, 250, 1.0);
56 }
57
@@ -90,4 +94,7 @@ class PaletteDark {
94 static const Color lightPurpleBlue = Color.fromRGBO(120, 133, 170, 1.0);
95 static const Color indicatorVioletBlue = Color.fromRGBO(59, 72, 119, 1.0);
96 static const Color granite = Color.fromRGBO(48, 51, 60, 1.0);
93 -}
\ No newline at end of file
97 + static const Color matrixGreen = Color.fromRGBO(18, 229, 90, 1.0);
98 + static const Color moneroOrange = Color.fromRGBO(255, 102, 0, 1.0);
99 + static const Color moneroCard = Color.fromRGBO(20, 21, 24, 1.0);
100 +}
lib/src/screens/anonpay_details/anonpay_details_page.dart
+1 -2
@@ -42,10 +42,9 @@ class _AnonpayDetailsPageBodyState extends State<AnonpayDetailsPageBody> {
42 @override
43 Widget build(BuildContext context) {
44 return SectionStandardList(
45 - context: context,
45 sectionCount: 1,
46 itemCounter: (int _) => widget.anonpayDetailsViewModel.items.length,
48 - itemBuilder: (_, __, index) {
47 + itemBuilder: (__, index) {
48 final item = widget.anonpayDetailsViewModel.items[index];
49
50 if (item is DetailsListStatusItem) {
lib/src/screens/backup/backup_page.dart
+1 -1
@@ -80,7 +80,7 @@ class BackupPage extends BasePage {
80 isLoading: backupViewModelBase.state is IsExecutingState,
81 onPressed: () => onExportBackup(context),
82 text: S.of(context).export_backup,
83 - color: Theme.of(context).accentTextTheme.bodyLarge!.color!,
83 + color: Theme.of(context).primaryColor,
84 textColor: Colors.white,
85 ),
86 ),
lib/src/screens/backup/edit_backup_password_page.dart
+3 -8
@@ -7,6 +7,7 @@ import 'package:cake_wallet/src/screens/base_page.dart';
7 import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
8 import 'package:cake_wallet/src/widgets/primary_button.dart';
9 import 'package:cake_wallet/view_model/edit_backup_password_view_model.dart';
10 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
11
12 class EditBackupPasswordPage extends BasePage {
13 EditBackupPasswordPage(this.editBackupPasswordViewModel)
@@ -39,19 +40,13 @@ class EditBackupPasswordPage extends BasePage {
40 controller: textEditingController,
41 style: TextStyle(
42 fontSize: 26,
42 - color: Theme.of(context)
43 - .primaryTextTheme!
44 - .titleLarge!
45 - .color!)))),
43 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor)))),
44 Positioned(
45 child: Observer(
46 builder: (_) => PrimaryButton(
47 onPressed: () => onSave(context),
48 text: S.of(context).save,
51 - color: Theme.of(context)
52 - .accentTextTheme!
53 - .bodyLarge!
54 - .color!,
49 + color: Theme.of(context).primaryColor,
50 textColor: Colors.white,
51 isDisabled: !editBackupPasswordViewModel.canSave)),
52 bottom: 24,
lib/src/screens/base_page.dart
+43 -23
@@ -1,7 +1,6 @@
1 import 'package:cake_wallet/themes/theme_base.dart';
2 import 'package:flutter/cupertino.dart';
3 import 'package:flutter/material.dart';
4 -import 'package:cake_wallet/palette.dart';
4 import 'package:cake_wallet/di.dart';
5 import 'package:cake_wallet/store/settings_store.dart';
6 import 'package:cake_wallet/src/widgets/nav_bar.dart';
@@ -10,22 +9,22 @@ import 'package:cake_wallet/generated/i18n.dart';
9 enum AppBarStyle { regular, withShadow, transparent }
10
11 abstract class BasePage extends StatelessWidget {
13 - BasePage()
14 - : _scaffoldKey = GlobalKey<ScaffoldState>();
12 + BasePage() : _scaffoldKey = GlobalKey<ScaffoldState>();
13 final GlobalKey<ScaffoldState> _scaffoldKey;
14
17 - final Image closeButtonImage =
18 - Image.asset('assets/images/close_button.png');
15 + final Image closeButtonImage = Image.asset('assets/images/close_button.png');
16 final Image closeButtonImageDarkTheme =
20 - Image.asset('assets/images/close_button_dark_theme.png');
17 + Image.asset('assets/images/close_button_dark_theme.png');
18
19 String? get title => null;
20
24 - Color get backgroundLightColor => Colors.white;
21 + Color? get backgroundLightColor => null;
22
26 - Color get backgroundDarkColor => PaletteDark.backgroundColor;
23 + Color? get backgroundDarkColor => null;
24
28 - Color? get titleColor => null;
25 + bool get gradientBackground => false;
26 +
27 + bool get gradientAll => false;
28
29 bool get resizeToAvoidBottomInset => true;
30
@@ -43,15 +42,41 @@ abstract class BasePage extends StatelessWidget {
42
43 void onClose(BuildContext context) => Navigator.of(context).pop();
44
45 + Color pageBackgroundColor(BuildContext context) =>
46 + (currentTheme.type == ThemeType.dark
47 + ? backgroundDarkColor
48 + : backgroundLightColor) ??
49 + (gradientBackground && currentTheme.type == ThemeType.bright
50 + ? Colors.transparent
51 + : Theme.of(context).colorScheme.background);
52 +
53 + Color titleColor(BuildContext context) =>
54 + (gradientBackground && currentTheme.type == ThemeType.bright) ||
55 + (gradientAll && currentTheme.brightness == Brightness.light)
56 + ? Colors.white
57 + : Theme.of(context).appBarTheme.titleTextStyle!.color!;
58 +
59 + Color? pageIconColor(BuildContext context) => titleColor(context);
60 +
61 + Widget closeButton(BuildContext context) => Image.asset(
62 + currentTheme.type == ThemeType.dark
63 + ? 'assets/images/close_button_dark_theme.png'
64 + : 'assets/images/close_button.png',
65 + color: pageIconColor(context),
66 + height: 16,
67 + );
68 +
69 + Widget backButton(BuildContext context) => Icon(
70 + Icons.arrow_back_ios,
71 + color: pageIconColor(context),
72 + size: 16,
73 + );
74 +
75 Widget? leading(BuildContext context) {
76 if (ModalRoute.of(context)?.isFirst ?? true) {
77 return null;
78 }
79
51 - final _backButton = Icon(Icons.arrow_back_ios,
52 - color: titleColor ?? Theme.of(context).primaryTextTheme!.titleLarge!.color!,
53 - size: 16,);
54 -
80 return MergeSemantics(
81 child: SizedBox(
82 height: 37,
@@ -66,7 +91,7 @@ abstract class BasePage extends StatelessWidget {
91 (states) => Colors.transparent),
92 ),
93 onPressed: () => onClose(context),
69 - child: _backButton,
94 + child: backButton(context),
95 ),
96 ),
97 ),
@@ -83,8 +108,7 @@ abstract class BasePage extends StatelessWidget {
108 fontSize: 18.0,
109 fontWeight: FontWeight.bold,
110 fontFamily: 'Lato',
86 - color: titleColor ??
87 - Theme.of(context).primaryTextTheme!.titleLarge!.color!),
111 + color: titleColor(context)),
112 );
113 }
114
@@ -93,9 +117,8 @@ abstract class BasePage extends StatelessWidget {
117 Widget? floatingActionButton(BuildContext context) => null;
118
119 ObstructingPreferredSizeWidget appBar(BuildContext context) {
96 - final appBarColor = currentTheme.type == ThemeType.dark
97 - ? backgroundDarkColor : backgroundLightColor;
98 -
120 + final appBarColor = pageBackgroundColor(context);
121 +
122 switch (appBarStyle) {
123 case AppBarStyle.regular:
124 // FIX-ME: NavBar no context
@@ -139,12 +162,9 @@ abstract class BasePage extends StatelessWidget {
162
163 @override
164 Widget build(BuildContext context) {
142 - final _backgroundColor = currentTheme.type == ThemeType.dark
143 - ? backgroundDarkColor : backgroundLightColor;
144 -
165 final root = Scaffold(
166 key: _scaffoldKey,
147 - backgroundColor: _backgroundColor,
167 + backgroundColor: pageBackgroundColor(context),
168 resizeToAvoidBottomInset: resizeToAvoidBottomInset,
169 extendBodyBehindAppBar: extendBodyBehindAppBar,
170 endDrawer: endDrawer,
lib/src/screens/buy/buy_webview_page.dart
-3
@@ -24,9 +24,6 @@ class BuyWebViewPage extends BasePage {
24 @override
25 Color get backgroundDarkColor => Colors.white;
26
27 - @override
28 - Color get titleColor => Palette.darkBlueCraiola;
29 -
27 @override
28 Widget body(BuildContext context) =>
29 BuyWebViewPageBody(buyViewModel, ordersStore: ordersStore, url: url);
lib/src/screens/buy/pre_order_page.dart
+11 -15
@@ -3,6 +3,10 @@ import 'package:cake_wallet/buy/buy_provider.dart';
3 import 'package:cake_wallet/buy/moonpay/moonpay_buy_provider.dart';
4 import 'package:cake_wallet/entities/fiat_currency.dart';
5 import 'package:cake_wallet/src/widgets/picker.dart';
6 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
7 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
8 +import 'package:cake_wallet/themes/extensions/keyboard_theme.dart';
9 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
10 import 'package:cw_core/wallet_type.dart';
11 import 'package:cake_wallet/src/screens/buy/widgets/buy_list_item.dart';
12 import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
@@ -58,9 +62,6 @@ class PreOrderPage extends BasePage {
62 @override
63 String get title => S.current.buy + ' ' + walletTypeToString(buyViewModel.wallet.type);
64
61 - @override
62 - Color get titleColor => Colors.white;
63 -
65 @override
66 bool get resizeToAvoidBottomInset => false;
67
@@ -80,10 +81,7 @@ class PreOrderPage extends BasePage {
81 return KeyboardActions(
82 config: KeyboardActionsConfig(
83 keyboardActionsPlatform: KeyboardActionsPlatform.IOS,
83 - keyboardBarColor: Theme.of(context)
84 - .accentTextTheme!
85 - .bodyLarge!
86 - .backgroundColor!,
84 + keyboardBarColor: Theme.of(context).extension<KeyboardTheme>()!.keyboardBarColor,
85 nextFocus: false,
86 actions: [
87 KeyboardActionsItem(
@@ -104,10 +102,8 @@ class PreOrderPage extends BasePage {
102 bottomLeft: Radius.circular(24),
103 bottomRight: Radius.circular(24)),
104 gradient: LinearGradient(colors: [
107 - Theme.of(context).primaryTextTheme!.titleMedium!.color!,
108 - Theme.of(context)
109 - .primaryTextTheme!.titleMedium!
110 - .decorationColor!,
105 + Theme.of(context).extension<SendPageTheme>()!.firstGradientColor,
106 + Theme.of(context).extension<SendPageTheme>()!.secondGradientColor,
107 ], begin: Alignment.topLeft, end: Alignment.bottomRight),
108 ),
109 child: Padding(
@@ -162,11 +158,11 @@ class PreOrderPage extends BasePage {
158 ),
159 ),
160 hintText: '0.00',
165 - borderColor: Theme.of(context).primaryTextTheme!.bodyLarge!.decorationColor!,
161 + borderColor: Theme.of(context).extension<ExchangePageTheme>()!.textFieldBorderBottomPanelColor,
162 borderWidth: 0.5,
163 textStyle: TextStyle(fontSize: 36, fontWeight: FontWeight.w500, color: Colors.white),
164 placeholderTextStyle: TextStyle(
169 - color: Theme.of(context).primaryTextTheme!.headlineSmall!.decorationColor!,
165 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldHintColor,
166 fontWeight: FontWeight.w500,
167 fontSize: 36,
168 ),
@@ -181,7 +177,7 @@ class PreOrderPage extends BasePage {
177 S.of(context).buy_with + ':',
178 textAlign: TextAlign.center,
179 style: TextStyle(
184 - color: Theme.of(context).primaryTextTheme.titleLarge!.color!,
180 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
181 fontSize: 18,
182 fontWeight: FontWeight.bold
183 ),
@@ -248,7 +244,7 @@ class PreOrderPage extends BasePage {
244 ? S.of(context).buy
245 : S.of(context).buy_with +
246 ' ${buyViewModel.selectedProvider!.description.title}',
251 - color: Theme.of(context).accentTextTheme!.bodyLarge!.color!,
247 + color: Theme.of(context).primaryColor,
248 textColor: Colors.white,
249 isLoading: buyViewModel.isRunning,
250 isDisabled: (buyViewModel.selectedProvider == null) ||
lib/src/screens/contact/contact_list_page.dart
+13 -21
@@ -1,6 +1,7 @@
1 import 'package:cake_wallet/core/auth_service.dart';
2 import 'package:cake_wallet/entities/contact_base.dart';
3 import 'package:cake_wallet/entities/contact_record.dart';
4 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
5 import 'package:cake_wallet/utils/show_bar.dart';
6 import 'package:cake_wallet/utils/show_pop_up.dart';
7 import 'package:flutter/material.dart';
@@ -32,13 +33,13 @@ class ContactListPage extends BasePage {
33 height: 32.0,
34 decoration: BoxDecoration(
35 shape: BoxShape.circle,
35 - color: Theme.of(context).accentTextTheme!.bodySmall!.color!),
36 + color: Theme.of(context).extension<ExchangePageTheme>()!.buttonBackgroundColor),
37 child: Stack(
38 alignment: Alignment.center,
39 children: <Widget>[
40 Icon(
41 Icons.add,
41 - color: Theme.of(context).primaryTextTheme.titleLarge!.color!,
42 + color: Theme.of(context).dialogTheme.backgroundColor,
43 size: 22.0,
44 ),
45 ButtonTheme(
@@ -48,17 +49,15 @@ class ContactListPage extends BasePage {
49 // FIX-ME: Style
50 //shape: CircleBorder(),
51 onPressed: () async {
51 - if (contactListViewModel
52 - .shouldRequireTOTP2FAForAddingContacts) {
52 + if (contactListViewModel.shouldRequireTOTP2FAForAddingContacts) {
53 authService.authenticateAction(
54 context,
55 route: Routes.addressBookAddContact,
56 - conditionToDetermineIfToUse2FA: contactListViewModel
57 - .shouldRequireTOTP2FAForAddingContacts,
56 + conditionToDetermineIfToUse2FA:
57 + contactListViewModel.shouldRequireTOTP2FAForAddingContacts,
58 );
59 } else {
60 - await Navigator.of(context)
61 - .pushNamed(Routes.addressBookAddContact);
60 + await Navigator.of(context).pushNamed(Routes.addressBookAddContact);
61 }
62 },
63 child: Offstage()),
@@ -77,12 +76,8 @@ class ContactListPage extends BasePage {
76 final contacts = contactListViewModel.contactsToShow;
77 final walletContacts = contactListViewModel.walletContactsToShow;
78 return CollapsibleSectionList(
80 - context: context,
79 sectionCount: 2,
82 - themeColor: Theme.of(context).primaryTextTheme.titleLarge!.color!,
83 - dividerThemeColor:
84 - Theme.of(context).primaryTextTheme.bodySmall!.decorationColor!,
85 - sectionTitleBuilder: (_, int sectionIndex) {
80 + sectionTitleBuilder: (int sectionIndex) {
81 var title = S.current.contact_list_contacts;
82
83 if (sectionIndex == 0) {
@@ -95,7 +90,7 @@ class ContactListPage extends BasePage {
90 },
91 itemCounter: (int sectionIndex) =>
92 sectionIndex == 0 ? walletContacts.length : contacts.length,
98 - itemBuilder: (_, sectionIndex, index) {
93 + itemBuilder: (int sectionIndex, index) {
94 if (sectionIndex == 0) {
95 final walletInfo = walletContacts[index];
96 return generateRaw(context, walletInfo);
@@ -128,8 +123,7 @@ class ContactListPage extends BasePage {
123 return;
124 }
125
131 - final isCopied = await showNameAndAddressDialog(
132 - context, contact.name, contact.address);
126 + final isCopied = await showNameAndAddressDialog(context, contact.name, contact.address);
127
128 if (isCopied) {
129 await Clipboard.setData(ClipboardData(text: contact.address));
@@ -152,7 +146,7 @@ class ContactListPage extends BasePage {
146 style: TextStyle(
147 fontSize: 14,
148 fontWeight: FontWeight.normal,
155 - color: Theme.of(context).primaryTextTheme.titleLarge!.color!,
149 + color: Theme.of(context).dialogTheme.backgroundColor,
150 ),
151 ),
152 ))
@@ -177,8 +171,7 @@ class ContactListPage extends BasePage {
171 false;
172 }
173
180 - Future<bool> showNameAndAddressDialog(
181 - BuildContext context, String name, String address) async {
174 + Future<bool> showNameAndAddressDialog(BuildContext context, String name, String address) async {
175 return await showPopUp<bool>(
176 context: context,
177 builder: (BuildContext context) {
@@ -193,8 +186,7 @@ class ContactListPage extends BasePage {
186 false;
187 }
188
196 - ActionPane _actionPane(BuildContext context, ContactRecord contact) =>
197 - ActionPane(
189 + ActionPane _actionPane(BuildContext context, ContactRecord contact) => ActionPane(
190 motion: const ScrollMotion(),
191 extentRatio: 0.4,
192 children: [
lib/src/screens/contact/contact_page.dart
+7 -13
@@ -1,5 +1,6 @@
1 import 'package:cake_wallet/core/address_validator.dart';
2 import 'package:cake_wallet/palette.dart';
3 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
4 import 'package:cake_wallet/utils/show_pop_up.dart';
5 import 'package:cw_core/currency.dart';
6 import 'package:flutter/material.dart';
@@ -17,6 +18,8 @@ import 'package:cake_wallet/src/widgets/address_text_field.dart';
18 import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
19 import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
20 import 'package:cake_wallet/src/screens/exchange/widgets/currency_picker.dart';
21 +import 'package:cake_wallet/themes/extensions/address_theme.dart';
22 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
23
24 class ContactPage extends BasePage {
25 ContactPage(this.contactViewModel)
@@ -47,7 +50,7 @@ class ContactPage extends BasePage {
50 @override
51 Widget body(BuildContext context) {
52 final downArrow = Image.asset('assets/images/arrow_bottom_purple_icon.png',
50 - color: Theme.of(context).primaryTextTheme!.labelSmall!.color!,
53 + color: Theme.of(context).extension<TransactionTradeTheme>()!.detailsTitlesColor,
54 height: 8);
55
56 reaction((_) => contactViewModel.state, (ExecutionState state) {
@@ -99,15 +102,9 @@ class ContactPage extends BasePage {
102 AddressTextFieldOption.paste,
103 AddressTextFieldOption.qrCode,
104 ],
102 - buttonColor: Theme.of(context)
103 - .accentTextTheme!
104 - .displaySmall!
105 - .color!,
105 + buttonColor: Theme.of(context).extension<AddressTheme>()!.actionButtonColor,
106 iconColor: PaletteDark.gray,
107 - borderColor: Theme.of(context)
108 - .primaryTextTheme!
109 - .titleLarge!
110 - .backgroundColor!,
107 + borderColor: Theme.of(context).extension<CakeTextTheme>()!.textfieldUnderlineColor,
108 validator:
109 AddressValidator(type: contactViewModel.currency!),
110 ),
@@ -143,10 +140,7 @@ class ContactPage extends BasePage {
140 await contactViewModel.save();
141 },
142 text: S.of(context).save,
146 - color: Theme.of(context)
147 - .accentTextTheme!
148 - .bodyLarge!
149 - .color!,
143 + color: Theme.of(context).primaryColor,
144 textColor: Colors.white,
145 isDisabled: !contactViewModel.isReady)))
146 ],
lib/src/screens/dashboard/dashboard_page.dart
+19 -34
@@ -4,6 +4,8 @@ import 'package:cake_wallet/di.dart';
4 import 'package:cake_wallet/entities/main_actions.dart';
5 import 'package:cake_wallet/src/screens/dashboard/desktop_widgets/desktop_sidebar_wrapper.dart';
6 import 'package:cake_wallet/src/screens/dashboard/widgets/market_place_page.dart';
7 +import 'package:cake_wallet/src/widgets/gradient_background.dart';
8 +import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart';
9 import 'package:cake_wallet/utils/device_info.dart';
10 import 'package:cake_wallet/utils/version_comparator.dart';
11 import 'package:cake_wallet/view_model/dashboard/market_place_view_model.dart';
@@ -29,6 +31,8 @@ import 'package:shared_preferences/shared_preferences.dart';
31 import 'package:smooth_page_indicator/smooth_page_indicator.dart';
32 import 'package:cake_wallet/main.dart';
33 import 'package:cake_wallet/src/screens/release_notes/release_notes_screen.dart';
34 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
35 +import 'package:cake_wallet/themes/extensions/balance_page_theme.dart';
36
37 class DashboardPage extends StatelessWidget {
38 DashboardPage({
@@ -81,28 +85,11 @@ class _DashboardPageView extends BasePage {
85 final BalancePage balancePage;
86
87 @override
84 - Color get backgroundLightColor =>
85 - currentTheme.type == ThemeType.bright ? Colors.transparent : Colors.white;
86 -
87 - @override
88 - Color get backgroundDarkColor => Colors.transparent;
88 + bool get gradientBackground => true;
89
90 @override
91 Widget Function(BuildContext, Widget) get rootWrapper =>
92 - (BuildContext context, Widget scaffold) => Container(
93 - decoration: BoxDecoration(
94 - gradient: LinearGradient(
95 - colors: [
96 - Theme.of(context).colorScheme.secondary,
97 - Theme.of(context).scaffoldBackgroundColor,
98 - Theme.of(context).primaryColor,
99 - ],
100 - begin: Alignment.topRight,
101 - end: Alignment.bottomLeft,
102 - ),
103 - ),
104 - child: scaffold,
105 - );
92 + (BuildContext context, Widget scaffold) => GradientBackground(scaffold: scaffold);
93
94 @override
95 bool get resizeToAvoidBottomInset => false;
@@ -199,8 +186,10 @@ class _DashboardPageView extends BasePage {
186 dotWidth: 6.0,
187 dotHeight: 6.0,
188 dotColor: Theme.of(context).indicatorColor,
202 - activeDotColor:
203 - Theme.of(context).accentTextTheme.headlineMedium!.backgroundColor!,
189 + activeDotColor: Theme.of(context)
190 + .extension<DashboardPageTheme>()!
191 + .indicatorDotTheme
192 + .activeIndicatorColor,
193 ),
194 ),
195 );
@@ -216,12 +205,11 @@ class _DashboardPageView extends BasePage {
205 decoration: BoxDecoration(
206 borderRadius: BorderRadius.circular(50.0),
207 border: Border.all(
219 - color: currentTheme.type == ThemeType.bright
220 - ? Color.fromRGBO(255, 255, 255, 0.2)
221 - : Colors.transparent,
208 + color: Theme.of(context).extension<BalancePageTheme>()!.cardBorderColor,
209 width: 1,
210 ),
224 - color: Theme.of(context).textTheme.titleLarge!.backgroundColor!,
211 + color:
212 + Theme.of(context).extension<SyncIndicatorTheme>()!.syncedBackgroundColor,
213 ),
214 child: Container(
215 padding: EdgeInsets.only(left: 32, right: 32),
@@ -240,13 +228,11 @@ class _DashboardPageView extends BasePage {
228 width: 24,
229 color: action.isEnabled?.call(dashboardViewModel) ?? true
230 ? Theme.of(context)
243 - .accentTextTheme
244 - .displayMedium!
245 - .backgroundColor!
231 + .extension<DashboardPageTheme>()!
232 + .mainActionsIconColor
233 : Theme.of(context)
247 - .accentTextTheme
248 - .displaySmall!
249 - .backgroundColor!,
234 + .extension<BalancePageTheme>()!
235 + .labelTextColor,
236 ),
237 title: action.name(context),
238 onClick: () async =>
@@ -254,9 +240,8 @@ class _DashboardPageView extends BasePage {
240 textColor: action.isEnabled?.call(dashboardViewModel) ?? true
241 ? null
242 : Theme.of(context)
257 - .accentTextTheme
258 - .displaySmall!
259 - .backgroundColor!,
243 + .extension<BalancePageTheme>()!
244 + .labelTextColor,
245 ),
246 ),
247 )
lib/src/screens/dashboard/desktop_widgets/desktop_action_button.dart
+7 -13
@@ -1,4 +1,7 @@
1 import 'package:auto_size_text/auto_size_text.dart';
2 +import 'package:cake_wallet/themes/extensions/balance_page_theme.dart';
3 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
4 +import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart';
5 import 'package:flutter/material.dart';
6
7 class DesktopActionButton extends StatelessWidget {
@@ -30,7 +33,7 @@ class DesktopActionButton extends StatelessWidget {
33 width: double.infinity,
34 decoration: BoxDecoration(
35 borderRadius: BorderRadius.circular(15.0),
33 - color: Theme.of(context).textTheme!.titleLarge!.backgroundColor!,
36 + color: Theme.of(context).extension<SyncIndicatorTheme>()!.syncedBackgroundColor,
37 ),
38 child: Center(
39 child: Row(
@@ -41,14 +44,8 @@ class DesktopActionButton extends StatelessWidget {
44 height: 30,
45 width: 30,
46 color: isEnabled
44 - ? Theme.of(context)
45 - .accentTextTheme!
46 - .displayMedium!
47 - .backgroundColor!
48 - : Theme.of(context)
49 - .accentTextTheme!
50 - .displaySmall!
51 - .backgroundColor!,
47 + ? Theme.of(context).extension<DashboardPageTheme>()!.textColor
48 + : Theme.of(context).extension<BalancePageTheme>()!.labelTextColor,
49 ),
50 const SizedBox(width: 10),
51 AutoSizeText(
@@ -58,10 +55,7 @@ class DesktopActionButton extends StatelessWidget {
55 fontFamily: 'Lato',
56 fontWeight: FontWeight.bold,
57 color: isEnabled
61 - ? Theme.of(context)
62 - .accentTextTheme!
63 - .displayMedium!
64 - .backgroundColor!
58 + ? Theme.of(context).extension<DashboardPageTheme>()!.textColor
59 : null,
60 height: 1,
61 ),
lib/src/screens/dashboard/desktop_widgets/desktop_sidebar/side_menu_item.dart
+2 -1
@@ -1,4 +1,5 @@
1 import 'package:flutter/material.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3
4 class SideMenuItem extends StatelessWidget {
5 const SideMenuItem({
@@ -16,7 +17,7 @@ class SideMenuItem extends StatelessWidget {
17
18 Color _setColor(BuildContext context) {
19 if (isSelected) {
19 - return Theme.of(context).primaryTextTheme!.titleLarge!.color!;
20 + return Theme.of(context).extension<CakeTextTheme>()!.titleColor;
21 } else {
22 return Theme.of(context).highlightColor;
23 }
lib/src/screens/dashboard/desktop_widgets/desktop_wallet_selection_dropdown.dart
+6 -4
@@ -1,10 +1,12 @@
1 import 'package:another_flushbar/flushbar.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 import 'package:cake_wallet/core/auth_service.dart';
4 import 'package:cake_wallet/entities/desktop_dropdown_item.dart';
5 import 'package:cake_wallet/generated/i18n.dart';
6 import 'package:cake_wallet/routes.dart';
7 import 'package:cake_wallet/src/screens/dashboard/desktop_widgets/dropdown_item_widget.dart';
8 import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
9 +import 'package:cake_wallet/themes/extensions/menu_theme.dart';
10 import 'package:cake_wallet/utils/show_bar.dart';
11 import 'package:cake_wallet/utils/show_pop_up.dart';
12 import 'package:cake_wallet/view_model/wallet_list/wallet_list_item.dart';
@@ -37,14 +39,14 @@ class _DesktopWalletSelectionDropDownState extends State<DesktopWalletSelectionD
39 'assets/images/new_wallet.png',
40 height: 12,
41 width: 12,
40 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
42 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
43 );
44
45 Image _restoreWalletImage(BuildContext context) => Image.asset(
46 'assets/images/restore_wallet.png',
47 height: 12,
48 width: 12,
47 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
49 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
50 );
51
52 Flushbar<void>? _progressBar;
@@ -94,8 +96,8 @@ class _DesktopWalletSelectionDropDownState extends State<DesktopWalletSelectionD
96 onChanged: (item) {
97 item?.onSelected();
98 },
97 - dropdownColor: themeData.textTheme!.bodyLarge?.decorationColor,
98 - style: TextStyle(color: themeData.primaryTextTheme!.titleLarge?.color),
99 + dropdownColor: themeData.extension<CakeMenuTheme>()!.backgroundColor,
100 + style: TextStyle(color: themeData.extension<CakeTextTheme>()!.titleColor),
101 selectedItemBuilder: (context) => dropDownItems.map((item) => item.child).toList(),
102 value: dropDownItems.firstWhere((element) => element.isSelected),
103 underline: const SizedBox(),
lib/src/screens/dashboard/desktop_widgets/dropdown_item_widget.dart
+2 -1
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:flutter/material.dart';
3
4 class DropDownItemWidget extends StatelessWidget {
@@ -23,7 +24,7 @@ class DropDownItemWidget extends StatelessWidget {
24 style: TextStyle(
25 fontSize: 22,
26 fontWeight: FontWeight.w500,
26 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
27 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
28 ),
29 overflow: TextOverflow.ellipsis,
30 maxLines: 1,
lib/src/screens/dashboard/edit_token_page.dart
+5 -4
@@ -6,6 +6,7 @@ import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
6 import 'package:cake_wallet/src/widgets/checkbox_widget.dart';
7 import 'package:cake_wallet/src/widgets/primary_button.dart';
8 import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
9 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
10 import 'package:cake_wallet/view_model/dashboard/home_settings_view_model.dart';
11 import 'package:cw_core/erc20_token.dart';
12 import 'package:flutter/material.dart';
@@ -111,7 +112,7 @@ class _EditTokenPageBodyState extends State<EditTokenPageBody> {
112 Container(
113 padding: EdgeInsets.symmetric(vertical: 16, horizontal: 28),
114 decoration: BoxDecoration(
114 - color: Theme.of(context).accentTextTheme.bodySmall!.color!,
115 + color: Theme.of(context).cardColor,
116 borderRadius: BorderRadius.circular(12),
117 ),
118 child: Row(
@@ -128,7 +129,7 @@ class _EditTokenPageBodyState extends State<EditTokenPageBody> {
129 style: TextStyle(
130 fontSize: 16,
131 fontWeight: FontWeight.w500,
131 - color: Theme.of(context).primaryTextTheme.titleLarge!.color!,
132 + color: Theme.of(context).dialogTheme.backgroundColor,
133 ),
134 ),
135 Padding(
@@ -138,7 +139,7 @@ class _EditTokenPageBodyState extends State<EditTokenPageBody> {
139 style: TextStyle(
140 fontSize: 14,
141 fontWeight: FontWeight.normal,
141 - color: Theme.of(context).primaryTextTheme.labelSmall!.color!,
142 + color: Theme.of(context).extension<TransactionTradeTheme>()!.detailsTitlesColor,
143 ),
144 ),
145 ),
@@ -197,7 +198,7 @@ class _EditTokenPageBodyState extends State<EditTokenPageBody> {
198 }
199 },
200 text: S.of(context).save,
200 - color: Theme.of(context).accentTextTheme.bodyLarge!.color!,
201 + color: Theme.of(context).primaryColor,
202 textColor: Colors.white,
203 ),
204 ),
lib/src/screens/dashboard/home_settings_page.dart
+10 -8
@@ -7,6 +7,8 @@ import 'package:cake_wallet/routes.dart';
7 import 'package:cake_wallet/src/screens/base_page.dart';
8 import 'package:cake_wallet/src/screens/settings/widgets/settings_picker_cell.dart';
9 import 'package:cake_wallet/src/screens/settings/widgets/settings_switcher_cell.dart';
10 +import 'package:cake_wallet/themes/extensions/address_theme.dart';
11 +import 'package:cake_wallet/themes/extensions/menu_theme.dart';
12 import 'package:cake_wallet/view_model/dashboard/home_settings_view_model.dart';
13 import 'package:flutter/material.dart';
14 import 'package:flutter_mobx/flutter_mobx.dart';
@@ -34,7 +36,7 @@ class HomeSettingsPage extends BasePage {
36 onItemSelected: _homeSettingsViewModel.setSortBalanceBy,
37 ),
38 ),
37 - Divider(color: Theme.of(context).primaryTextTheme.bodySmall!.decorationColor!),
39 + Divider(color: Theme.of(context).extension<CakeMenuTheme>()!.dividerColor),
40 Observer(
41 builder: (_) => SettingsSwitcherCell(
42 title: S.of(context).pin_at_top(_homeSettingsViewModel.nativeToken.title),
@@ -44,7 +46,7 @@ class HomeSettingsPage extends BasePage {
46 },
47 ),
48 ),
47 - Divider(color: Theme.of(context).primaryTextTheme.bodySmall!.decorationColor!),
49 + Divider(color: Theme.of(context).extension<CakeMenuTheme>()!.dividerColor),
50 const SizedBox(height: 20),
51 Row(
52 children: [
@@ -53,12 +55,12 @@ class HomeSettingsPage extends BasePage {
55 padding: const EdgeInsetsDirectional.only(start: 16),
56 child: TextFormField(
57 controller: _searchController,
56 - style: TextStyle(color: Theme.of(context).primaryTextTheme.titleLarge!.color!),
58 + style: TextStyle(color: Theme.of(context).dialogTheme.backgroundColor),
59 decoration: InputDecoration(
60 hintText: S.of(context).search_add_token,
61 prefixIcon: Image.asset("assets/images/search_icon.png"),
62 filled: true,
61 - fillColor: Theme.of(context).accentTextTheme.displaySmall!.color!,
63 + fillColor: Theme.of(context).extension<AddressTheme>()!.actionButtonColor,
64 alignLabelWithHint: false,
65 contentPadding: const EdgeInsets.symmetric(vertical: 4, horizontal: 16),
66 enabledBorder: OutlineInputBorder(
@@ -84,15 +86,15 @@ class HomeSettingsPage extends BasePage {
86 });
87 },
88 elevation: 0,
87 - fillColor: Theme.of(context).accentTextTheme.bodySmall!.color!,
89 + fillColor: Theme.of(context).cardColor,
90 child: Icon(
91 Icons.add,
90 - color: Theme.of(context).primaryTextTheme.titleLarge!.color!,
92 + color: Theme.of(context).dialogTheme.backgroundColor,
93 size: 22.0,
94 ),
95 padding: EdgeInsets.all(12),
96 shape: CircleBorder(),
95 - splashColor: Theme.of(context).accentTextTheme.bodySmall!.color!,
97 + splashColor: Theme.of(context).cardColor,
98 ),
99 ],
100 ),
@@ -146,7 +148,7 @@ class HomeSettingsPage extends BasePage {
148 ),
149 ),
150 decoration: BoxDecoration(
149 - color: Theme.of(context).accentTextTheme.bodySmall!.color!,
151 + color: Theme.of(context).cardColor,
152 borderRadius: BorderRadius.circular(30),
153 ),
154 );
lib/src/screens/dashboard/widgets/action_button.dart
+3 -5
@@ -1,4 +1,5 @@
1 import 'package:flutter/material.dart';
2 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
3
4 class ActionButton extends StatelessWidget {
5 ActionButton(
@@ -46,14 +47,11 @@ class ActionButton extends StatelessWidget {
47 style: TextStyle(
48 fontSize: 10,
49 color: textColor ??
49 - Theme.of(context)
50 - .accentTextTheme!
51 - .displayMedium!
52 - .backgroundColor!),
50 + Theme.of(context).extension<DashboardPageTheme>()!.cardTextColor),
51 )
52 ],
53 ),
54 ),
55 );
56 }
59 -}
\ No newline at end of file
57 +}
lib/src/screens/dashboard/widgets/address_page.dart
+21 -25
@@ -1,10 +1,15 @@
1 +import 'package:cake_wallet/themes/extensions/keyboard_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 import 'package:cake_wallet/anonpay/anonpay_donation_link_info.dart';
4 import 'package:cake_wallet/entities/preferences_key.dart';
5 import 'package:cake_wallet/entities/receive_page_option.dart';
6 import 'package:cake_wallet/src/screens/base_page.dart';
7 import 'package:cake_wallet/src/screens/dashboard/widgets/present_receive_option_picker.dart';
8 import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
9 +import 'package:cake_wallet/src/widgets/gradient_background.dart';
10 import 'package:cake_wallet/src/widgets/keyboard_done_button.dart';
11 +import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
12 +import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart';
13 import 'package:cake_wallet/themes/theme_base.dart';
14 import 'package:cake_wallet/utils/responsive_layout_util.dart';
15 import 'package:cake_wallet/utils/share_util.dart';
@@ -21,6 +26,8 @@ import 'package:keyboard_actions/keyboard_actions.dart';
26 import 'package:mobx/mobx.dart';
27 import 'package:shared_preferences/shared_preferences.dart';
28 import 'package:cake_wallet/di.dart';
29 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
30 +import 'package:cake_wallet/themes/extensions/balance_page_theme.dart';
31
32 class AddressPage extends BasePage {
33 AddressPage({
@@ -48,11 +55,7 @@ class AddressPage extends BasePage {
55 final FocusNode _cryptoAmountFocus;
56
57 @override
51 - Color get backgroundLightColor =>
52 - currentTheme.type == ThemeType.bright ? Colors.transparent : Colors.white;
53 -
54 - @override
55 - Color get backgroundDarkColor => Colors.transparent;
58 + bool get gradientBackground => true;
59
60 @override
61 bool get resizeToAvoidBottomInset => false;
@@ -84,7 +87,7 @@ class AddressPage extends BasePage {
87 overlayColor: MaterialStateColor.resolveWith((states) => Colors.transparent),
88 ),
89 onPressed: () => onClose(context),
87 - child: !isMobileView ? _closeButton : _backButton,
90 + child: !isMobileView ? closeButton(context) : backButton(context),
91 ),
92 ),
93 ),
@@ -94,20 +97,11 @@ class AddressPage extends BasePage {
97
98 @override
99 Widget middle(BuildContext context) => PresentReceiveOptionPicker(
97 - receiveOptionViewModel: receiveOptionViewModel,
98 - hasWhiteBackground: currentTheme.type == ThemeType.light,
99 - );
100 + color: titleColor(context), receiveOptionViewModel: receiveOptionViewModel);
101
102 @override
103 Widget Function(BuildContext, Widget) get rootWrapper =>
103 - (BuildContext context, Widget scaffold) => Container(
104 - decoration: BoxDecoration(
105 - gradient: LinearGradient(colors: [
106 - Theme.of(context).colorScheme.secondary,
107 - Theme.of(context).scaffoldBackgroundColor,
108 - Theme.of(context).primaryColor,
109 - ], begin: Alignment.topRight, end: Alignment.bottomLeft)),
110 - child: scaffold);
104 + (BuildContext context, Widget scaffold) => GradientBackground(scaffold: scaffold);
105
106 @override
107 Widget? trailing(BuildContext context) {
@@ -201,8 +195,13 @@ class AddressPage extends BasePage {
195 decoration: BoxDecoration(
196 borderRadius: BorderRadius.all(Radius.circular(25)),
197 border: Border.all(
204 - color: Theme.of(context).textTheme.titleMedium!.color!, width: 1),
205 - color: Theme.of(context).textTheme.titleLarge!.backgroundColor!),
198 + color: Theme.of(context)
199 + .extension<ReceivePageTheme>()!
200 + .iconsBackgroundColor,
201 + width: 1),
202 + color: Theme.of(context)
203 + .extension<SyncIndicatorTheme>()!
204 + .syncedBackgroundColor),
205 child: Row(
206 mainAxisSize: MainAxisSize.max,
207 mainAxisAlignment: MainAxisAlignment.spaceBetween,
@@ -215,15 +214,13 @@ class AddressPage extends BasePage {
214 style: TextStyle(
215 fontSize: 14,
216 fontWeight: FontWeight.w500,
218 - color: Theme.of(context)
219 - .accentTextTheme.displayMedium!
220 - .backgroundColor!),
217 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor),
218 )),
219 Icon(
220 Icons.arrow_forward_ios,
221 size: 14,
222 color:
226 - Theme.of(context).accentTextTheme.displayMedium!.backgroundColor!,
223 + Theme.of(context).extension<DashboardPageTheme>()!.textColor,
224 )
225 ],
226 ),
@@ -234,8 +231,7 @@ class AddressPage extends BasePage {
231 textAlign: TextAlign.center,
232 style: TextStyle(
233 fontSize: 15,
237 - color:
238 - Theme.of(context).accentTextTheme.displaySmall!.backgroundColor!));
234 + color: Theme.of(context).extension<BalancePageTheme>()!.labelTextColor));
235 } else {
236 return const SizedBox();
237 }
lib/src/screens/dashboard/widgets/anonpay_transaction_row.dart
+5 -3
@@ -1,4 +1,6 @@
1 import 'package:flutter/material.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
4
5 class AnonpayTransactionRow extends StatelessWidget {
6 AnonpayTransactionRow({
@@ -37,19 +39,19 @@ class AnonpayTransactionRow extends StatelessWidget {
39 style: TextStyle(
40 fontSize: 16,
41 fontWeight: FontWeight.w500,
40 - color: Theme.of(context).accentTextTheme!.displayMedium!.backgroundColor!)),
42 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor)),
43 Text(amount + ' ' + currency,
44 style: TextStyle(
45 fontSize: 16,
46 fontWeight: FontWeight.w500,
45 - color: Theme.of(context).accentTextTheme!.displayMedium!.backgroundColor!))
47 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor))
48 ]),
49 SizedBox(height: 5),
50 Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: <Widget>[
51 Text(createdAt,
52 style: TextStyle(
53 fontSize: 14,
52 - color: Theme.of(context).textTheme!.labelSmall!.backgroundColor!))
54 + color: Theme.of(context).extension<CakeTextTheme>()!.dateSectionRowColor))
55 ])
56 ],
57 ))
lib/src/screens/dashboard/widgets/balance_page.dart
+23 -24
@@ -1,6 +1,7 @@
1 import 'package:cake_wallet/routes.dart';
2 import 'package:cake_wallet/src/screens/exchange_trade/information_page.dart';
3 import 'package:cake_wallet/store/settings_store.dart';
4 +import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart';
5 import 'package:cake_wallet/themes/theme_base.dart';
6 import 'package:cake_wallet/utils/feature_flag.dart';
7 import 'package:cake_wallet/utils/show_pop_up.dart';
@@ -10,6 +11,8 @@ import 'package:flutter_mobx/flutter_mobx.dart';
11 import 'package:auto_size_text/auto_size_text.dart';
12 import 'package:cake_wallet/src/widgets/introducing_card.dart';
13 import 'package:cake_wallet/generated/i18n.dart';
14 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
15 +import 'package:cake_wallet/themes/extensions/balance_page_theme.dart';
16
17 class BalancePage extends StatelessWidget {
18 BalancePage({required this.dashboardViewModel, required this.settingsStore});
@@ -41,7 +44,8 @@ class BalancePage extends StatelessWidget {
44 fontSize: 24,
45 fontFamily: 'Lato',
46 fontWeight: FontWeight.w600,
44 - color: Theme.of(context).accentTextTheme.displayMedium!.backgroundColor!,
47 + color:
48 + Theme.of(context).extension<DashboardPageTheme>()!.pageTitleTextColor,
49 height: 1,
50 ),
51 maxLines: 1,
@@ -55,8 +59,9 @@ class BalancePage extends StatelessWidget {
59 padding: const EdgeInsets.all(8.0),
60 child: Image.asset(
61 'assets/images/home_screen_settings_icon.png',
58 - color:
59 - Theme.of(context).accentTextTheme.displayMedium!.backgroundColor!,
62 + color: Theme.of(context)
63 + .extension<DashboardPageTheme>()!
64 + .pageTitleTextColor,
65 ),
66 ),
67 ),
@@ -139,7 +144,7 @@ class BalancePage extends StatelessWidget {
144 : Colors.transparent,
145 width: 1,
146 ),
142 - color: Theme.of(context).textTheme.titleLarge!.backgroundColor!,
147 + color: Theme.of(context).extension<SyncIndicatorTheme>()!.syncedBackgroundColor,
148 ),
149 child: Container(
150 margin: const EdgeInsets.only(top: 16, left: 24, right: 24, bottom: 24),
@@ -164,9 +169,8 @@ class BalancePage extends StatelessWidget {
169 fontFamily: 'Lato',
170 fontWeight: FontWeight.w400,
171 color: Theme.of(context)
167 - .accentTextTheme!
168 - .displaySmall!
169 - .backgroundColor!,
172 + .extension<BalancePageTheme>()!
173 + .labelTextColor,
174 height: 1)),
175 if (hasAdditionalBalance)
176 Padding(
@@ -174,9 +178,8 @@ class BalancePage extends StatelessWidget {
178 child: Icon(Icons.help_outline,
179 size: 16,
180 color: Theme.of(context)
177 - .accentTextTheme!
178 - .displaySmall!
179 - .backgroundColor!),
181 + .extension<BalancePageTheme>()!
182 + .labelTextColor),
183 ),
184 ],
185 ),
@@ -187,9 +190,8 @@ class BalancePage extends StatelessWidget {
190 fontFamily: 'Lato',
191 fontWeight: FontWeight.w900,
192 color: Theme.of(context)
190 - .accentTextTheme!
191 - .displayMedium!
192 - .backgroundColor!,
193 + .extension<BalancePageTheme>()!
194 + .balanceAmountColor,
195 height: 1),
196 maxLines: 1,
197 textAlign: TextAlign.start),
@@ -200,10 +202,7 @@ class BalancePage extends StatelessWidget {
202 fontSize: 16,
203 fontFamily: 'Lato',
204 fontWeight: FontWeight.w500,
203 - color: Theme.of(context)
204 - .accentTextTheme!
205 - .displayMedium!
206 - .backgroundColor!,
205 + color: Theme.of(context).extension<BalancePageTheme>()!.textColor,
206 height: 1)),
207 ],
208 ),
@@ -213,7 +212,7 @@ class BalancePage extends StatelessWidget {
212 fontSize: 28,
213 fontFamily: 'Lato',
214 fontWeight: FontWeight.w800,
216 - color: Theme.of(context).accentTextTheme!.displayMedium!.backgroundColor!,
215 + color: Theme.of(context).extension<BalancePageTheme>()!.assetTitleColor,
216 height: 1)),
217 ],
218 ),
@@ -229,7 +228,7 @@ class BalancePage extends StatelessWidget {
228 fontSize: 12,
229 fontFamily: 'Lato',
230 fontWeight: FontWeight.w400,
232 - color: Theme.of(context).accentTextTheme.displaySmall!.backgroundColor!,
231 + color: Theme.of(context).extension<BalancePageTheme>()!.labelTextColor,
232 height: 1,
233 ),
234 ),
@@ -240,7 +239,7 @@ class BalancePage extends StatelessWidget {
239 fontSize: 20,
240 fontFamily: 'Lato',
241 fontWeight: FontWeight.w400,
243 - color: Theme.of(context).accentTextTheme.displayMedium!.backgroundColor!,
242 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
243 height: 1,
244 ),
245 maxLines: 1,
@@ -254,7 +253,7 @@ class BalancePage extends StatelessWidget {
253 fontSize: 12,
254 fontFamily: 'Lato',
255 fontWeight: FontWeight.w400,
257 - color: Theme.of(context).accentTextTheme.displayMedium!.backgroundColor!,
256 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
257 height: 1,
258 ),
259 ),
@@ -272,7 +271,7 @@ class BalancePage extends StatelessWidget {
271 fontSize: 12,
272 fontFamily: 'Lato',
273 fontWeight: FontWeight.w400,
275 - color: Theme.of(context).accentTextTheme.displaySmall!.backgroundColor!,
274 + color: Theme.of(context).extension<BalancePageTheme>()!.labelTextColor,
275 height: 1,
276 ),
277 ),
@@ -283,7 +282,7 @@ class BalancePage extends StatelessWidget {
282 fontSize: 20,
283 fontFamily: 'Lato',
284 fontWeight: FontWeight.w400,
286 - color: Theme.of(context).accentTextTheme.displayMedium!.backgroundColor!,
285 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
286 height: 1,
287 ),
288 maxLines: 1,
@@ -297,7 +296,7 @@ class BalancePage extends StatelessWidget {
296 fontSize: 12,
297 fontFamily: 'Lato',
298 fontWeight: FontWeight.w400,
300 - color: Theme.of(context).accentTextTheme.displayMedium!.backgroundColor!,
299 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
300 height: 1,
301 ),
302 ),
lib/src/screens/dashboard/widgets/date_section_raw.dart
+2 -4
@@ -1,4 +1,5 @@
1 import 'package:flutter/material.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 import 'package:intl/intl.dart';
4 import 'package:cake_wallet/generated/i18n.dart';
5 import 'package:cake_wallet/utils/date_formatter.dart';
@@ -36,9 +37,6 @@ class DateSectionRaw extends StatelessWidget {
37 child: Text(title,
38 style: TextStyle(
39 fontSize: 12,
39 - color: Theme.of(context)
40 - .textTheme!
41 - .labelSmall!
42 - .backgroundColor!)));
40 + color: Theme.of(context).extension<CakeTextTheme>()!.dateSectionRowColor)));
41 }
42 }
lib/src/screens/dashboard/widgets/filter_widget.dart
+7 -10
@@ -1,12 +1,15 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:cake_wallet/src/screens/dashboard/widgets/filter_tile.dart';
3 import 'package:cake_wallet/src/widgets/section_divider.dart';
4 import 'package:cake_wallet/src/widgets/standard_checkbox.dart';
5 +import 'package:cake_wallet/themes/extensions/menu_theme.dart';
6 import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
7 import 'package:flutter/material.dart';
8 import 'package:cake_wallet/src/widgets/picker_wrapper_widget.dart';
9 import 'package:cake_wallet/generated/i18n.dart';
10 import 'package:flutter_mobx/flutter_mobx.dart';
11 //import 'package:date_range_picker/date_range_picker.dart' as date_rage_picker;
12 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
13
14 class FilterWidget extends StatelessWidget {
15 FilterWidget({required this.dashboardViewModel});
@@ -15,7 +18,7 @@ class FilterWidget extends StatelessWidget {
18
19 @override
20 Widget build(BuildContext context) {
18 - const sectionDivider = const SectionDivider();
21 + const sectionDivider = const HorizontalSectionDivider();
22 return PickerWrapperWidget(
23 children: [
24 Padding(
@@ -23,7 +26,7 @@ class FilterWidget extends StatelessWidget {
26 child: ClipRRect(
27 borderRadius: BorderRadius.all(Radius.circular(24)),
28 child: Container(
26 - color: Theme.of(context).textTheme!.bodyLarge!.decorationColor!,
29 + color: Theme.of(context).extension<CakeMenuTheme>()!.backgroundColor,
30 child: Column(
31 crossAxisAlignment: CrossAxisAlignment.start,
32 children: [
@@ -32,10 +35,7 @@ class FilterWidget extends StatelessWidget {
35 child: Text(
36 S.of(context).filter_by,
37 style: TextStyle(
35 - color: Theme.of(context)
36 - .primaryTextTheme!
37 - .labelSmall!
38 - .color!,
38 + color: Theme.of(context).extension<TransactionTradeTheme>()!.detailsTitlesColor,
39 fontSize: 16,
40 fontFamily: 'Lato',
41 decoration: TextDecoration.none,
@@ -63,10 +63,7 @@ class FilterWidget extends StatelessWidget {
63 child: Text(
64 title,
65 style: TextStyle(
66 - color: Theme.of(context)
67 - .primaryTextTheme!
68 - .titleLarge!
69 - .color!,
66 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
67 fontSize: 16,
68 fontFamily: 'Lato',
69 fontWeight: FontWeight.bold,
lib/src/screens/dashboard/widgets/header_row.dart
+5 -6
@@ -1,8 +1,10 @@
1 import 'package:cake_wallet/src/screens/dashboard/widgets/filter_widget.dart';
2 +import 'package:cake_wallet/themes/extensions/filter_theme.dart';
3 import 'package:cake_wallet/utils/show_pop_up.dart';
4 import 'package:flutter/material.dart';
5 import 'package:cake_wallet/generated/i18n.dart';
6 import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
7 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
8
9 class HeaderRow extends StatelessWidget {
10 HeaderRow({required this.dashboardViewModel});
@@ -12,7 +14,7 @@ class HeaderRow extends StatelessWidget {
14 @override
15 Widget build(BuildContext context) {
16 final filterIcon = Image.asset('assets/images/filter_icon.png',
15 - color: Theme.of(context).textTheme!.bodySmall!.decorationColor!);
17 + color: Theme.of(context).extension<FilterTheme>()!.iconColor);
18
19 return Container(
20 height: 52,
@@ -27,10 +29,7 @@ class HeaderRow extends StatelessWidget {
29 style: TextStyle(
30 fontSize: 20,
31 fontWeight: FontWeight.w500,
30 - color: Theme.of(context)
31 - .accentTextTheme!
32 - .displayMedium!
33 - .backgroundColor!),
32 + color: Theme.of(context).extension<DashboardPageTheme>()!.pageTitleTextColor),
33 ),
34 GestureDetector(
35 onTap: () {
@@ -45,7 +44,7 @@ class HeaderRow extends StatelessWidget {
44 width: 36,
45 decoration: BoxDecoration(
46 shape: BoxShape.circle,
48 - color: Theme.of(context).textTheme!.labelSmall!.color!),
47 + color: Theme.of(context).extension<FilterTheme>()!.buttonColor),
48 child: filterIcon,
49 ),
50 )
lib/src/screens/dashboard/widgets/market_place_page.dart
+2 -4
@@ -8,6 +8,7 @@ import 'package:cw_core/wallet_type.dart';
8 import 'package:flutter/material.dart';
9 import 'package:cake_wallet/generated/i18n.dart';
10 import 'package:url_launcher/url_launcher.dart';
11 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
12
13 class MarketPlacePage extends StatelessWidget {
14 MarketPlacePage({
@@ -40,10 +41,7 @@ class MarketPlacePage extends StatelessWidget {
41 style: TextStyle(
42 fontSize: 24,
43 fontWeight: FontWeight.w500,
43 - color: Theme.of(context)
44 - .accentTextTheme!
45 - .displayMedium!
46 - .backgroundColor!,
44 + color: Theme.of(context).extension<DashboardPageTheme>()!.pageTitleTextColor,
45 ),
46 ),
47 Expanded(
lib/src/screens/dashboard/widgets/menu_widget.dart
+105 -116
@@ -1,13 +1,12 @@
1 import 'package:cake_wallet/src/widgets/setting_action_button.dart';
2 import 'package:cake_wallet/src/widgets/setting_actions.dart';
3 +import 'package:cake_wallet/themes/extensions/menu_theme.dart';
4 import 'package:flutter/material.dart';
5 import 'package:cake_wallet/palette.dart';
6 import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
7 import 'package:cw_core/wallet_type.dart';
8 import 'package:flutter_mobx/flutter_mobx.dart';
9
9 -// FIXME: terrible design.
10 -
10 class MenuWidget extends StatefulWidget {
11 MenuWidget(this.dashboardViewModel);
12
@@ -19,18 +18,18 @@ class MenuWidget extends StatefulWidget {
18
19 class MenuWidgetState extends State<MenuWidget> {
20 MenuWidgetState()
22 - : this.menuWidth = 0,
23 - this.screenWidth = 0,
24 - this.screenHeight = 0,
25 - this.headerHeight = 120,
26 - this.tileHeight = 60,
27 - this.fromTopEdge = 50,
28 - this.fromBottomEdge = 25,
29 - this.moneroIcon = Image.asset('assets/images/monero_menu.png'),
30 - this.bitcoinIcon = Image.asset('assets/images/bitcoin_menu.png'),
31 - this.litecoinIcon = Image.asset('assets/images/litecoin_menu.png'),
32 - this.havenIcon = Image.asset('assets/images/haven_menu.png'),
33 - this.ethereumIcon = Image.asset('assets/images/eth_icon.png');
21 + : this.menuWidth = 0,
22 + this.screenWidth = 0,
23 + this.screenHeight = 0,
24 + this.headerHeight = 120,
25 + this.tileHeight = 60,
26 + this.fromTopEdge = 50,
27 + this.fromBottomEdge = 25,
28 + this.moneroIcon = Image.asset('assets/images/monero_menu.png'),
29 + this.bitcoinIcon = Image.asset('assets/images/bitcoin_menu.png'),
30 + this.litecoinIcon = Image.asset('assets/images/litecoin_menu.png'),
31 + this.havenIcon = Image.asset('assets/images/haven_menu.png'),
32 + this.ethereumIcon = Image.asset('assets/images/eth_icon.png');
33
34 final largeScreen = 731;
35
@@ -86,121 +85,111 @@ class MenuWidgetState extends State<MenuWidget> {
85 final itemCount = SettingActions.all.length;
86
87 moneroIcon = Image.asset('assets/images/monero_menu.png',
89 - color: Theme.of(context)
90 - .accentTextTheme
91 - .labelSmall!
92 - .decorationColor!);
88 + color: Theme.of(context).extension<CakeMenuTheme>()!.iconColor);
89 bitcoinIcon = Image.asset('assets/images/bitcoin_menu.png',
94 - color: Theme.of(context)
95 - .accentTextTheme
96 - .labelSmall!
97 - .decorationColor!);
90 + color: Theme.of(context).extension<CakeMenuTheme>()!.iconColor);
91
92 return Row(
93 mainAxisSize: MainAxisSize.max,
94 crossAxisAlignment: CrossAxisAlignment.center,
95 children: <Widget>[
96 Padding(
104 - padding: EdgeInsets.only(left: 24),
105 - child: Container(
106 - height: 60,
107 - width: 4,
108 - decoration: BoxDecoration(
109 - borderRadius: BorderRadius.all(Radius.circular(2)), color: PaletteDark.gray),
110 - )),
97 + padding: EdgeInsets.only(left: 24),
98 + child: Container(
99 + height: 60,
100 + width: 4,
101 + decoration: BoxDecoration(
102 + borderRadius: BorderRadius.all(Radius.circular(2)), color: PaletteDark.gray),
103 + ),
104 + ),
105 SizedBox(width: 12),
106 Expanded(
113 - child: ClipRRect(
114 - borderRadius: BorderRadius.only(
115 - topLeft: Radius.circular(24), bottomLeft: Radius.circular(24)),
116 - child: Container(
117 - color:
118 - Theme.of(context).textTheme!.bodyLarge!.decorationColor!,
119 - child: ListView.separated(
120 - padding: EdgeInsets.only(top: 0),
121 - itemBuilder: (_, index) {
122 - if (index == 0) {
123 - return Container(
124 - height: headerHeight,
125 - decoration: BoxDecoration(
126 - gradient: LinearGradient(colors: [
127 - Theme.of(context)
128 - .accentTextTheme!
129 - .headlineMedium!
130 - .color!,
131 - Theme.of(context)
132 - .accentTextTheme!
133 - .headlineMedium!
134 - .decorationColor!, ], begin: Alignment.topLeft, end: Alignment.bottomRight),
135 - ),
136 - padding: EdgeInsets.only(
137 - left: 24, top: fromTopEdge, right: 24, bottom: fromBottomEdge),
138 - child: Row(
139 - mainAxisAlignment: MainAxisAlignment.start,
140 - children: <Widget>[
141 - _iconFor(type: widget.dashboardViewModel.type),
142 - SizedBox(width: 12),
143 - SingleChildScrollView(
144 - child: Container(
145 - child: Column(
146 - crossAxisAlignment: CrossAxisAlignment.start,
147 - mainAxisAlignment: widget.dashboardViewModel.subname.isNotEmpty
148 - ? MainAxisAlignment.spaceBetween
149 - : MainAxisAlignment.center,
150 - children: <Widget>[
151 - Text(
152 - widget.dashboardViewModel.name,
107 + child: ClipRRect(
108 + borderRadius:
109 + BorderRadius.only(topLeft: Radius.circular(24), bottomLeft: Radius.circular(24)),
110 + child: Container(
111 + color: Theme.of(context).extension<CakeMenuTheme>()!.backgroundColor,
112 + child: ListView.separated(
113 + padding: EdgeInsets.only(top: 0),
114 + itemBuilder: (_, index) {
115 + if (index == 0) {
116 + return Container(
117 + height: headerHeight,
118 + decoration: BoxDecoration(
119 + gradient: LinearGradient(colors: [
120 + Theme.of(context).extension<CakeMenuTheme>()!.headerFirstGradientColor,
121 + Theme.of(context).extension<CakeMenuTheme>()!.headerSecondGradientColor,
122 + ], begin: Alignment.topLeft, end: Alignment.bottomRight),
123 + ),
124 + padding: EdgeInsets.only(
125 + left: 24, top: fromTopEdge, right: 24, bottom: fromBottomEdge),
126 + child: Row(
127 + mainAxisAlignment: MainAxisAlignment.start,
128 + children: <Widget>[
129 + _iconFor(type: widget.dashboardViewModel.type),
130 + SizedBox(width: 12),
131 + SingleChildScrollView(
132 + child: Container(
133 + child: Column(
134 + crossAxisAlignment: CrossAxisAlignment.start,
135 + mainAxisAlignment: widget.dashboardViewModel.subname.isNotEmpty
136 + ? MainAxisAlignment.spaceBetween
137 + : MainAxisAlignment.center,
138 + children: <Widget>[
139 + Text(
140 + widget.dashboardViewModel.name,
141 + style: TextStyle(
142 + color: Colors.white,
143 + fontSize: 16,
144 + fontWeight: FontWeight.bold),
145 + ),
146 + if (widget.dashboardViewModel.subname.isNotEmpty)
147 + Observer(
148 + builder: (_) => Text(
149 + widget.dashboardViewModel.subname,
150 style: TextStyle(
154 - color: Colors.white,
155 - fontSize: 16,
156 - fontWeight: FontWeight.bold),
151 + color: Theme.of(context)
152 + .extension<CakeMenuTheme>()!
153 + .subnameTextColor,
154 + fontWeight: FontWeight.w500,
155 + fontSize: 12),
156 ),
158 - if (widget.dashboardViewModel.subname.isNotEmpty)
159 - Observer(
160 - builder: (_) => Text(
161 - widget.dashboardViewModel.subname,
162 - style: TextStyle(
163 - color: Theme.of(context)
164 - .accentTextTheme!
165 - .labelSmall!
166 - .decorationColor!,
167 - fontWeight: FontWeight.w500,
168 - fontSize: 12),
169 - ))
170 - ],
171 - ),
172 - ))
173 - ],
157 + ),
158 + ],
159 + ),
160 ),
175 - );
176 - }
177 -
178 - index--;
179 -
180 - final item = SettingActions.all[index];
181 -
182 - final isLastTile = index == itemCount - 1;
183 -
184 - return SettingActionButton(
185 - isLastTile: isLastTile,
186 - tileHeight: tileHeight,
187 - selectionActive: false,
188 - fromBottomEdge: fromBottomEdge,
189 - fromTopEdge: fromTopEdge,
190 - onTap: () => item.onTap.call(context),
191 - image: item.image,
192 - title: item.name.call(context),
193 - );
194 - },
195 - separatorBuilder: (_, index) => Container(
196 - height: 1,
197 - color: Theme.of(context)
198 - .primaryTextTheme!
199 - .bodySmall!
200 - .decorationColor!,
161 ),
202 - itemCount: itemCount + 1),
203 - )))
162 + ],
163 + ),
164 + );
165 + }
166 +
167 + index--;
168 +
169 + final item = SettingActions.all[index];
170 +
171 + final isLastTile = index == itemCount - 1;
172 +
173 + return SettingActionButton(
174 + isLastTile: isLastTile,
175 + tileHeight: tileHeight,
176 + selectionActive: false,
177 + fromBottomEdge: fromBottomEdge,
178 + fromTopEdge: fromTopEdge,
179 + onTap: () => item.onTap.call(context),
180 + image: item.image,
181 + title: item.name.call(context),
182 + );
183 + },
184 + separatorBuilder: (_, index) => Container(
185 + height: 1,
186 + color: Theme.of(context).extension<CakeMenuTheme>()!.dividerColor,
187 + ),
188 + itemCount: itemCount + 1,
189 + ),
190 + ),
191 + ),
192 + ),
193 ],
194 );
195 }
lib/src/screens/dashboard/widgets/order_row.dart
+7 -7
@@ -1,6 +1,9 @@
1 import 'package:cake_wallet/buy/buy_provider_description.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 import 'package:cake_wallet/buy/get_buy_provider_icon.dart';
4 +import 'package:cake_wallet/themes/extensions/order_theme.dart';
5 import 'package:flutter/material.dart';
6 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
7
8 class OrderRow extends StatelessWidget {
9 OrderRow({
@@ -20,7 +23,7 @@ class OrderRow extends StatelessWidget {
23 @override
24 Widget build(BuildContext context) {
25 final iconColor =
23 - Theme.of(context).primaryTextTheme!.displayLarge!.backgroundColor!;
26 + Theme.of(context).extension<OrderTheme>()!.iconColor;
27
28 final providerIcon = getBuyProviderIcon(provider, iconColor: iconColor);
29
@@ -48,14 +51,14 @@ class OrderRow extends StatelessWidget {
51 style: TextStyle(
52 fontSize: 16,
53 fontWeight: FontWeight.w500,
51 - color: Theme.of(context).accentTextTheme!.displayMedium!.backgroundColor!
54 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor
55 )),
56 formattedAmount != null
57 ? Text(formattedAmount! + ' ' + to,
58 style: TextStyle(
59 fontSize: 16,
60 fontWeight: FontWeight.w500,
58 - color: Theme.of(context).accentTextTheme!.displayMedium!.backgroundColor!
61 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor
62 ))
63 : Container()
64 ]),
@@ -66,10 +69,7 @@ class OrderRow extends StatelessWidget {
69 Text(createdAtFormattedDate,
70 style: TextStyle(
71 fontSize: 14,
69 - color: Theme.of(context)
70 - .textTheme!
71 - .labelSmall!
72 - .backgroundColor!))
72 + color: Theme.of(context).extension<CakeTextTheme>()!.dateSectionRowColor))
73 ])
74 ],
75 )
lib/src/screens/dashboard/widgets/present_receive_option_picker.dart
+7 -15
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:cake_wallet/palette.dart';
3 import 'package:cake_wallet/src/screens/ionia/widgets/rounded_checkbox.dart';
4 import 'package:cake_wallet/src/widgets/alert_background.dart';
@@ -10,22 +11,16 @@ import 'package:cake_wallet/generated/i18n.dart';
11
12 class PresentReceiveOptionPicker extends StatelessWidget {
13 PresentReceiveOptionPicker(
13 - {required this.receiveOptionViewModel, this.hasWhiteBackground = false});
14 + {required this.receiveOptionViewModel, required this.color});
15
16 final ReceiveOptionViewModel receiveOptionViewModel;
16 - final bool hasWhiteBackground;
17 + final Color color;
18
19 @override
20 Widget build(BuildContext context) {
20 - final textIconTheme = hasWhiteBackground
21 - ? Theme.of(context)
22 - .accentTextTheme!
23 - .displayMedium!
24 - .backgroundColor!
25 - : Colors.white;
21 final arrowBottom = Image.asset(
22 'assets/images/arrow_bottom_purple_icon.png',
28 - color: textIconTheme,
23 + color: color,
24 height: 6,
25 );
26
@@ -51,14 +46,14 @@ class PresentReceiveOptionPicker extends StatelessWidget {
46 fontSize: 18.0,
47 fontWeight: FontWeight.bold,
48 fontFamily: 'Lato',
54 - color: textIconTheme),
49 + color: color),
50 ),
51 Observer(
52 builder: (_) => Text(receiveOptionViewModel.selectedReceiveOption.toString(),
53 style: TextStyle(
54 fontSize: 10.0,
55 fontWeight: FontWeight.w500,
61 - color: textIconTheme)))
56 + color: color)))
57 ],
58 ),
59 SizedBox(width: 5),
@@ -113,10 +108,7 @@ class PresentReceiveOptionPicker extends StatelessWidget {
108 Text(option.toString(),
109 textAlign: TextAlign.left,
110 style: textSmall(
116 - color: Theme.of(context)
117 - .primaryTextTheme!
118 - .titleLarge!
119 - .color!,
111 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
112 ).copyWith(
113 fontWeight:
114 value == option ? FontWeight.w800 : FontWeight.w500,
lib/src/screens/dashboard/widgets/sync_indicator.dart
+4 -3
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart';
2 import 'package:flutter/material.dart';
3 import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
4 import 'package:cake_wallet/core/sync_status_title.dart';
@@ -32,7 +33,7 @@ class SyncIndicator extends StatelessWidget {
33 child: Container(
34 height: 30,
35 width: syncIndicatorWidth,
35 - color: Theme.of(context).textTheme!.titleLarge!.decorationColor!,
36 + color: Theme.of(context).extension<SyncIndicatorTheme>()!.notSyncedBackgroundColor,
37 child: Stack(
38 alignment: Alignment.center,
39 children: <Widget>[
@@ -44,7 +45,7 @@ class SyncIndicator extends StatelessWidget {
45 child: Container(
46 width: indicatorWidth,
47 height: 30,
47 - color: Theme.of(context).textTheme!.titleLarge!.backgroundColor!,
48 + color: Theme.of(context).extension<SyncIndicatorTheme>()!.syncedBackgroundColor,
49 )
50 )
51 : Offstage(),
@@ -66,7 +67,7 @@ class SyncIndicator extends StatelessWidget {
67 style: TextStyle(
68 fontSize: 12,
69 fontWeight: FontWeight.w500,
69 - color: Theme.of(context).textTheme!.titleLarge!.color!
70 + color: Theme.of(context).extension<SyncIndicatorTheme>()!.textColor
71 ),
72 ),
73 )
lib/src/screens/dashboard/widgets/sync_indicator_icon.dart
+4 -2
@@ -1,3 +1,5 @@
1 +import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
3 import 'package:flutter/material.dart';
4 import 'package:cake_wallet/palette.dart';
5
@@ -26,7 +28,7 @@ class SyncIndicatorIcon extends StatelessWidget {
28 if (boolMode) {
29 indicatorColor = isSynced
30 ? PaletteDark.brightGreen
29 - : Theme.of(context).textTheme!.bodySmall!.color!;
31 + : Theme.of(context).extension<SyncIndicatorTheme>()!.notSyncedIconColor;
32 } else {
33 switch (value.toLowerCase()) {
34 case waiting:
@@ -34,7 +36,7 @@ class SyncIndicatorIcon extends StatelessWidget {
36 break;
37 case actionRequired:
38 indicatorColor =
37 - Theme.of(context).textTheme!.displayMedium!.decorationColor!;
39 + Theme.of(context).extension<ReceivePageTheme>()!.currentTileBackgroundColor;
40 break;
41 case created:
42 indicatorColor = PaletteDark.brightGreen;
lib/src/screens/dashboard/widgets/trade_row.dart
+5 -3
@@ -1,6 +1,8 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:flutter/material.dart';
3 import 'package:cw_core/crypto_currency.dart';
4 import 'package:cake_wallet/exchange/exchange_provider_description.dart';
5 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
6
7 class TradeRow extends StatelessWidget {
8 TradeRow({
@@ -43,14 +45,14 @@ class TradeRow extends StatelessWidget {
45 style: TextStyle(
46 fontSize: 16,
47 fontWeight: FontWeight.w500,
46 - color: Theme.of(context).accentTextTheme!.displayMedium!.backgroundColor!)),
48 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor)),
49 formattedAmount != null
50 ? Text(formattedAmount! + ' ' + amountCrypto,
51 style: TextStyle(
52 fontSize: 16,
53 fontWeight: FontWeight.w500,
54 color:
53 - Theme.of(context).accentTextTheme!.displayMedium!.backgroundColor!))
55 + Theme.of(context).extension<DashboardPageTheme>()!.textColor))
56 : Container()
57 ]),
58 SizedBox(height: 5),
@@ -59,7 +61,7 @@ class TradeRow extends StatelessWidget {
61 Text(createdAtFormattedDate!,
62 style: TextStyle(
63 fontSize: 14,
62 - color: Theme.of(context).textTheme!.labelSmall!.backgroundColor!))
64 + color: Theme.of(context).extension<CakeTextTheme>()!.dateSectionRowColor))
65 ])
66 ],
67 ))
lib/src/screens/dashboard/widgets/transaction_raw.dart
+8 -13
@@ -1,5 +1,8 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:flutter/material.dart';
3 import 'package:cw_core/transaction_direction.dart';
4 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
5 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
6
7 class TransactionRow extends StatelessWidget {
8 TransactionRow(
@@ -35,7 +38,7 @@ class TransactionRow extends StatelessWidget {
38 width: 36,
39 decoration: BoxDecoration(
40 shape: BoxShape.circle,
38 - color: Theme.of(context).textTheme!.labelSmall!.decorationColor!
41 + color: Theme.of(context).extension<TransactionTradeTheme>()!.rowsColor
42 ),
43 child: Image.asset(
44 direction == TransactionDirection.incoming
@@ -54,14 +57,12 @@ class TransactionRow extends StatelessWidget {
57 style: TextStyle(
58 fontSize: 16,
59 fontWeight: FontWeight.w500,
57 - color: Theme.of(context).accentTextTheme!
58 - .displayMedium!.backgroundColor!)),
60 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor)),
61 Text(formattedAmount,
62 style: TextStyle(
63 fontSize: 16,
64 fontWeight: FontWeight.w500,
63 - color: Theme.of(context).accentTextTheme!
64 - .displayMedium!.backgroundColor!))
65 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor))
66 ]),
67 SizedBox(height: 5),
68 Row(
@@ -70,17 +71,11 @@ class TransactionRow extends StatelessWidget {
71 Text(formattedDate,
72 style: TextStyle(
73 fontSize: 14,
73 - color: Theme.of(context)
74 - .textTheme!
75 - .labelSmall!
76 - .backgroundColor!)),
74 + color: Theme.of(context).extension<CakeTextTheme>()!.dateSectionRowColor)),
75 Text(formattedFiatAmount,
76 style: TextStyle(
77 fontSize: 14,
80 - color: Theme.of(context)
81 - .textTheme!
82 - .labelSmall!
83 - .backgroundColor!))
78 + color: Theme.of(context).extension<CakeTextTheme>()!.dateSectionRowColor))
79 ])
80 ],
81 )
lib/src/screens/dashboard/widgets/transactions_page.dart
+2 -4
@@ -1,5 +1,6 @@
1 import 'package:cake_wallet/src/screens/dashboard/widgets/anonpay_transaction_row.dart';
2 import 'package:cake_wallet/src/screens/dashboard/widgets/order_row.dart';
3 +import 'package:cake_wallet/themes/extensions/placeholder_theme.dart';
4 import 'package:cake_wallet/src/widgets/dashboard_card_widget.dart';
5 import 'package:cake_wallet/utils/responsive_layout_util.dart';
6 import 'package:cake_wallet/view_model/dashboard/anonpay_transaction_list_item.dart';
@@ -155,10 +156,7 @@ class TransactionsPage extends StatelessWidget {
156 S.of(context).placeholder_transactions,
157 style: TextStyle(
158 fontSize: 14,
158 - color: Theme.of(context)
159 - .primaryTextTheme
160 - .labelSmall!
161 - .decorationColor!),
159 + color: Theme.of(context).extension<PlaceholderTheme>()!.color),
160 ),
161 );
162 }))
lib/src/screens/disclaimer/disclaimer_page.dart
+13 -34
@@ -1,6 +1,8 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'dart:ui';
3 import 'package:cake_wallet/palette.dart';
4 import 'package:cake_wallet/routes.dart';
5 +import 'package:cake_wallet/themes/extensions/wallet_list_theme.dart';
6 import 'package:cake_wallet/utils/show_pop_up.dart';
7 import 'package:flutter/material.dart';
8 import 'package:flutter/cupertino.dart';
@@ -87,10 +89,7 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> {
89 style: TextStyle(
90 fontSize: 20.0,
91 fontWeight: FontWeight.bold,
90 - color: Theme.of(context)
91 - .primaryTextTheme!
92 - .titleLarge!
93 - .color!),
92 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor),
93 ),
94 )
95 ],
@@ -107,10 +106,7 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> {
106 style: TextStyle(
107 fontSize: 12.0,
108 fontWeight: FontWeight.bold,
110 - color: Theme.of(context)
111 - .primaryTextTheme!
112 - .titleLarge!
113 - .color!),
109 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor),
110 ),
111 )
112 ],
@@ -126,10 +122,7 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> {
122 style: TextStyle(
123 fontSize: 12.0,
124 fontWeight: FontWeight.normal,
129 - color: Theme.of(context)
130 - .primaryTextTheme!
131 - .titleLarge!
132 - .color!),
125 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor),
126 ))
127 ],
128 ),
@@ -146,10 +139,7 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> {
139 style: TextStyle(
140 fontSize: 14.0,
141 fontWeight: FontWeight.bold,
149 - color: Theme.of(context)
150 - .primaryTextTheme!
151 - .titleLarge!
152 - .color!),
142 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor),
143 ),
144 )
145 ],
@@ -167,7 +157,7 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> {
157 changenowUrl,
158 textAlign: TextAlign.left,
159 style: TextStyle(
170 - color: Palette.blueCraiola,
160 + color: Theme.of(context).primaryColor,
161 fontSize: 14.0,
162 fontWeight: FontWeight.normal,
163 decoration: TextDecoration.underline),
@@ -193,7 +183,8 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> {
183 gradient: LinearGradient(
184 colors: [
185 Theme.of(context)
196 - .backgroundColor
186 + .colorScheme
187 + .background
188 .withOpacity(0.0),
189 Theme.of(context).colorScheme.background,
190 ],
@@ -232,10 +223,7 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> {
223 ),
224 decoration: BoxDecoration(
225 border: Border.all(
235 - color: Theme.of(context)
236 - .primaryTextTheme!
237 - .bodySmall!
238 - .color!,
226 + color: Theme.of(context).extension<CakeTextTheme>()!.secondaryTextColor,
227 width: 1.0),
228 borderRadius: BorderRadius.all(
229 Radius.circular(8.0)),
@@ -253,10 +241,7 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> {
241 style: TextStyle(
242 fontWeight: FontWeight.bold,
243 fontSize: 14.0,
256 - color: Theme.of(context)
257 - .primaryTextTheme!
258 - .titleLarge!
259 - .color!),
244 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor),
245 )
246 ],
247 ),
@@ -273,14 +258,8 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> {
258 .popAndPushNamed(Routes.welcome)
259 : null,
260 text: 'Accept',
276 - color: Theme.of(context)
277 - .accentTextTheme!
278 - .titleSmall!
279 - .decorationColor!,
280 - textColor: Theme.of(context)
281 - .accentTextTheme!
282 - .headlineSmall!
283 - .decorationColor!),
261 + color: Theme.of(context).extension<WalletListTheme>()!.createNewWalletButtonBackgroundColor,
262 + textColor: Theme.of(context).extension<WalletListTheme>()!.restoreWalletButtonTextColor),
263 ),
264 ],
265 ],
lib/src/screens/exchange/exchange_page.dart
+13 -7
@@ -1,8 +1,11 @@
1 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/keyboard_theme.dart';
3 import 'package:cake_wallet/core/auth_service.dart';
4 import 'package:cake_wallet/di.dart';
5 import 'package:cake_wallet/src/screens/exchange/widgets/desktop_exchange_cards_section.dart';
6 import 'package:cake_wallet/src/screens/exchange/widgets/mobile_exchange_cards_section.dart';
7 import 'package:cake_wallet/src/widgets/add_template_button.dart';
8 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
9 import 'package:cake_wallet/themes/theme_base.dart';
10 import 'package:cake_wallet/utils/debounce.dart';
11 import 'package:cake_wallet/utils/responsive_layout_util.dart';
@@ -78,7 +81,10 @@ class ExchangePage extends BasePage {
81 String get title => S.current.exchange;
82
83 @override
81 - Color get titleColor => Colors.white;
84 + bool get gradientBackground => true;
85 +
86 + @override
87 + bool get gradientAll => true;
88
89 @override
90 bool get resizeToAvoidBottomInset => false;
@@ -115,7 +121,7 @@ class ExchangePage extends BasePage {
121 Widget? leading(BuildContext context) {
122 final _backButton = Icon(
123 Icons.arrow_back_ios,
118 - color: titleColor,
124 + color: titleColor(context),
125 size: 16,
126 );
127 final _closeButton =
@@ -152,7 +158,7 @@ class ExchangePage extends BasePage {
158 disableScroll: true,
159 config: KeyboardActionsConfig(
160 keyboardActionsPlatform: KeyboardActionsPlatform.IOS,
155 - keyboardBarColor: Theme.of(context).accentTextTheme.bodyLarge!.backgroundColor!,
161 + keyboardBarColor: Theme.of(context).extension<KeyboardTheme>()!.keyboardBarColor,
162 nextFocus: false,
163 actions: [
164 KeyboardActionsItem(
@@ -205,8 +211,8 @@ class ExchangePage extends BasePage {
211 textAlign: TextAlign.center,
212 style: TextStyle(
213 color: Theme.of(context)
208 - .primaryTextTheme.displayLarge!
209 - .decorationColor!,
214 + .extension<ExchangePageTheme>()!
215 + .receiveAmountColor,
216 fontWeight: FontWeight.w500,
217 fontSize: 12),
218 ),
@@ -625,7 +631,7 @@ class ExchangePage extends BasePage {
631 imageArrow: arrowBottomPurple,
632 currencyButtonColor: Colors.transparent,
633 addressButtonsColor: Theme.of(context).focusColor,
628 - borderColor: Theme.of(context).primaryTextTheme.bodyLarge!.color!,
634 + borderColor: Theme.of(context).extension<ExchangePageTheme>()!.textFieldBorderTopPanelColor,
635 currencyValueValidator: (value) {
636 return !exchangeViewModel.isFixedRateMode
637 ? AmountValidator(
@@ -673,7 +679,7 @@ class ExchangePage extends BasePage {
679 imageArrow: arrowBottomCakeGreen,
680 currencyButtonColor: Colors.transparent,
681 addressButtonsColor: Theme.of(context).focusColor,
676 - borderColor: Theme.of(context).primaryTextTheme.bodyLarge!.decorationColor!,
682 + borderColor: Theme.of(context).extension<ExchangePageTheme>()!.textFieldBorderBottomPanelColor,
683 currencyValueValidator: (value) {
684 return exchangeViewModel.isFixedRateMode
685 ? AmountValidator(
lib/src/screens/exchange/exchange_template_page.dart
+16 -27
@@ -1,3 +1,5 @@
1 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/keyboard_theme.dart';
3 import 'package:cake_wallet/exchange/exchange_provider.dart';
4 import 'package:cake_wallet/src/screens/base_page.dart';
5 import 'package:cake_wallet/src/widgets/keyboard_done_button.dart';
@@ -29,10 +31,10 @@ class ExchangeTemplatePage extends BasePage {
31 var _isReactionsSet = false;
32
33 @override
32 - String get title => S.current.exchange_new_template;
34 + bool get gradientAll => true;
35
36 @override
35 - Color get titleColor => Colors.white;
37 + String get title => S.current.exchange_new_template;
38
39 @override
40 bool get extendBodyBehindAppBar => true;
@@ -73,10 +75,7 @@ class ExchangeTemplatePage extends BasePage {
75 disableScroll: true,
76 config: KeyboardActionsConfig(
77 keyboardActionsPlatform: KeyboardActionsPlatform.IOS,
76 - keyboardBarColor: Theme.of(context)
77 - .accentTextTheme!
78 - .bodyLarge!
79 - .backgroundColor!,
78 + keyboardBarColor: Theme.of(context).extension<KeyboardTheme>()!.keyboardBarColor,
79 nextFocus: false,
80 actions: [
81 KeyboardActionsItem(
@@ -101,8 +100,8 @@ class ExchangeTemplatePage extends BasePage {
100 ),
101 gradient: LinearGradient(
102 colors: [
104 - Theme.of(context).primaryTextTheme!.bodyMedium!.color!,
105 - Theme.of(context).primaryTextTheme!.bodyMedium!.decorationColor!,
103 + Theme.of(context).extension<ExchangePageTheme>()!.firstGradientBottomPanelColor,
104 + Theme.of(context).extension<ExchangePageTheme>()!.secondGradientBottomPanelColor,
105 ],
106 stops: [0.35, 1.0],
107 begin: Alignment.topLeft,
@@ -120,12 +119,8 @@ class ExchangeTemplatePage extends BasePage {
119 ),
120 gradient: LinearGradient(
121 colors: [
123 - Theme.of(context)
124 - .primaryTextTheme!.titleSmall!
125 - .color!,
126 - Theme.of(context)
127 - .primaryTextTheme!.titleSmall!
128 - .decorationColor!,
122 + Theme.of(context).extension<ExchangePageTheme>()!.firstGradientTopPanelColor,
123 + Theme.of(context).extension<ExchangePageTheme>()!.secondGradientTopPanelColor,
124 ],
125 begin: Alignment.topLeft,
126 end: Alignment.bottomRight),
@@ -157,10 +152,8 @@ class ExchangeTemplatePage extends BasePage {
152 imageArrow: arrowBottomPurple,
153 currencyButtonColor: Colors.transparent,
154 addressButtonsColor:
160 - Theme.of(context).focusColor,
161 - borderColor: Theme.of(context)
162 - .primaryTextTheme!.bodyLarge!
163 - .color!,
155 + Theme.of(context).extension<ExchangePageTheme>()!.textFieldButtonColor,
156 + borderColor: Theme.of(context).extension<ExchangePageTheme>()!.textFieldBorderBottomPanelColor,
157 currencyValueValidator: AmountValidator(
158 currency: exchangeViewModel.depositCurrency),
159 //addressTextFieldValidator: AddressValidator(
@@ -197,10 +190,8 @@ class ExchangeTemplatePage extends BasePage {
190 imageArrow: arrowBottomCakeGreen,
191 currencyButtonColor: Colors.transparent,
192 addressButtonsColor:
200 - Theme.of(context).focusColor,
201 - borderColor: Theme.of(context)
202 - .primaryTextTheme!.bodyLarge!
203 - .decorationColor!,
193 + Theme.of(context).extension<ExchangePageTheme>()!.textFieldButtonColor,
194 + borderColor: Theme.of(context).extension<ExchangePageTheme>()!.textFieldBorderBottomPanelColor,
195 currencyValueValidator: AmountValidator(
196 currency: exchangeViewModel.receiveCurrency),
197 //addressTextFieldValidator: AddressValidator(
@@ -226,9 +217,7 @@ class ExchangeTemplatePage extends BasePage {
217 description,
218 textAlign: TextAlign.center,
219 style: TextStyle(
229 - color: Theme.of(context)
230 - .primaryTextTheme!.displayLarge!
231 - .decorationColor!,
220 + color: Theme.of(context).extension<ExchangePageTheme>()!.receiveAmountColor,
221 fontWeight: FontWeight.w500,
222 fontSize: 12),
223 ),
@@ -256,7 +245,7 @@ class ExchangeTemplatePage extends BasePage {
245 }
246 },
247 text: S.of(context).save,
259 - color: Colors.green,
248 + color: Theme.of(context).primaryColor,
249 textColor: Colors.white),
250 ]),
251 ))
@@ -444,4 +433,4 @@ class ExchangeTemplatePage extends BasePage {
433 key.currentState!.addressController.text = '';
434 }
435 }
447 -}
\ No newline at end of file
436 +}
lib/src/screens/exchange/widgets/currency_picker_item_widget.dart
+7 -20
@@ -1,3 +1,5 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_scrollbar_theme.dart';
3 import 'package:flutter/material.dart';
4 import 'package:cake_wallet/palette.dart';
5
@@ -20,10 +22,7 @@ class PickerItemWidget extends StatelessWidget {
22 return GestureDetector(
23 onTap: onTap,
24 child: Container(
23 - color: Theme.of(context)
24 - .accentTextTheme!
25 - .titleLarge!
26 - .color!,
25 + color: Theme.of(context).dialogTheme.backgroundColor,
26 child: Padding(
27 padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 24),
28 child: Row(
@@ -44,10 +43,7 @@ class PickerItemWidget extends StatelessWidget {
43 style: TextStyle(
44 color: isSelected
45 ? Palette.blueCraiola
47 - : Theme.of(context)
48 - .primaryTextTheme!
49 - .titleLarge!
50 - .color!,
46 + : Theme.of(context).extension<CakeTextTheme>()!.titleColor,
47 fontSize: isSelected ? 16 : 14.0,
48 fontFamily: 'Lato',
49 fontWeight: FontWeight.w600,
@@ -65,19 +61,13 @@ class PickerItemWidget extends StatelessWidget {
61 style: TextStyle(
62 fontSize: 7.0,
63 fontFamily: 'Lato',
68 - color: Theme.of(context)
69 - .textTheme!
70 - .bodyMedium!
71 - .color!),
64 + color: Theme.of(context).extension<CakeScrollbarTheme>()!.thumbColor),
65 ),
66 ),
67 decoration: BoxDecoration(
68 borderRadius: BorderRadius.circular(6.0),
69 //border: Border.all(color: ),
77 - color: Theme.of(context)
78 - .textTheme!
79 - .bodyMedium!
80 - .decorationColor!,
70 + color: Theme.of(context).extension<CakeScrollbarTheme>()!.trackColor,
71 ),
72 ),
73 ),
@@ -86,10 +76,7 @@ class PickerItemWidget extends StatelessWidget {
76 ),
77 if (isSelected)
78 Icon(Icons.check_circle,
89 - color: Theme.of(context)
90 - .accentTextTheme!
91 - .bodyLarge!
92 - .color!)
79 + color: Theme.of(context).primaryColor)
80 ],
81 ),
82 ),
lib/src/screens/exchange/widgets/currency_picker_widget.dart
+2 -4
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/picker_theme.dart';
2 import 'package:cw_core/currency.dart';
3 import 'package:flutter/material.dart';
4 import 'currency_picker_item_widget.dart';
@@ -20,10 +21,7 @@ class CurrencyPickerWidget extends StatelessWidget {
21 @override
22 Widget build(BuildContext context) {
23 return Container(
23 - color: Theme.of(context)
24 - .accentTextTheme!
25 - .titleLarge!
26 - .backgroundColor!,
24 + color: Theme.of(context).extension<PickerTheme>()!.dividerColor,
25 child: Scrollbar(
26 controller: _scrollController,
27 child: GridView.builder(
lib/src/screens/exchange/widgets/exchange_card.dart
+16 -46
@@ -1,6 +1,8 @@
1 import 'package:cake_wallet/entities/contact_base.dart';
2 +import 'package:cake_wallet/themes/extensions/qr_code_theme.dart';
3 import 'package:cake_wallet/routes.dart';
4 import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
5 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
6 import 'package:cake_wallet/utils/show_bar.dart';
7 import 'package:cake_wallet/utils/show_pop_up.dart';
8 import 'package:cake_wallet/utils/payment_request.dart';
@@ -12,6 +14,7 @@ import 'package:cw_core/crypto_currency.dart';
14 import 'package:cake_wallet/src/widgets/address_text_field.dart';
15 import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
16 import 'package:cake_wallet/src/screens/exchange/widgets/currency_picker.dart';
17 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
18
19 class ExchangeCard extends StatefulWidget {
20 ExchangeCard(
@@ -160,7 +163,7 @@ class ExchangeCardState extends State<ExchangeCard> {
163 final copyImage = Image.asset('assets/images/copy_content.png',
164 height: 16,
165 width: 16,
163 - color: Theme.of(context).primaryTextTheme!.displaySmall!.color!);
166 + color: Theme.of(context).extension<SendPageTheme>()!.estimatedFeeColor);
167
168 return Container(
169 width: double.infinity,
@@ -175,7 +178,7 @@ class ExchangeCardState extends State<ExchangeCard> {
178 style: TextStyle(
179 fontSize: 18,
180 fontWeight: FontWeight.w600,
178 - color: Theme.of(context).textTheme!.headlineSmall!.color!),
181 + color: Theme.of(context).extension<QRCodeTheme>()!.qrCodeColor),
182 )
183 ],
184 ),
@@ -211,10 +214,7 @@ class ExchangeCardState extends State<ExchangeCard> {
214 height: 32,
215 decoration: BoxDecoration(
216 color: widget.addressButtonsColor ??
214 - Theme.of(context)
215 - .primaryTextTheme!
216 - .headlineMedium!
217 - .color!,
217 + Theme.of(context).extension<SendPageTheme>()!.textFieldButtonColor,
218 borderRadius:
219 BorderRadius.all(Radius.circular(6))),
220 child: Center(
@@ -224,10 +224,7 @@ class ExchangeCardState extends State<ExchangeCard> {
224 style: TextStyle(
225 fontSize: 12,
226 fontWeight: FontWeight.bold,
227 - color: Theme.of(context)
228 - .primaryTextTheme!
229 - .headlineMedium!
230 - .decorationColor!)),
227 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldButtonIconColor)),
228 ),
229 ),
230 ),
@@ -268,10 +265,7 @@ class ExchangeCardState extends State<ExchangeCard> {
265 placeholderTextStyle: TextStyle(
266 fontSize: 16,
267 fontWeight: FontWeight.w600,
271 - color: Theme.of(context)
272 - .accentTextTheme!
273 - .displayLarge!
274 - .decorationColor!),
268 + color: Theme.of(context).extension<ExchangePageTheme>()!.hintTextColor),
269 validator: _isAmountEditable
270 ? widget.currencyValueValidator
271 : null),
@@ -282,10 +276,7 @@ class ExchangeCardState extends State<ExchangeCard> {
276 height: 32,
277 width: 32,
278 decoration: BoxDecoration(
285 - color: Theme.of(context)
286 - .primaryTextTheme!
287 - .headlineMedium!
288 - .color!,
279 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldButtonColor,
280 borderRadius:
281 BorderRadius.all(Radius.circular(6))),
282 child: InkWell(
@@ -296,10 +287,7 @@ class ExchangeCardState extends State<ExchangeCard> {
287 style: TextStyle(
288 fontSize: 12,
289 fontWeight: FontWeight.bold,
299 - color: Theme.of(context)
300 - .primaryTextTheme!
301 - .headlineMedium!
302 - .decorationColor!)),
290 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldButtonIconColor)),
291 ),
292 ),
293 )
@@ -310,10 +298,7 @@ class ExchangeCardState extends State<ExchangeCard> {
298 )),
299 Divider(
300 height: 1,
313 - color: Theme.of(context)
314 - .primaryTextTheme!
315 - .headlineSmall!
316 - .decorationColor!),
301 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldHintColor),
302 Padding(
303 padding: EdgeInsets.only(top: 5),
304 child: Container(
@@ -329,10 +314,7 @@ class ExchangeCardState extends State<ExchangeCard> {
314 style: TextStyle(
315 fontSize: 10,
316 height: 1.2,
332 - color: Theme.of(context)
333 - .accentTextTheme!
334 - .displayLarge!
335 - .decorationColor!),
317 + color: Theme.of(context).extension<ExchangePageTheme>()!.hintTextColor),
318 )
319 : Offstage(),
320 _min != null ? SizedBox(width: 10) : Offstage(),
@@ -344,10 +326,7 @@ class ExchangeCardState extends State<ExchangeCard> {
326 style: TextStyle(
327 fontSize: 10,
328 height: 1.2,
347 - color: Theme.of(context)
348 - .accentTextTheme!
349 - .displayLarge!
350 - .decorationColor!))
329 + color: Theme.of(context).extension<ExchangePageTheme>()!.hintTextColor))
330 : Offstage(),
331 ])),
332 ),
@@ -359,10 +338,7 @@ class ExchangeCardState extends State<ExchangeCard> {
338 style: TextStyle(
339 fontSize: 14,
340 fontWeight: FontWeight.w500,
362 - color: Theme.of(context)
363 - .accentTextTheme!
364 - .displayLarge!
365 - .decorationColor!),
341 + color: Theme.of(context).extension<ExchangePageTheme>()!.hintTextColor),
342 ))
343 : Offstage(),
344 _isAddressEditable
@@ -400,10 +376,7 @@ class ExchangeCardState extends State<ExchangeCard> {
376 hintStyle: TextStyle(
377 fontSize: 16,
378 fontWeight: FontWeight.w600,
403 - color: Theme.of(context)
404 - .accentTextTheme!
405 - .displayLarge!
406 - .decorationColor!),
379 + color: Theme.of(context).extension<ExchangePageTheme>()!.hintTextColor),
380 buttonColor: widget.addressButtonsColor,
381 validator: widget.addressTextFieldValidator,
382 onPushPasteButton: widget.onPushPasteButton,
@@ -472,10 +445,7 @@ class ExchangeCardState extends State<ExchangeCard> {
445 6))),
446 child: Image.asset(
447 'assets/images/open_book.png',
475 - color: Theme.of(context)
476 - .primaryTextTheme!
477 - .headlineMedium!
478 - .decorationColor!,
448 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldButtonIconColor,
449 )),
450 )),
451 ),
lib/src/screens/exchange/widgets/mobile_exchange_cards_section.dart
+5 -7
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
2 import 'package:flutter/material.dart';
3
4 class MobileExchangeCardsSection extends StatelessWidget {
@@ -21,8 +22,8 @@ class MobileExchangeCardsSection extends StatelessWidget {
22 ),
23 gradient: LinearGradient(
24 colors: [
24 - Theme.of(context).primaryTextTheme!.bodyMedium!.color!,
25 - Theme.of(context).primaryTextTheme!.bodyMedium!.decorationColor!,
25 + Theme.of(context).extension<ExchangePageTheme>()!.firstGradientBottomPanelColor,
26 + Theme.of(context).extension<ExchangePageTheme>()!.secondGradientBottomPanelColor,
27 ],
28 stops: [0.35, 1.0],
29 begin: Alignment.topLeft,
@@ -37,11 +38,8 @@ class MobileExchangeCardsSection extends StatelessWidget {
38 bottomLeft: Radius.circular(24), bottomRight: Radius.circular(24)),
39 gradient: LinearGradient(
40 colors: [
40 - Theme.of(context).primaryTextTheme!.titleSmall!.color!,
41 - Theme.of(context)
42 - .primaryTextTheme!
43 - .titleSmall!
44 - .decorationColor!,
41 + Theme.of(context).extension<ExchangePageTheme>()!.firstGradientTopPanelColor,
42 + Theme.of(context).extension<ExchangePageTheme>()!.secondGradientTopPanelColor,
43 ],
44 begin: Alignment.topLeft,
45 end: Alignment.bottomRight,
lib/src/screens/exchange/widgets/present_provider_picker.dart
+2 -4
@@ -1,4 +1,5 @@
1 import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
2 +import 'package:cake_wallet/themes/extensions/qr_code_theme.dart';
3 import 'package:cake_wallet/src/widgets/check_box_picker.dart';
4 import 'package:cake_wallet/utils/show_pop_up.dart';
5 import 'package:flutter/material.dart';
@@ -49,10 +50,7 @@ class PresentProviderPicker extends StatelessWidget {
50 style: TextStyle(
51 fontSize: 10.0,
52 fontWeight: FontWeight.w500,
52 - color: Theme.of(context)
53 - .textTheme!
54 - .headlineSmall!
55 - .color!)))
53 + color: Theme.of(context).extension<QRCodeTheme>()!.qrCodeColor)))
54 ],
55 ),
56 SizedBox(width: 5),
lib/src/screens/exchange_trade/exchange_confirm_page.dart
+11 -32
@@ -1,5 +1,7 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:cake_wallet/exchange/exchange_provider_description.dart';
3 import 'package:cake_wallet/store/dashboard/trades_store.dart';
4 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
5 import 'package:cake_wallet/utils/show_bar.dart';
6 import 'package:flutter/material.dart';
7 import 'package:flutter/cupertino.dart';
@@ -9,6 +11,7 @@ import 'package:cake_wallet/generated/i18n.dart';
11 import 'package:cake_wallet/src/widgets/primary_button.dart';
12 import 'package:cake_wallet/src/screens/base_page.dart';
13 import 'package:cake_wallet/exchange/trade.dart';
14 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
15
16 class ExchangeConfirmPage extends BasePage {
17 ExchangeConfirmPage({required this.tradesStore}) : trade = tradesStore.trade!;
@@ -36,10 +39,7 @@ class ExchangeConfirmPage extends BasePage {
39 style: TextStyle(
40 fontSize: 18.0,
41 fontWeight: FontWeight.w500,
39 - color: Theme.of(context)
40 - .primaryTextTheme!
41 - .titleLarge!
42 - .color!),
42 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor),
43 ),
44 )),
45 Container(
@@ -48,14 +48,8 @@ class ExchangeConfirmPage extends BasePage {
48 borderRadius: BorderRadius.all(Radius.circular(30)),
49 border: Border.all(
50 width: 1,
51 - color: Theme.of(context)
52 - .accentTextTheme!
53 - .bodySmall!
54 - .color!),
55 - color: Theme.of(context)
56 - .accentTextTheme!
57 - .titleLarge!
58 - .color!),
51 + color: Theme.of(context).cardColor),
52 + color: Theme.of(context).dialogTheme.backgroundColor),
53 child: Column(
54 children: <Widget>[
55 Expanded(
@@ -70,10 +64,7 @@ class ExchangeConfirmPage extends BasePage {
64 style: TextStyle(
65 fontSize: 12.0,
66 fontWeight: FontWeight.w500,
73 - color: Theme.of(context)
74 - .primaryTextTheme!
75 - .labelSmall!
76 - .color!),
67 + color: Theme.of(context).extension<TransactionTradeTheme>()!.detailsTitlesColor),
68 ),
69 Text(
70 trade.id,
@@ -82,10 +73,7 @@ class ExchangeConfirmPage extends BasePage {
73 style: TextStyle(
74 fontSize: 20,
75 fontWeight: FontWeight.w600,
85 - color: Theme.of(context)
86 - .primaryTextTheme!
87 - .titleLarge!
88 - .color!),
76 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor),
77 ),
78 ],
79 ),
@@ -100,14 +88,8 @@ class ExchangeConfirmPage extends BasePage {
88 context, S.of(context).copied_to_clipboard);
89 },
90 text: S.of(context).copy_id,
103 - color: Theme.of(context)
104 - .accentTextTheme!
105 - .bodySmall!
106 - .backgroundColor!,
107 - textColor: Theme.of(context)
108 - .primaryTextTheme!
109 - .titleLarge!
110 - .color!),
91 + color: Theme.of(context).extension<ExchangePageTheme>()!.buttonBackgroundColor,
92 + textColor: Theme.of(context).extension<CakeTextTheme>()!.titleColor),
93 ),
94 )
95 ],
@@ -136,10 +118,7 @@ class ExchangeConfirmPage extends BasePage {
118 onPressed: () => Navigator.of(context)
119 .pushReplacementNamed(Routes.exchangeTrade),
120 text: S.of(context).saved_the_trade_id,
139 - color: Theme.of(context)
140 - .accentTextTheme!
141 - .bodyLarge!
142 - .color!,
121 + color: Theme.of(context).primaryColor,
122 textColor: Colors.white)
123 ],
124 ),
lib/src/screens/exchange_trade/exchange_trade_page.dart
+17 -37
@@ -1,4 +1,6 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'dart:ui';
3 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
4 import 'package:cake_wallet/utils/request_review_handler.dart';
5 import 'package:mobx/mobx.dart';
6 import 'package:flutter_mobx/flutter_mobx.dart';
@@ -20,6 +22,7 @@ import 'package:cake_wallet/src/screens/exchange_trade/widgets/timer_widget.dart
22 import 'package:cake_wallet/src/widgets/primary_button.dart';
23 import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
24 import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
25 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
26
27 void showInformation(
28 ExchangeTradeViewModel exchangeTradeViewModel, BuildContext context) {
@@ -51,7 +54,7 @@ class ExchangeTradePage extends BasePage {
54 @override
55 Widget trailing(BuildContext context) {
56 final questionImage = Image.asset('assets/images/question_mark.png',
54 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!);
57 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor);
58
59 return SizedBox(
60 height: 20.0,
@@ -111,7 +114,7 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
114 final copyImage = Image.asset('assets/images/copy_content.png',
115 height: 16,
116 width: 16,
114 - color: Theme.of(context).primaryTextTheme!.labelSmall!.color!);
117 + color: Theme.of(context).extension<TransactionTradeTheme>()!.detailsTitlesColor);
118
119 _setEffects();
120
@@ -133,17 +136,11 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
136 style: TextStyle(
137 fontSize: 14.0,
138 fontWeight: FontWeight.w500,
136 - color: Theme.of(context)
137 - .primaryTextTheme!
138 - .labelSmall!
139 - .color!),
139 + color: Theme.of(context).extension<TransactionTradeTheme>()!.detailsTitlesColor),
140 ),
141 if (trade.expiredAt != null)
142 TimerWidget(trade.expiredAt!,
143 - color: Theme.of(context)
144 - .primaryTextTheme!
145 - .titleLarge!
146 - .color!)
143 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor)
144 ])
145 : Offstage(),
146 Padding(
@@ -160,10 +157,7 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
157 decoration: BoxDecoration(
158 border: Border.all(
159 width: 3,
163 - color: Theme.of(context)
164 - .accentTextTheme!
165 - .titleSmall!
166 - .color!
160 + color: Theme.of(context).extension<ExchangePageTheme>()!.qrCodeColor
161 )
162 ),
163 child: QrImage(data: trade.inputAddress ?? fetchingLabel),
@@ -179,10 +173,7 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
173 itemCount: widget.exchangeTradeViewModel.items.length,
174 separatorBuilder: (context, index) => Container(
175 height: 1,
182 - color: Theme.of(context)
183 - .accentTextTheme!
184 - .titleSmall!
185 - .backgroundColor!,
176 + color: Theme.of(context).extension<ExchangePageTheme>()!.dividerCodeColor,
177 ),
178 itemBuilder: (context, index) {
179 final item = widget.exchangeTradeViewModel.items[index];
@@ -228,10 +219,7 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
219 onPressed: () =>
220 widget.exchangeTradeViewModel.confirmSending(),
221 text: S.of(context).confirm,
231 - color: Theme.of(context)
232 - .accentTextTheme!
233 - .bodyLarge!
234 - .color!,
222 + color: Theme.of(context).primaryColor,
223 textColor: Colors.white)
224 : Offstage();
225 })),
@@ -321,7 +309,7 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
309 return Stack(
310 children: <Widget>[
311 Container(
324 - color: Theme.of(popupContext).backgroundColor,
312 + color: Theme.of(popupContext).colorScheme.background,
313 child: Center(
314 child: Image.asset(
315 'assets/images/birthday_cake.png'),
@@ -341,10 +329,7 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
329 style: TextStyle(
330 fontSize: 22,
331 fontWeight: FontWeight.bold,
344 - color: Theme.of(popupContext)
345 - .primaryTextTheme!
346 - .titleLarge!
347 - .color,
332 + color: Theme.of(popupContext).extension<CakeTextTheme>()!.titleColor,
333 decoration: TextDecoration.none,
334 ),
335 ),
@@ -360,10 +345,7 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
345 RequestReviewHandler.requestReview();
346 },
347 text: S.of(popupContext).got_it,
363 - color: Theme.of(popupContext)
364 - .accentTextTheme!
365 - .bodyLarge!
366 - .color!,
348 + color: Theme.of(popupContext).primaryColor,
349 textColor: Colors.white))
350 ],
351 );
@@ -372,7 +354,7 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
354 return Stack(
355 children: <Widget>[
356 Container(
375 - color: Theme.of(popupContext).backgroundColor,
357 + color: Theme.of(popupContext).colorScheme.background,
358 child: Center(
359 child: Image.asset(
360 'assets/images/birthday_cake.png'),
@@ -384,7 +366,8 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
366 child: Container(
367 decoration: BoxDecoration(
368 color: Theme.of(popupContext)
387 - .backgroundColor
369 + .colorScheme
370 + .background
371 .withOpacity(0.25)),
372 child: Center(
373 child: Padding(
@@ -395,10 +378,7 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
378 style: TextStyle(
379 fontSize: 22,
380 fontWeight: FontWeight.bold,
398 - color: Theme.of(popupContext)
399 - .primaryTextTheme!
400 - .titleLarge!
401 - .color!,
381 + color: Theme.of(popupContext).extension<CakeTextTheme>()!.titleColor,
382 decoration: TextDecoration.none,
383 ),
384 ),
lib/src/screens/exchange_trade/information_page.dart
+8 -4
@@ -1,9 +1,13 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'dart:ui';
3 import 'package:cake_wallet/generated/i18n.dart';
4 import 'package:cake_wallet/src/widgets/primary_button.dart';
5 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
6 +import 'package:cake_wallet/themes/extensions/info_theme.dart';
7 import 'package:flutter/cupertino.dart';
8 import 'package:flutter/material.dart';
9 import 'package:cake_wallet/src/widgets/alert_background.dart';
10 +import 'package:cake_wallet/themes/extensions/menu_theme.dart';
11
12 class InformationPage extends StatelessWidget {
13 InformationPage({required this.information});
@@ -21,7 +25,7 @@ class InformationPage extends StatelessWidget {
25 ),
26 decoration: BoxDecoration(
27 borderRadius: BorderRadius.all(Radius.circular(30)),
24 - color: Theme.of(context).textTheme!.bodyLarge!.decorationColor!
28 + color: Theme.of(context).extension<CakeMenuTheme>()!.backgroundColor
29 ),
30 child: Column(
31 mainAxisSize: MainAxisSize.min,
@@ -36,7 +40,7 @@ class InformationPage extends StatelessWidget {
40 fontWeight: FontWeight.normal,
41 fontFamily: 'Lato',
42 decoration: TextDecoration.none,
39 - color: Theme.of(context).accentTextTheme!.bodySmall!.decorationColor!
43 + color: Theme.of(context).extension<InfoTheme>()!.textColor
44 ),
45 ),
46 ),
@@ -45,8 +49,8 @@ class InformationPage extends StatelessWidget {
49 child: PrimaryButton(
50 onPressed: () => Navigator.of(context).pop(),
51 text: S.of(context).got_it,
48 - color: Theme.of(context).accentTextTheme!.bodySmall!.backgroundColor!,
49 - textColor: Theme.of(context).primaryTextTheme!.titleLarge!.color!
52 + color: Theme.of(context).extension<ExchangePageTheme>()!.buttonBackgroundColor,
53 + textColor: Theme.of(context).extension<CakeTextTheme>()!.titleColor
54 ),
55 )
56 ],
lib/src/screens/faq/faq_item.dart
+4 -3
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:flutter/material.dart';
3 import 'package:cake_wallet/palette.dart';
4
@@ -26,12 +27,12 @@ class FAQItemState extends State<FAQItem> {
27 @override
28 Widget build(BuildContext context) {
29 final addIcon = Icon(Icons.add,
29 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!);
30 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor);
31 final removeIcon = Icon(Icons.remove, color: Palette.blueCraiola);
32 final icon = isActive ? removeIcon : addIcon;
33 final color = isActive
34 ? Palette.blueCraiola
34 - : Theme.of(context).primaryTextTheme!.titleLarge!.color!;
35 + : Theme.of(context).extension<CakeTextTheme>()!.titleColor;
36
37 return ListTileTheme(
38 contentPadding: EdgeInsets.fromLTRB(0, 6, 24, 6),
@@ -54,7 +55,7 @@ class FAQItemState extends State<FAQItem> {
55 fontSize: 14,
56 fontWeight: FontWeight.normal,
57 color:
57 - Theme.of(context).primaryTextTheme!.titleLarge!.color!),
58 + Theme.of(context).extension<CakeTextTheme>()!.titleColor),
59 ),
60 ))
61 ])
lib/src/screens/ionia/auth/ionia_create_account_page.dart
+5 -16
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:cake_wallet/core/email_validator.dart';
3 import 'package:cake_wallet/ionia/ionia_create_state.dart';
4 import 'package:cake_wallet/routes.dart';
@@ -40,10 +41,7 @@ class IoniaCreateAccountPage extends BasePage {
41 return Text(
42 S.current.sign_up,
43 style: textMediumSemiBold(
43 - color: Theme.of(context)
44 - .accentTextTheme!
45 - .displayLarge!
46 - .backgroundColor!,
44 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
45 ),
46 );
47 }
@@ -84,10 +82,7 @@ class IoniaCreateAccountPage extends BasePage {
82 onPressed: _createAccount,
83 isLoading:
84 _authViewModel.createUserState is IoniaCreateStateLoading,
87 - color: Theme.of(context)
88 - .accentTextTheme!
89 - .bodyLarge!
90 - .color!,
85 + color: Theme.of(context).primaryColor,
86 textColor: Colors.white,
87 ),
88 ),
@@ -107,10 +102,7 @@ class IoniaCreateAccountPage extends BasePage {
102 TextSpan(
103 text: S.of(context).settings_terms_and_conditions,
104 style: TextStyle(
110 - color: Theme.of(context)
111 - .accentTextTheme!
112 - .bodyLarge!
113 - .color!,
105 + color: Theme.of(context).primaryColor,
106 fontWeight: FontWeight.w700,
107 ),
108 recognizer: TapGestureRecognizer()
@@ -122,10 +114,7 @@ class IoniaCreateAccountPage extends BasePage {
114 TextSpan(
115 text: S.of(context).privacy_policy,
116 style: TextStyle(
125 - color: Theme.of(context)
126 - .accentTextTheme!
127 - .bodyLarge!
128 - .color!,
117 + color: Theme.of(context).primaryColor,
118 fontWeight: FontWeight.w700,
119 ),
120 recognizer: TapGestureRecognizer()
lib/src/screens/ionia/auth/ionia_login_page.dart
+3 -8
@@ -1,4 +1,5 @@
1 import 'package:cake_wallet/core/email_validator.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 import 'package:cake_wallet/ionia/ionia_create_state.dart';
4 import 'package:cake_wallet/routes.dart';
5 import 'package:cake_wallet/src/screens/base_page.dart';
@@ -33,10 +34,7 @@ class IoniaLoginPage extends BasePage {
34 return Text(
35 S.current.login,
36 style: textMediumSemiBold(
36 - color: Theme.of(context)
37 - .accentTextTheme!
38 - .displayLarge!
39 - .backgroundColor!,
37 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
38 ),
39 );
40 }
@@ -74,10 +72,7 @@ class IoniaLoginPage extends BasePage {
72 text: S.of(context).login,
73 onPressed: _login,
74 isLoading: _authViewModel.signInState is IoniaCreateStateLoading,
77 - color: Theme.of(context)
78 - .accentTextTheme!
79 - .bodyLarge!
80 - .color!,
75 + color: Theme.of(context).primaryColor,
76 textColor: Colors.white,
77 ),
78 ),
lib/src/screens/ionia/auth/ionia_verify_otp_page.dart
+5 -12
@@ -1,3 +1,5 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/keyboard_theme.dart';
3 import 'package:cake_wallet/ionia/ionia_create_state.dart';
4 import 'package:cake_wallet/palette.dart';
5 import 'package:cake_wallet/routes.dart';
@@ -41,10 +43,7 @@ class IoniaVerifyIoniaOtp extends BasePage {
43 return Text(
44 S.current.verification,
45 style: textMediumSemiBold(
44 - color: Theme.of(context)
45 - .accentTextTheme!
46 - .displayLarge!
47 - .backgroundColor!,
46 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
47 ),
48 );
49 }
@@ -65,10 +64,7 @@ class IoniaVerifyIoniaOtp extends BasePage {
64 return KeyboardActions(
65 config: KeyboardActionsConfig(
66 keyboardActionsPlatform: KeyboardActionsPlatform.IOS,
68 - keyboardBarColor: Theme.of(context)
69 - .accentTextTheme!
70 - .bodyLarge!
71 - .backgroundColor!,
67 + keyboardBarColor: Theme.of(context).extension<KeyboardTheme>()!.keyboardBarColor,
68 nextFocus: false,
69 actions: [
70 KeyboardActionsItem(
@@ -126,10 +122,7 @@ class IoniaVerifyIoniaOtp extends BasePage {
122 onPressed: _verify,
123 isDisabled: _authViewModel.otpState is IoniaOtpSendDisabled,
124 isLoading: _authViewModel.otpState is IoniaOtpValidating,
129 - color: Theme.of(context)
130 - .accentTextTheme!
131 - .bodyLarge!
132 - .color!,
125 + color: Theme.of(context).primaryColor,
126 textColor: Colors.white,
127 ),
128 ),
lib/src/screens/ionia/auth/ionia_welcome_page.dart
+6 -11
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:cake_wallet/palette.dart';
3 import 'package:cake_wallet/routes.dart';
4 import 'package:cake_wallet/src/screens/base_page.dart';
@@ -14,10 +15,7 @@ class IoniaWelcomePage extends BasePage {
15 return Text(
16 S.current.welcome_to_cakepay,
17 style: textMediumSemiBold(
17 - color: Theme.of(context)
18 - .accentTextTheme!
19 - .displayLarge!
20 - .backgroundColor!,
18 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
19 ),
20 );
21 }
@@ -38,7 +36,7 @@ class IoniaWelcomePage extends BasePage {
36 fontSize: 18,
37 fontWeight: FontWeight.w400,
38 fontFamily: 'Lato',
41 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
39 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
40 ),
41 ),
42 SizedBox(height: 20),
@@ -48,7 +46,7 @@ class IoniaWelcomePage extends BasePage {
46 fontSize: 18,
47 fontWeight: FontWeight.w400,
48 fontFamily: 'Lato',
51 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
49 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
50 ),
51 ),
52 ],
@@ -59,10 +57,7 @@ class IoniaWelcomePage extends BasePage {
57 PrimaryButton(
58 text: S.of(context).create_account,
59 onPressed: () => Navigator.of(context).pushNamed(Routes.ioniaCreateAccountPage),
62 - color: Theme.of(context)
63 - .accentTextTheme!
64 - .bodyLarge!
65 - .color!,
60 + color: Theme.of(context).primaryColor,
61 textColor: Colors.white,
62 ),
63 SizedBox(
@@ -74,7 +69,7 @@ class IoniaWelcomePage extends BasePage {
69 fontSize: 15,
70 fontWeight: FontWeight.w500,
71 fontFamily: 'Lato',
77 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
72 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
73 ),
74 ),
75 SizedBox(height: 8),
lib/src/screens/ionia/cards/ionia_account_cards_page.dart
+15 -31
@@ -1,14 +1,19 @@
1
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 import 'package:cake_wallet/ionia/ionia_create_state.dart';
4 import 'package:cake_wallet/ionia/ionia_gift_card.dart';
5 import 'package:cake_wallet/routes.dart';
6 import 'package:cake_wallet/src/screens/base_page.dart';
7 import 'package:cake_wallet/src/screens/ionia/widgets/card_item.dart';
8 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
9 +import 'package:cake_wallet/themes/extensions/order_theme.dart';
10 import 'package:cake_wallet/typography.dart';
11 import 'package:cake_wallet/view_model/ionia/ionia_account_view_model.dart';
12 import 'package:flutter/material.dart';
13 import 'package:cake_wallet/generated/i18n.dart';
14 import 'package:flutter_mobx/flutter_mobx.dart';
15 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
16 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
17
18 class IoniaAccountCardsPage extends BasePage {
19 IoniaAccountCardsPage(this.ioniaAccountViewModel);
@@ -20,10 +25,7 @@ class IoniaAccountCardsPage extends BasePage {
25 return Text(
26 S.of(context).cards,
27 style: textLargeSemiBold(
23 - color: Theme.of(context)
24 - .accentTextTheme!
25 - .displayLarge!
26 - .backgroundColor!,
28 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
29 ),
30 );
31 }
@@ -72,10 +74,7 @@ class _IoniaCardTabsState extends State<_IoniaCardTabs> with SingleTickerProvide
74 width: 230,
75 padding: EdgeInsets.all(5),
76 decoration: BoxDecoration(
75 - color: Theme.of(context)
76 - .accentTextTheme!
77 - .displayLarge!
78 - .backgroundColor!
77 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor
78 .withOpacity(0.1),
79 borderRadius: BorderRadius.circular(
80 25.0,
@@ -89,17 +88,11 @@ class _IoniaCardTabsState extends State<_IoniaCardTabs> with SingleTickerProvide
88 borderRadius: BorderRadius.circular(
89 25.0,
90 ),
92 - color: Theme.of(context)
93 - .accentTextTheme!
94 - .bodyLarge!
95 - .color!,
91 + color: Theme.of(context).primaryColor,
92 ),
97 - labelColor: Theme.of(context)
98 - .primaryTextTheme!
99 - .displayLarge!
100 - .backgroundColor!,
93 + labelColor: Theme.of(context).extension<OrderTheme>()!.iconColor,
94 unselectedLabelColor:
102 - Theme.of(context).primaryTextTheme!.titleLarge!.color!,
95 + Theme.of(context).extension<CakeTextTheme>()!.titleColor,
96 tabs: [
97 Tab(
98 text: S.of(context).active,
@@ -169,12 +162,9 @@ class _IoniaCardListView extends StatelessWidget {
162 if(isLoading){
163 return Center(
164 child: CircularProgressIndicator(
172 - backgroundColor: Theme.of(context)
173 - .accentTextTheme!
174 - .displayMedium!
175 - .backgroundColor!,
165 + backgroundColor: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
166 valueColor: AlwaysStoppedAnimation<Color>(
177 - Theme.of(context).primaryTextTheme!.bodyMedium!.color!),
167 + Theme.of(context).extension<ExchangePageTheme>()!.firstGradientBottomPanelColor),
168 ),
169 );
170 }
@@ -184,7 +174,7 @@ class _IoniaCardListView extends StatelessWidget {
174 emptyText,
175 textAlign: TextAlign.center,
176 style: textSmall(
187 - color: Theme.of(context).primaryTextTheme!.labelSmall!.color!,
177 + color: Theme.of(context).extension<TransactionTradeTheme>()!.detailsTitlesColor,
178 ),
179 ),
180 )
@@ -197,18 +187,12 @@ class _IoniaCardListView extends StatelessWidget {
187 child: CardItem(
188 onTap: () => onTap?.call(merchant),
189 title: merchant.legalName,
200 - backgroundColor: Theme.of(context)
201 - .accentTextTheme!
202 - .displayLarge!
203 - .backgroundColor!
190 + backgroundColor: Theme.of(context).extension<CakeTextTheme>()!.titleColor
191 .withOpacity(0.1),
192 discount: 0,
193 hideBorder: true,
194 discountBackground: AssetImage('assets/images/red_badge_discount.png'),
208 - titleColor: Theme.of(context)
209 - .accentTextTheme!
210 - .displayLarge!
211 - .backgroundColor!,
195 + titleColor: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
196 subtitleColor: Theme.of(context).hintColor,
197 subTitle: '',
198 logoUrl: merchant.logoUrl,
lib/src/screens/ionia/cards/ionia_account_page.dart
+6 -10
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:cake_wallet/routes.dart';
3 import 'package:cake_wallet/src/screens/base_page.dart';
4 import 'package:cake_wallet/generated/i18n.dart';
@@ -8,6 +9,7 @@ import 'package:cake_wallet/typography.dart';
9 import 'package:cake_wallet/view_model/ionia/ionia_account_view_model.dart';
10 import 'package:flutter/material.dart';
11 import 'package:flutter_mobx/flutter_mobx.dart';
12 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
13
14 class IoniaAccountPage extends BasePage {
15 IoniaAccountPage(this.ioniaAccountViewModel);
@@ -19,10 +21,7 @@ class IoniaAccountPage extends BasePage {
21 return Text(
22 S.current.account,
23 style: textMediumSemiBold(
22 - color: Theme.of(context)
23 - .accentTextTheme!
24 - .displayLarge!
25 - .backgroundColor!,
24 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
25 ),
26 );
27 }
@@ -136,10 +135,7 @@ class IoniaAccountPage extends BasePage {
135 bottomSection: Column(
136 children: [
137 PrimaryButton(
139 - color: Theme.of(context)
140 - .accentTextTheme!
141 - .bodyLarge!
142 - .color!,
138 + color: Theme.of(context).primaryColor,
139 textColor: Colors.white,
140 text: S.of(context).logout,
141 onPressed: () {
@@ -170,8 +166,8 @@ class _GradiantContainer extends StatelessWidget {
166 borderRadius: BorderRadius.circular(15),
167 gradient: LinearGradient(
168 colors: [
173 - Theme.of(context).primaryTextTheme!.titleMedium!.decorationColor!,
174 - Theme.of(context).primaryTextTheme!.titleMedium!.color!,
169 + Theme.of(context).extension<SendPageTheme>()!.secondGradientColor,
170 + Theme.of(context).extension<SendPageTheme>()!.firstGradientColor,
171 ],
172 begin: Alignment.topRight,
173 end: Alignment.bottomLeft,
lib/src/screens/ionia/cards/ionia_activate_debit_card_page.dart
+3 -8
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:cake_wallet/ionia/ionia_create_state.dart';
3 import 'package:cake_wallet/routes.dart';
4 import 'package:cake_wallet/src/screens/base_page.dart';
@@ -23,10 +24,7 @@ class IoniaActivateDebitCardPage extends BasePage {
24 return Text(
25 S.current.debit_card,
26 style: textMediumSemiBold(
26 - color: Theme.of(context)
27 - .accentTextTheme!
28 - .displayLarge!
29 - .backgroundColor!,
27 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
28 ),
29 );
30 }
@@ -79,10 +77,7 @@ class IoniaActivateDebitCardPage extends BasePage {
77 },
78 isLoading: _cardsListViewModel.createCardState is IoniaCreateCardLoading,
79 text: S.of(context).agree_and_continue,
82 - color: Theme.of(context)
83 - .accentTextTheme!
84 - .bodyLarge!
85 - .color!,
80 + color: Theme.of(context).primaryColor,
81 textColor: Colors.white,
82 ),
83 );
lib/src/screens/ionia/cards/ionia_buy_card_detail_page.dart
+25 -20
@@ -1,4 +1,6 @@
1 import 'package:cake_wallet/core/execution_state.dart';
2 +import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
3 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
4 import 'package:cake_wallet/ionia/ionia_merchant.dart';
5 import 'package:cake_wallet/ionia/ionia_tip.dart';
6 import 'package:cake_wallet/palette.dart';
@@ -9,6 +11,7 @@ import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
11 import 'package:cake_wallet/src/widgets/discount_badge.dart';
12 import 'package:cake_wallet/src/widgets/primary_button.dart';
13 import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
14 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
15 import 'package:cake_wallet/typography.dart';
16 import 'package:cake_wallet/utils/show_pop_up.dart';
17 import 'package:cake_wallet/view_model/ionia/ionia_purchase_merch_view_model.dart';
@@ -18,6 +21,8 @@ import 'package:flutter_mobx/flutter_mobx.dart';
21 import 'package:mobx/mobx.dart';
22 import 'package:cake_wallet/src/screens/base_page.dart';
23 import 'package:cake_wallet/src/screens/send/widgets/confirm_sending_alert.dart';
24 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
25 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
26
27 class IoniaBuyGiftCardDetailPage extends BasePage {
28 IoniaBuyGiftCardDetailPage(this.ioniaPurchaseViewModel);
@@ -28,7 +33,7 @@ class IoniaBuyGiftCardDetailPage extends BasePage {
33 Widget middle(BuildContext context) {
34 return Text(
35 ioniaPurchaseViewModel.ioniaMerchant.legalName,
31 - style: textMediumSemiBold(color: Theme.of(context).accentTextTheme!.displayLarge!.backgroundColor!),
36 + style: textMediumSemiBold(color: Theme.of(context).extension<CakeTextTheme>()!.titleColor),
37 );
38 }
39
@@ -96,8 +101,8 @@ class IoniaBuyGiftCardDetailPage extends BasePage {
101 borderRadius: BorderRadius.circular(20),
102 gradient: LinearGradient(
103 colors: [
99 - Theme.of(context).primaryTextTheme!.titleMedium!.color!,
100 - Theme.of(context).primaryTextTheme!.titleMedium!.decorationColor!,
104 + Theme.of(context).extension<SendPageTheme>()!.firstGradientColor,
105 + Theme.of(context).extension<SendPageTheme>()!.secondGradientColor,
106 ],
107 begin: Alignment.topLeft,
108 end: Alignment.bottomRight,
@@ -163,7 +168,7 @@ class IoniaBuyGiftCardDetailPage extends BasePage {
168 Text(
169 S.of(context).tip,
170 style: TextStyle(
166 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
171 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
172 fontWeight: FontWeight.w700,
173 fontSize: 14,
174 ),
@@ -202,7 +207,7 @@ class IoniaBuyGiftCardDetailPage extends BasePage {
207 ioniaPurchaseViewModel.invoiceCommittingState is IsExecutingState,
208 onPressed: () => purchaseCard(context),
209 text: S.of(context).purchase_gift_card,
205 - color: Theme.of(context).accentTextTheme!.bodyLarge!.color!,
210 + color: Theme.of(context).primaryColor,
211 textColor: Colors.white,
212 );
213 }),
@@ -212,7 +217,7 @@ class IoniaBuyGiftCardDetailPage extends BasePage {
217 onTap: () => _showTermsAndCondition(context),
218 child: Text(S.of(context).settings_terms_and_conditions,
219 style: textMediumSemiBold(
215 - color: Theme.of(context).primaryTextTheme.bodyMedium!.color!,
220 + color: Theme.of(context).extension<ExchangePageTheme>()!.firstGradientBottomPanelColor,
221 ).copyWith(fontSize: 12)),
222 ),
223 SizedBox(height: 16)
@@ -232,7 +237,7 @@ class IoniaBuyGiftCardDetailPage extends BasePage {
237 child: Text(
238 ioniaPurchaseViewModel.ioniaMerchant.termsAndConditions,
239 style: textMedium(
235 - color: Theme.of(context).textTheme!.displaySmall!.color!,
240 + color: Theme.of(context).extension<ReceivePageTheme>()!.tilesTextColor,
241 ),
242 ),
243 ),
@@ -270,13 +275,13 @@ class IoniaBuyGiftCardDetailPage extends BasePage {
275 child: Text(
276 instruction.header,
277 style: textLargeSemiBold(
273 - color: Theme.of(context).textTheme!.displaySmall!.color!,
278 + color: Theme.of(context).extension<ReceivePageTheme>()!.tilesTextColor,
279 ),
280 )),
281 Text(
282 instruction.body,
283 style: textMedium(
279 - color: Theme.of(context).textTheme!.displaySmall!.color!,
284 + color: Theme.of(context).extension<ReceivePageTheme>()!.tilesTextColor,
285 ),
286 )
287 ];
@@ -323,7 +328,7 @@ class IoniaBuyGiftCardDetailPage extends BasePage {
328 alertLeftActionButtonTextColor: Colors.white,
329 alertRightActionButtonTextColor: Colors.white,
330 alertLeftActionButtonColor: Palette.brightOrange,
326 - alertRightActionButtonColor: Theme.of(context).textTheme!.titleSmall!.color,
331 + alertRightActionButtonColor: Theme.of(context).primaryColor,
332 actionRightButton: () async {
333 Navigator.of(context).pop();
334 await ioniaPurchaseViewModel.commitPaymentInvoice();
@@ -399,34 +404,34 @@ class TipButton extends StatelessWidget {
404
405 Color captionTextColor(BuildContext context) {
406 if (isDark(context)) {
402 - return Theme.of(context).primaryTextTheme!.titleLarge!.color!;
407 + return Theme.of(context).extension<CakeTextTheme>()!.titleColor;
408 }
409
410 return isSelected
406 - ? Theme.of(context).accentTextTheme!.titleLarge!.color!
407 - : Theme.of(context).primaryTextTheme!.titleLarge!.color!;
411 + ? Theme.of(context).dialogTheme.backgroundColor!
412 + : Theme.of(context).extension<CakeTextTheme>()!.titleColor;
413 }
414
415 Color subTitleTextColor(BuildContext context) {
416 if (isDark(context)) {
412 - return Theme.of(context).primaryTextTheme!.titleLarge!.color!;
417 + return Theme.of(context).extension<CakeTextTheme>()!.titleColor;
418 }
419
420 return isSelected
416 - ? Theme.of(context).accentTextTheme!.titleLarge!.color!
417 - : Theme.of(context).primaryTextTheme!.labelSmall!.color!;
421 + ? Theme.of(context).dialogTheme.backgroundColor!
422 + : Theme.of(context).extension<TransactionTradeTheme>()!.detailsTitlesColor;
423 }
424
425 Color? backgroundColor(BuildContext context) {
426 if (isDark(context)) {
427 return isSelected
428 ? null
424 - : Theme.of(context).accentTextTheme!.displayLarge!.backgroundColor!.withOpacity(0.01);
429 + : Theme.of(context).extension<CakeTextTheme>()!.titleColor.withOpacity(0.01);
430 }
431
432 return isSelected
433 ? null
429 - : Theme.of(context).accentTextTheme!.displayLarge!.backgroundColor!.withOpacity(0.1);
434 + : Theme.of(context).extension<CakeTextTheme>()!.titleColor.withOpacity(0.1);
435 }
436
437 @override
@@ -459,8 +464,8 @@ class TipButton extends StatelessWidget {
464 gradient: isSelected
465 ? LinearGradient(
466 colors: [
462 - Theme.of(context).primaryTextTheme!.titleMedium!.color!,
463 - Theme.of(context).primaryTextTheme!.titleMedium!.decorationColor!,
467 + Theme.of(context).extension<SendPageTheme>()!.firstGradientColor,
468 + Theme.of(context).extension<SendPageTheme>()!.secondGradientColor,
469 ],
470 begin: Alignment.topLeft,
471 end: Alignment.bottomRight,
lib/src/screens/ionia/cards/ionia_buy_gift_card.dart
+13 -40
@@ -1,3 +1,5 @@
1 +import 'package:cake_wallet/themes/extensions/keyboard_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 import 'package:cake_wallet/routes.dart';
4 import 'package:cake_wallet/src/screens/base_page.dart';
5 import 'package:cake_wallet/src/screens/ionia/widgets/card_item.dart';
@@ -13,6 +15,7 @@ import 'package:flutter/services.dart';
15 import 'package:flutter_mobx/flutter_mobx.dart';
16 import 'package:keyboard_actions/keyboard_actions.dart';
17 import 'package:cake_wallet/generated/i18n.dart';
18 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
19
20 class IoniaBuyGiftCardPage extends BasePage {
21 IoniaBuyGiftCardPage(
@@ -29,9 +32,6 @@ class IoniaBuyGiftCardPage extends BasePage {
32 @override
33 String get title => S.current.enter_amount;
34
32 - @override
33 - Color get titleColor => Colors.white;
34 -
35 @override
36 bool get extendBodyBehindAppBar => true;
37
@@ -50,10 +50,7 @@ class IoniaBuyGiftCardPage extends BasePage {
50 disableScroll: true,
51 config: KeyboardActionsConfig(
52 keyboardActionsPlatform: KeyboardActionsPlatform.IOS,
53 - keyboardBarColor: Theme.of(context)
54 - .accentTextTheme!
55 - .bodyLarge!
56 - .backgroundColor!,
53 + keyboardBarColor: Theme.of(context).extension<KeyboardTheme>()!.keyboardBarColor,
54 nextFocus: false,
55 actions: [
56 KeyboardActionsItem(
@@ -75,11 +72,8 @@ class IoniaBuyGiftCardPage extends BasePage {
72 bottomRight: Radius.circular(24),
73 ),
74 gradient: LinearGradient(colors: [
78 - Theme.of(context).primaryTextTheme!.titleMedium!.color!,
79 - Theme.of(context)
80 - .primaryTextTheme!
81 - .titleMedium!
82 - .decorationColor!,
75 + Theme.of(context).extension<SendPageTheme>()!.firstGradientColor,
76 + Theme.of(context).extension<SendPageTheme>()!.secondGradientColor,
77 ], begin: Alignment.topLeft, end: Alignment.bottomRight),
78 ),
79 child: Column(
@@ -101,10 +95,7 @@ class IoniaBuyGiftCardPage extends BasePage {
95 ],
96 hintText: '1000',
97 placeholderTextStyle: TextStyle(
104 - color: Theme.of(context)
105 - .primaryTextTheme!
106 - .headlineSmall!
107 - .color!,
98 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldBorderColor,
99 fontWeight: FontWeight.w600,
100 fontSize: 36,
101 ),
@@ -124,10 +115,7 @@ class IoniaBuyGiftCardPage extends BasePage {
115 ),
116 ),
117 Divider(
127 - color: Theme.of(context)
128 - .primaryTextTheme!
129 - .headlineSmall!
130 - .color!,
118 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldBorderColor,
119 height: 1,
120 ),
121 SizedBox(height: 8),
@@ -138,19 +126,13 @@ class IoniaBuyGiftCardPage extends BasePage {
126 Text(
127 S.of(context).min_amount(merchant.minimumCardPurchase.toStringAsFixed(2)),
128 style: TextStyle(
141 - color: Theme.of(context)
142 - .primaryTextTheme!
143 - .headlineSmall!
144 - .color!,
129 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldBorderColor,
130 ),
131 ),
132 Text(
133 S.of(context).max_amount(merchant.maximumCardPurchase.toStringAsFixed(2)),
134 style: TextStyle(
150 - color: Theme.of(context)
151 - .primaryTextTheme!
152 - .headlineSmall!
153 - .color!,
135 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldBorderColor,
136 ),
137 ),
138 ],
@@ -163,16 +145,10 @@ class IoniaBuyGiftCardPage extends BasePage {
145 padding: const EdgeInsets.all(24.0),
146 child: CardItem(
147 title: merchant.legalName,
166 - backgroundColor: Theme.of(context)
167 - .accentTextTheme!
168 - .displayLarge!
169 - .backgroundColor!
148 + backgroundColor: Theme.of(context).extension<CakeTextTheme>()!.titleColor
149 .withOpacity(0.1),
150 discount: merchant.discount,
172 - titleColor: Theme.of(context)
173 - .accentTextTheme!
174 - .displayLarge!
175 - .backgroundColor!,
151 + titleColor: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
152 subtitleColor: Theme.of(context).hintColor,
153 subTitle: merchant.avaibilityStatus,
154 logoUrl: merchant.logoUrl,
@@ -195,10 +171,7 @@ class IoniaBuyGiftCardPage extends BasePage {
171 ),
172 text: S.of(context).continue_text,
173 isDisabled: !ioniaBuyCardViewModel.isEnablePurchase,
198 - color: Theme.of(context)
199 - .accentTextTheme!
200 - .bodyLarge!
201 - .color!,
174 + color: Theme.of(context).primaryColor,
175 textColor: Colors.white,
176 ),
177 );
lib/src/screens/ionia/cards/ionia_custom_redeem_page.dart
+12 -36
@@ -1,3 +1,5 @@
1 +import 'package:cake_wallet/themes/extensions/keyboard_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 import 'package:cake_wallet/core/execution_state.dart';
4 import 'package:cake_wallet/src/screens/base_page.dart';
5 import 'package:cake_wallet/src/screens/ionia/widgets/card_item.dart';
@@ -12,6 +14,7 @@ import 'package:flutter/services.dart';
14 import 'package:flutter_mobx/flutter_mobx.dart';
15 import 'package:keyboard_actions/keyboard_actions.dart';
16 import 'package:cake_wallet/generated/i18n.dart';
17 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
18
19 class IoniaCustomRedeemPage extends BasePage {
20 IoniaCustomRedeemPage(
@@ -28,9 +31,6 @@ class IoniaCustomRedeemPage extends BasePage {
31 @override
32 String get title => S.current.custom_redeem_amount;
33
31 - @override
32 - Color get titleColor => Colors.white;
33 -
34 @override
35 bool get extendBodyBehindAppBar => true;
36
@@ -50,10 +50,7 @@ class IoniaCustomRedeemPage extends BasePage {
50 disableScroll: true,
51 config: KeyboardActionsConfig(
52 keyboardActionsPlatform: KeyboardActionsPlatform.IOS,
53 - keyboardBarColor: Theme.of(context)
54 - .accentTextTheme!
55 - .bodyLarge!
56 - .backgroundColor!,
53 + keyboardBarColor: Theme.of(context).extension<KeyboardTheme>()!.keyboardBarColor,
54 nextFocus: false,
55 actions: [
56 KeyboardActionsItem(
@@ -73,11 +70,8 @@ class IoniaCustomRedeemPage extends BasePage {
70 borderRadius: BorderRadius.only(
71 bottomLeft: Radius.circular(24), bottomRight: Radius.circular(24)),
72 gradient: LinearGradient(colors: [
76 - Theme.of(context).primaryTextTheme!.titleMedium!.color!,
77 - Theme.of(context)
78 - .primaryTextTheme!
79 - .titleMedium!
80 - .decorationColor!,
73 + Theme.of(context).extension<SendPageTheme>()!.firstGradientColor,
74 + Theme.of(context).extension<SendPageTheme>()!.secondGradientColor,
75 ], begin: Alignment.topLeft, end: Alignment.bottomRight),
76 ),
77 child: Column(
@@ -92,17 +86,11 @@ class IoniaCustomRedeemPage extends BasePage {
86 inputFormatters: [FilteringTextInputFormatter.deny(RegExp('[\-|\ ]'))],
87 hintText: '1000',
88 placeholderTextStyle: TextStyle(
95 - color: Theme.of(context)
96 - .primaryTextTheme!
97 - .headlineSmall!
98 - .color!,
89 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldBorderColor,
90 fontWeight: FontWeight.w500,
91 fontSize: 36,
92 ),
102 - borderColor: Theme.of(context)
103 - .primaryTextTheme!
104 - .headlineSmall!
105 - .color!,
93 + borderColor: Theme.of(context).extension<SendPageTheme>()!.textFieldBorderColor,
94 textColor: Colors.white,
95 textStyle: TextStyle(
96 color: Colors.white,
@@ -133,10 +121,7 @@ class IoniaCustomRedeemPage extends BasePage {
121 child: Text(
122 '\$${giftCard.remainingAmount} - \$${ioniaCustomRedeemViewModel.amount} = \$${ioniaCustomRedeemViewModel.formattedRemaining} ${S.of(context).remaining}',
123 style: TextStyle(
136 - color: Theme.of(context)
137 - .primaryTextTheme!
138 - .headlineSmall!
139 - .color!,
124 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldBorderColor,
125 ),
126 ),
127 )
@@ -150,18 +135,12 @@ class IoniaCustomRedeemPage extends BasePage {
135 padding: const EdgeInsets.all(24.0),
136 child: CardItem(
137 title: giftCard.legalName,
153 - backgroundColor: Theme.of(context)
154 - .accentTextTheme!
155 - .displayLarge!
156 - .backgroundColor!
138 + backgroundColor: Theme.of(context).extension<CakeTextTheme>()!.titleColor
139 .withOpacity(0.1),
140 discount: giftCard.remainingAmount,
141 isAmount: true,
142 discountBackground: AssetImage('assets/images/red_badge_discount.png'),
161 - titleColor: Theme.of(context)
162 - .accentTextTheme!
163 - .displayLarge!
164 - .backgroundColor!,
143 + titleColor: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
144 subtitleColor: Theme.of(context).hintColor,
145 subTitle: S.of(context).online,
146 logoUrl: giftCard.logoUrl,
@@ -178,10 +157,7 @@ class IoniaCustomRedeemPage extends BasePage {
157 isLoading: ioniaCustomRedeemViewModel.redeemState is IsExecutingState,
158 isDisabled: ioniaCustomRedeemViewModel.disableRedeem,
159 text: S.of(context).add_custom_redemption,
181 - color: Theme.of(context)
182 - .accentTextTheme!
183 - .bodyLarge!
184 - .color!,
160 + color: Theme.of(context).primaryColor,
161 textColor: Colors.white,
162 onPressed: () => ioniaCustomRedeemViewModel.addCustomRedeem().then((value) {
163 Navigator.of(context).pop(ioniaCustomRedeemViewModel.remaining.toString());
lib/src/screens/ionia/cards/ionia_custom_tip_page.dart
+12 -36
@@ -1,3 +1,5 @@
1 +import 'package:cake_wallet/themes/extensions/keyboard_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 import 'package:cake_wallet/ionia/ionia_merchant.dart';
4 import 'package:cake_wallet/src/screens/base_page.dart';
5 import 'package:cake_wallet/src/screens/ionia/widgets/card_item.dart';
@@ -12,6 +14,7 @@ import 'package:flutter/services.dart';
14 import 'package:flutter_mobx/flutter_mobx.dart';
15 import 'package:keyboard_actions/keyboard_actions.dart';
16 import 'package:cake_wallet/generated/i18n.dart';
17 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
18
19 class IoniaCustomTipPage extends BasePage {
20 IoniaCustomTipPage(
@@ -29,9 +32,6 @@ class IoniaCustomTipPage extends BasePage {
32 @override
33 String get title => S.current.enter_amount;
34
32 - @override
33 - Color get titleColor => Colors.white;
34 -
35 @override
36 bool get extendBodyBehindAppBar => true;
37
@@ -51,10 +51,7 @@ class IoniaCustomTipPage extends BasePage {
51 disableScroll: true,
52 config: KeyboardActionsConfig(
53 keyboardActionsPlatform: KeyboardActionsPlatform.IOS,
54 - keyboardBarColor: Theme.of(context)
55 - .accentTextTheme!
56 - .bodyLarge!
57 - .backgroundColor!,
54 + keyboardBarColor: Theme.of(context).extension<KeyboardTheme>()!.keyboardBarColor,
55 nextFocus: false,
56 actions: [
57 KeyboardActionsItem(
@@ -73,11 +70,8 @@ class IoniaCustomTipPage extends BasePage {
70 decoration: BoxDecoration(
71 borderRadius: BorderRadius.only(bottomLeft: Radius.circular(24), bottomRight: Radius.circular(24)),
72 gradient: LinearGradient(colors: [
76 - Theme.of(context).primaryTextTheme!.titleMedium!.color!,
77 - Theme.of(context)
78 - .primaryTextTheme!
79 - .titleMedium!
80 - .decorationColor!,
73 + Theme.of(context).extension<SendPageTheme>()!.firstGradientColor,
74 + Theme.of(context).extension<SendPageTheme>()!.secondGradientColor,
75 ], begin: Alignment.topLeft, end: Alignment.bottomRight),
76 ),
77 child: Column(
@@ -92,17 +86,11 @@ class IoniaCustomTipPage extends BasePage {
86 inputFormatters: [FilteringTextInputFormatter.deny(RegExp('[\-|\ ]'))],
87 hintText: '1000',
88 placeholderTextStyle: TextStyle(
95 - color: Theme.of(context)
96 - .primaryTextTheme!
97 - .headlineSmall!
98 - .color!,
89 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldBorderColor,
90 fontWeight: FontWeight.w500,
91 fontSize: 36,
92 ),
102 - borderColor: Theme.of(context)
103 - .primaryTextTheme!
104 - .headlineSmall!
105 - .color!,
93 + borderColor: Theme.of(context).extension<SendPageTheme>()!.textFieldBorderColor,
94 textColor: Colors.white,
95 textStyle: TextStyle(
96 color: Colors.white,
@@ -137,10 +125,7 @@ class IoniaCustomTipPage extends BasePage {
125 text: TextSpan(
126 text: '\$${_amountController.text}',
127 style: TextStyle(
140 - color: Theme.of(context)
141 - .primaryTextTheme!
142 - .headlineSmall!
143 - .color!,
128 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldBorderColor,
129 ),
130 children: [
131 TextSpan(text: ' ${S.of(context).is_percentage} '),
@@ -158,16 +143,10 @@ class IoniaCustomTipPage extends BasePage {
143 padding: const EdgeInsets.all(24.0),
144 child: CardItem(
145 title: merchant.legalName,
161 - backgroundColor: Theme.of(context)
162 - .accentTextTheme!
163 - .displayLarge!
164 - .backgroundColor!
146 + backgroundColor: Theme.of(context).extension<CakeTextTheme>()!.titleColor
147 .withOpacity(0.1),
148 discount: 0.0,
167 - titleColor: Theme.of(context)
168 - .accentTextTheme!
169 - .displayLarge!
170 - .backgroundColor!,
149 + titleColor: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
150 subtitleColor: Theme.of(context).hintColor,
151 subTitle: merchant.isOnline ? S.of(context).online : S.of(context).offline,
152 logoUrl: merchant.logoUrl,
@@ -184,10 +163,7 @@ class IoniaCustomTipPage extends BasePage {
163 Navigator.of(context).pop(customTipViewModel.customTip);
164 },
165 text: S.of(context).add_tip,
187 - color: Theme.of(context)
188 - .accentTextTheme!
189 - .bodyLarge!
190 - .color!,
166 + color: Theme.of(context).primaryColor,
167 textColor: Colors.white,
168 ),
169 ),
lib/src/screens/ionia/cards/ionia_debit_card_page.dart
+18 -32
@@ -1,4 +1,6 @@
1 import 'package:cake_wallet/ionia/ionia_create_state.dart';
2 +import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
3 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
4 import 'package:cake_wallet/ionia/ionia_virtual_card.dart';
5 import 'package:cake_wallet/routes.dart';
6 import 'package:cake_wallet/src/screens/base_page.dart';
@@ -6,12 +8,14 @@ import 'package:cake_wallet/src/screens/ionia/widgets/text_icon_button.dart';
8 import 'package:cake_wallet/src/widgets/alert_background.dart';
9 import 'package:cake_wallet/src/widgets/primary_button.dart';
10 import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
11 +import 'package:cake_wallet/themes/extensions/cake_scrollbar_theme.dart';
12 import 'package:cake_wallet/typography.dart';
13 import 'package:cake_wallet/utils/show_pop_up.dart';
14 import 'package:cake_wallet/view_model/ionia/ionia_gift_cards_list_view_model.dart';
15 import 'package:flutter/material.dart';
16 import 'package:cake_wallet/generated/i18n.dart';
17 import 'package:flutter_mobx/flutter_mobx.dart';
18 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
19
20 class IoniaDebitCardPage extends BasePage {
21 final IoniaGiftCardsListViewModel _cardsListViewModel;
@@ -23,10 +27,7 @@ class IoniaDebitCardPage extends BasePage {
27 return Text(
28 S.current.debit_card,
29 style: textMediumSemiBold(
26 - color: Theme.of(context)
27 - .accentTextTheme!
28 - .displayLarge!
29 - .backgroundColor!,
30 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
31 ),
32 );
33 }
@@ -55,10 +56,7 @@ class IoniaDebitCardPage extends BasePage {
56 child: Text(
57 S.of(context).billing_address_info,
58 style: textSmall(
58 - color: Theme.of(context)
59 - .textTheme!
60 - .headlineMedium!
61 - .color!),
59 + color: Theme.of(context).extension<ReceivePageTheme>()!.iconsColor),
60 textAlign: TextAlign.center,
61 ),
62 ),
@@ -67,16 +65,13 @@ class IoniaDebitCardPage extends BasePage {
65 text: S.of(context).order_physical_card,
66 onPressed: () {},
67 color: Color(0xffE9F2FC),
70 - textColor: Theme.of(context).textTheme!.displaySmall!.color!,
68 + textColor: Theme.of(context).extension<ReceivePageTheme>()!.tilesTextColor,
69 ),
70 SizedBox(height: 8),
71 PrimaryButton(
72 text: S.of(context).add_value,
73 onPressed: () {},
76 - color: Theme.of(context)
77 - .accentTextTheme!
78 - .bodyLarge!
79 - .color!,
74 + color: Theme.of(context).primaryColor,
75 textColor: Colors.white,
76 ),
77 SizedBox(height: 16)
@@ -124,15 +119,12 @@ class IoniaDebitCardPage extends BasePage {
119 text: S.of(context).get_a,
120 style: textMedium(
121 color:
127 - Theme.of(context).textTheme!.displaySmall!.color!),
122 + Theme.of(context).extension<ReceivePageTheme>()!.tilesTextColor),
123 children: [
124 TextSpan(
125 text: S.of(context).digital_and_physical_card,
126 style: textMediumBold(
132 - color: Theme.of(context)
133 - .textTheme!
134 - .displaySmall!
135 - .color!),
127 + color: Theme.of(context).extension<ReceivePageTheme>()!.tilesTextColor),
128 ),
129 TextSpan(
130 text: S.of(context).get_card_note,
@@ -150,10 +142,7 @@ class IoniaDebitCardPage extends BasePage {
142 bottomSection: PrimaryButton(
143 text: S.of(context).activate,
144 onPressed: () => _showHowToUseCard(context, activate: true),
153 - color: Theme.of(context)
154 - .accentTextTheme!
155 - .bodyLarge!
156 - .color!,
145 + color: Theme.of(context).primaryColor,
146 textColor: Colors.white,
147 ),
148 );
@@ -185,7 +174,7 @@ class IoniaDebitCardPage extends BasePage {
174 S.of(context).how_to_use_card,
175 style: textLargeSemiBold(
176 color:
188 - Theme.of(context).textTheme!.bodyMedium!.color!,
177 + Theme.of(context).extension<CakeScrollbarTheme>()!.thumbColor,
178 ),
179 ),
180 SizedBox(height: 24),
@@ -194,10 +183,7 @@ class IoniaDebitCardPage extends BasePage {
183 child: Text(
184 S.of(context).signup_for_card_accept_terms,
185 style: textSmallSemiBold(
197 - color: Theme.of(context)
198 - .textTheme!
199 - .displaySmall!
200 - .color!,
186 + color: Theme.of(context).extension<ReceivePageTheme>()!.tilesTextColor,
187 ),
188 ),
189 ),
@@ -219,7 +205,7 @@ class IoniaDebitCardPage extends BasePage {
205 text: S.of(context).got_it,
206 color: Color.fromRGBO(233, 242, 252, 1),
207 textColor:
222 - Theme.of(context).textTheme!.displaySmall!.color!,
208 + Theme.of(context).extension<ReceivePageTheme>()!.tilesTextColor,
209 ),
210 SizedBox(height: 21),
211 ],
@@ -283,8 +269,8 @@ class _IoniaDebitCardState extends State<_IoniaDebitCard> {
269 borderRadius: BorderRadius.circular(24),
270 gradient: LinearGradient(
271 colors: [
286 - Theme.of(context).primaryTextTheme!.titleMedium!.color!,
287 - Theme.of(context).primaryTextTheme!.titleMedium!.decorationColor!,
272 + Theme.of(context).extension<SendPageTheme>()!.firstGradientColor,
273 + Theme.of(context).extension<SendPageTheme>()!.secondGradientColor,
274 ],
275 begin: Alignment.topLeft,
276 end: Alignment.bottomRight,
@@ -393,13 +379,13 @@ class _TitleSubtitleTile extends StatelessWidget {
379 Text(
380 title,
381 style: textSmallSemiBold(
396 - color: Theme.of(context).textTheme!.displaySmall!.color!),
382 + color: Theme.of(context).extension<ReceivePageTheme>()!.tilesTextColor),
383 ),
384 SizedBox(height: 4),
385 Text(
386 subtitle,
387 style: textSmall(
402 - color: Theme.of(context).textTheme!.displaySmall!.color!),
388 + color: Theme.of(context).extension<ReceivePageTheme>()!.tilesTextColor),
389 ),
390 ],
391 );
lib/src/screens/ionia/cards/ionia_gift_card_detail_page.dart
+9 -10
@@ -1,4 +1,6 @@
1 import 'package:cake_wallet/core/execution_state.dart';
2 +import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
3 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
4 import 'package:cake_wallet/ionia/ionia_gift_card.dart';
5 import 'package:cake_wallet/routes.dart';
6 import 'package:cake_wallet/src/screens/base_page.dart';
@@ -33,7 +35,7 @@ class IoniaGiftCardDetailPage extends BasePage {
35
36 final _backButton = Icon(
37 Icons.arrow_back_ios,
36 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
38 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
39 size: 16,
40 );
41 return Padding(
@@ -60,10 +62,7 @@ class IoniaGiftCardDetailPage extends BasePage {
62 return Text(
63 viewModel.giftCard.legalName,
64 style: textMediumSemiBold(
63 - color: Theme.of(context)
64 - .accentTextTheme!
65 - .displayLarge!
66 - .backgroundColor!),
65 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor),
66 );
67 }
68
@@ -145,8 +144,8 @@ class IoniaGiftCardDetailPage extends BasePage {
144 viewModel.refeshCard();
145 },
146 text: S.of(context).more_options,
148 - color: Theme.of(context).accentTextTheme!.bodySmall!.color!,
149 - textColor: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
147 + color: Theme.of(context).cardColor,
148 + textColor: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
149 ),
150 SizedBox(height: 12),
151 LoadingPrimaryButton(
@@ -158,7 +157,7 @@ class IoniaGiftCardDetailPage extends BasePage {
157 },
158 ),
159 text: S.of(context).mark_as_redeemed,
161 - color: Theme.of(context).accentTextTheme!.bodyLarge!.color!,
160 + color: Theme.of(context).primaryColor,
161 textColor: Colors.white,
162 ),
163 ],
@@ -201,13 +200,13 @@ class IoniaGiftCardDetailPage extends BasePage {
200 child: Text(
201 instruction.header,
202 style: textLargeSemiBold(
204 - color: Theme.of(context).textTheme!.displaySmall!.color!,
203 + color: Theme.of(context).extension<ReceivePageTheme>()!.tilesTextColor,
204 ),
205 )),
206 Text(
207 instruction.body,
208 style: textMedium(
210 - color: Theme.of(context).textTheme!.displaySmall!.color!,
209 + color: Theme.of(context).extension<ReceivePageTheme>()!.tilesTextColor,
210 ),
211 )
212 ];
lib/src/screens/ionia/cards/ionia_manage_cards_page.dart
+25 -40
@@ -2,10 +2,13 @@ import 'package:cake_wallet/ionia/ionia_create_state.dart';
2 import 'package:cake_wallet/ionia/ionia_merchant.dart';
3 import 'package:cake_wallet/routes.dart';
4 import 'package:cake_wallet/src/screens/base_page.dart';
5 +import 'package:cake_wallet/src/widgets/gradient_background.dart';
6 import 'package:cake_wallet/src/screens/ionia/widgets/card_item.dart';
7 import 'package:cake_wallet/src/screens/ionia/widgets/card_menu.dart';
8 import 'package:cake_wallet/src/screens/ionia/widgets/ionia_filter_modal.dart';
9 import 'package:cake_wallet/src/widgets/cake_scrollbar.dart';
10 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
11 +import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart';
12 import 'package:cake_wallet/themes/theme_base.dart';
13 import 'package:cake_wallet/utils/debounce.dart';
14 import 'package:cake_wallet/typography.dart';
@@ -15,6 +18,9 @@ import 'package:flutter/cupertino.dart';
18 import 'package:flutter/material.dart';
19 import 'package:cake_wallet/generated/i18n.dart';
20 import 'package:flutter_mobx/flutter_mobx.dart';
21 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
22 +import 'package:cake_wallet/themes/extensions/balance_page_theme.dart';
23 +import 'package:cake_wallet/themes/extensions/filter_theme.dart';
24
25 class IoniaManageCardsPage extends BasePage {
26 IoniaManageCardsPage(this._cardsListViewModel): searchFocusNode = FocusNode() {
@@ -36,29 +42,12 @@ class IoniaManageCardsPage extends BasePage {
42 final _searchController = TextEditingController();
43
44 @override
39 - Color get backgroundLightColor => currentTheme.type == ThemeType.bright ? Colors.transparent : Colors.white;
45 + bool get gradientBackground => true;
46
47 @override
42 - Color get backgroundDarkColor => Colors.transparent;
43 -
44 - @override
45 - Color get titleColor => currentTheme.type == ThemeType.bright ? Colors.white : Colors.black;
46 -
47 - @override
48 - Widget Function(BuildContext, Widget) get rootWrapper => (BuildContext context, Widget scaffold) => Container(
49 - decoration: BoxDecoration(
50 - gradient: LinearGradient(
51 - colors: [
52 - Theme.of(context).colorScheme.secondary,
53 - Theme.of(context).scaffoldBackgroundColor,
54 - Theme.of(context).primaryColor,
55 - ],
56 - begin: Alignment.topRight,
57 - end: Alignment.bottomLeft,
58 - ),
59 - ),
60 - child: scaffold,
61 - );
48 + Widget Function(BuildContext, Widget) get rootWrapper =>
49 + (BuildContext context, Widget scaffold) =>
50 + GradientBackground(scaffold: scaffold);
51
52 @override
53 bool get resizeToAvoidBottomInset => false;
@@ -71,10 +60,7 @@ class IoniaManageCardsPage extends BasePage {
60 return Text(
61 S.of(context).gift_cards,
62 style: textMediumSemiBold(
74 - color: Theme.of(context)
75 - .accentTextTheme!
76 - .displayMedium!
77 - .backgroundColor!,
63 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
64 ),
65 );
66 }
@@ -100,7 +86,7 @@ class IoniaManageCardsPage extends BasePage {
86 width: 32,
87 padding: EdgeInsets.all(8),
88 decoration: BoxDecoration(
103 - color: Theme.of(context).textTheme!.titleLarge!.backgroundColor!,
89 + color: Theme.of(context).extension<SyncIndicatorTheme>()!.syncedBackgroundColor,
90 border: Border.all(
91 color: Colors.white.withOpacity(0.2),
92 ),
@@ -108,7 +94,7 @@ class IoniaManageCardsPage extends BasePage {
94 ),
95 child: Image.asset(
96 'assets/images/filter.png',
111 - color: Theme.of(context).textTheme!.bodySmall!.decorationColor!,
97 + color: Theme.of(context).extension<FilterTheme>()!.iconColor,
98 ),
99 )),
100 );
@@ -208,9 +194,9 @@ class _IoniaManageCardsPageBodyState extends State<IoniaManageCardsPageBody> {
194 },
195 title: merchant.legalName,
196 subTitle: merchant.avaibilityStatus,
211 - backgroundColor: Theme.of(context).textTheme!.titleLarge!.backgroundColor!,
212 - titleColor: Theme.of(context).accentTextTheme!.displayMedium!.backgroundColor!,
213 - subtitleColor: Theme.of(context).accentTextTheme!.displaySmall!.backgroundColor!,
197 + backgroundColor: Theme.of(context).extension<SyncIndicatorTheme>()!.syncedBackgroundColor,
198 + titleColor: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
199 + subtitleColor: Theme.of(context).extension<BalancePageTheme>()!.labelTextColor,
200 discount: merchant.discount,
201 );
202 },
@@ -221,8 +207,8 @@ class _IoniaManageCardsPageBodyState extends State<IoniaManageCardsPageBody> {
207 thumbHeight: thumbHeight,
208 rightOffset: 1,
209 width: 3,
224 - backgroundColor: Theme.of(context).textTheme!.bodySmall!.decorationColor!.withOpacity(0.05),
225 - thumbColor: Theme.of(context).textTheme!.bodySmall!.decorationColor!.withOpacity(0.5),
210 + backgroundColor: Theme.of(context).extension<FilterTheme>()!.iconColor.withOpacity(0.05),
211 + thumbColor: Theme.of(context).extension<FilterTheme>()!.iconColor.withOpacity(0.5),
212 fromTop: widget.cardsListViewModel.scrollOffsetFromTop,
213 )
214 : Offstage()
@@ -230,8 +216,8 @@ class _IoniaManageCardsPageBodyState extends State<IoniaManageCardsPageBody> {
216 }
217 return Center(
218 child: CircularProgressIndicator(
233 - backgroundColor: Theme.of(context).accentTextTheme!.displayMedium!.backgroundColor!,
234 - valueColor: AlwaysStoppedAnimation<Color>(Theme.of(context).primaryTextTheme!.bodyMedium!.color!),
219 + backgroundColor: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
220 + valueColor: AlwaysStoppedAnimation<Color>(Theme.of(context).extension<ExchangePageTheme>()!.firstGradientBottomPanelColor),
221 ),
222 );
223 }
@@ -254,14 +240,14 @@ class _SearchWidget extends StatelessWidget {
240 padding: EdgeInsets.all(8),
241 child: Image.asset(
242 'assets/images/mini_search_icon.png',
257 - color: Theme.of(context).textTheme!.bodySmall!.decorationColor!,
243 + color: Theme.of(context).extension<FilterTheme>()!.iconColor,
244 ),
245 ),
246 );
247
248 return TextField(
249 focusNode: focusNode,
264 - style: TextStyle(color: Theme.of(context).accentTextTheme!.displayMedium!.backgroundColor!),
250 + style: TextStyle(color: Theme.of(context).extension<DashboardPageTheme>()!.textColor),
251 controller: controller,
252 decoration: InputDecoration(
253 filled: true,
@@ -269,10 +255,10 @@ class _SearchWidget extends StatelessWidget {
255 top: 10,
256 left: 10,
257 ),
272 - fillColor: Theme.of(context).textTheme!.titleLarge!.backgroundColor!,
258 + fillColor: Theme.of(context).extension<SyncIndicatorTheme>()!.syncedBackgroundColor,
259 hintText: S.of(context).search,
260 hintStyle: TextStyle(
275 - color: Theme.of(context).accentTextTheme!.displaySmall!.backgroundColor!,
261 + color: Theme.of(context).extension<BalancePageTheme>()!.labelTextColor,
262 ),
263 alignLabelWithHint: true,
264 floatingLabelBehavior: FloatingLabelBehavior.never,
@@ -318,8 +304,7 @@ class _TrailingIcon extends StatelessWidget {
304 onPressed: onPressed,
305 icon: Image.asset(
306 asset,
321 - color:
322 - Theme.of(context).accentTextTheme!.displayMedium!.backgroundColor!,
307 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
308 ),
309 ),
310 ),
lib/src/screens/ionia/cards/ionia_more_options_page.dart
+6 -7
@@ -1,7 +1,9 @@
1 import 'package:cake_wallet/ionia/ionia_gift_card.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 import 'package:cake_wallet/routes.dart';
4 import 'package:cake_wallet/src/screens/base_page.dart';
5 import 'package:cake_wallet/generated/i18n.dart';
6 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
7 import 'package:cake_wallet/typography.dart';
8 import 'package:flutter/material.dart';
9
@@ -15,10 +17,7 @@ class IoniaMoreOptionsPage extends BasePage {
17 return Text(
18 S.current.more_options,
19 style: textMediumSemiBold(
18 - color: Theme.of(context)
19 - .accentTextTheme!
20 - .displayLarge!
21 - .backgroundColor!,
20 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
21 ),
22 );
23 }
@@ -37,7 +36,7 @@ class IoniaMoreOptionsPage extends BasePage {
36 child: Text(
37 S.of(context).choose_from_available_options,
38 style: textMedium(
40 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
39 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
40 ),
41 ),
42 ),
@@ -80,8 +79,8 @@ class _GradiantContainer extends StatelessWidget {
79 borderRadius: BorderRadius.circular(15),
80 gradient: LinearGradient(
81 colors: [
83 - Theme.of(context).scaffoldBackgroundColor,
84 - Theme.of(context).colorScheme.secondary,
82 + Theme.of(context).extension<DashboardPageTheme>()!.secondGradientBackgroundColor,
83 + Theme.of(context).extension<DashboardPageTheme>()!.firstGradientBackgroundColor,
84 ],
85 begin: Alignment.topRight,
86 end: Alignment.bottomLeft,
lib/src/screens/ionia/cards/ionia_payment_status_page.dart
+12 -13
@@ -1,4 +1,5 @@
1 import 'package:cake_wallet/ionia/ionia_gift_card.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 import 'package:cake_wallet/routes.dart';
4 import 'package:cake_wallet/src/screens/base_page.dart';
5 import 'package:cake_wallet/src/widgets/primary_button.dart';
@@ -11,6 +12,7 @@ import 'package:cake_wallet/generated/i18n.dart';
12 import 'package:flutter/services.dart';
13 import 'package:flutter_mobx/flutter_mobx.dart';
14 import 'package:mobx/mobx.dart';
15 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
16
17 class IoniaPaymentStatusPage extends BasePage {
18 IoniaPaymentStatusPage(this.viewModel);
@@ -23,10 +25,7 @@ class IoniaPaymentStatusPage extends BasePage {
25 S.of(context).generating_gift_card,
26 textAlign: TextAlign.center,
27 style: textMediumSemiBold(
26 - color: Theme.of(context)
27 - .accentTextTheme!
28 - .displayLarge!
29 - .backgroundColor!));
28 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor));
29 }
30
31 @override
@@ -93,7 +92,7 @@ class _IoniaPaymentStatusPageBodyBodyState extends State<_IoniaPaymentStatusPage
92 Text(
93 S.of(context).awaiting_payment_confirmation,
94 style: textLargeSemiBold(
96 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!))
95 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor))
96 ]),
97 SizedBox(height: 40),
98 Row(children: [
@@ -132,7 +131,7 @@ class _IoniaPaymentStatusPageBodyBodyState extends State<_IoniaPaymentStatusPage
131 Text(
132 S.of(context).gift_card_is_generated,
133 style: textLargeSemiBold(
135 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!))
134 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor))
135 ]));
136 }
137
@@ -150,7 +149,7 @@ class _IoniaPaymentStatusPageBodyBodyState extends State<_IoniaPaymentStatusPage
149 Text(
150 S.of(context).generating_gift_card,
151 style: textLargeSemiBold(
153 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!))]);
152 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor))]);
153 }),
154 ],
155 ),
@@ -163,7 +162,7 @@ class _IoniaPaymentStatusPageBodyBodyState extends State<_IoniaPaymentStatusPage
162 widget.viewModel.payingByBitcoin ? S.of(context).bitcoin_payments_require_1_confirmation
163 : S.of(context).proceed_after_one_minute,
164 style: textMedium(
166 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
165 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
166 ).copyWith(fontWeight: FontWeight.w500),
167 textAlign: TextAlign.center,
168 )),
@@ -175,15 +174,15 @@ class _IoniaPaymentStatusPageBodyBodyState extends State<_IoniaPaymentStatusPage
174 Routes.ioniaGiftCardDetailPage,
175 arguments: [widget.viewModel.giftCard]),
176 text: S.of(context).open_gift_card,
178 - color: Theme.of(context).accentTextTheme!.bodyLarge!.color!,
177 + color: Theme.of(context).primaryColor,
178 textColor: Colors.white);
179 }
180
181 return PrimaryButton(
182 onPressed: () => Navigator.of(context).pushNamed(Routes.support),
183 text: S.of(context).contact_support,
185 - color: Theme.of(context).accentTextTheme!.bodySmall!.color!,
186 - textColor: Theme.of(context).primaryTextTheme!.titleLarge!.color!);
184 + color: Theme.of(context).cardColor,
185 + textColor: Theme.of(context).extension<CakeTextTheme>()!.titleColor);
186 })
187 ])
188 ),
@@ -199,14 +198,14 @@ class _IoniaPaymentStatusPageBodyBodyState extends State<_IoniaPaymentStatusPage
198 Text(
199 title,
200 style: textXSmall(
202 - color: Theme.of(context).primaryTextTheme!.labelSmall!.color!,
201 + color: Theme.of(context).extension<TransactionTradeTheme>()!.detailsTitlesColor,
202 ),
203 ),
204 SizedBox(height: 8),
205 Text(
206 subtitle,
207 style: textMedium(
209 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
208 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
209 ),
210 ),
211 ],
lib/src/screens/ionia/widgets/ionia_alert_model.dart
+5 -6
@@ -1,5 +1,7 @@
1 import 'package:cake_wallet/src/widgets/alert_background.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 import 'package:cake_wallet/src/widgets/primary_button.dart';
4 +import 'package:cake_wallet/themes/extensions/cake_scrollbar_theme.dart';
5 import 'package:cake_wallet/typography.dart';
6 import 'package:flutter/material.dart';
7
@@ -41,7 +43,7 @@ class IoniaAlertModal extends StatelessWidget {
43 Text(
44 title,
45 style: textLargeSemiBold(
44 - color: Theme.of(context).textTheme!.bodyMedium!.color!,
46 + color: Theme.of(context).extension<CakeScrollbarTheme>()!.thumbColor,
47 ),
48 ),
49 Container(
@@ -56,12 +58,9 @@ class IoniaAlertModal extends StatelessWidget {
58 PrimaryButton(
59 onPressed: () => Navigator.pop(context),
60 text: actionTitle,
59 - color: Theme.of(context)
60 - .accentTextTheme!
61 - .bodySmall!
62 - .color!,
61 + color: Theme.of(context).cardColor,
62 textColor:
64 - Theme.of(context).primaryTextTheme!.titleLarge!.color!,
63 + Theme.of(context).extension<CakeTextTheme>()!.titleColor,
64 ),
65 SizedBox(height: 21),
66 ],
lib/src/screens/ionia/widgets/ionia_filter_modal.dart
+7 -5
@@ -1,4 +1,5 @@
1 import 'package:cake_wallet/src/screens/ionia/widgets/rounded_checkbox.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 import 'package:cake_wallet/src/widgets/alert_background.dart';
4 import 'package:cake_wallet/typography.dart';
5 import 'package:cake_wallet/generated/i18n.dart';
@@ -6,6 +7,7 @@ import 'package:cake_wallet/view_model/ionia/ionia_gift_cards_list_view_model.da
7 import 'package:flutter/material.dart';
8 import 'package:flutter_mobx/flutter_mobx.dart';
9 import 'package:cake_wallet/palette.dart';
10 +import 'package:cake_wallet/themes/extensions/menu_theme.dart';
11
12 class IoniaFilterModal extends StatelessWidget {
13 IoniaFilterModal({required this.ioniaGiftCardsListViewModel}){
@@ -20,7 +22,7 @@ class IoniaFilterModal extends StatelessWidget {
22 padding: EdgeInsets.all(10),
23 child: Image.asset(
24 'assets/images/mini_search_icon.png',
23 - color: Theme.of(context).textTheme!.titleSmall!.color!,
25 + color: Theme.of(context).primaryColor,
26 ),
27 );
28 return Scaffold(
@@ -46,14 +48,14 @@ class IoniaFilterModal extends StatelessWidget {
48 child: TextField(
49 onChanged: ioniaGiftCardsListViewModel.onSearchFilter,
50 style: textMedium(
49 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
51 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
52 ),
53 decoration: InputDecoration(
54 filled: true,
55 prefixIcon: searchIcon,
56 hintText: S.of(context).search_category,
57 contentPadding: EdgeInsets.only(bottom: 5),
56 - fillColor: Theme.of(context).primaryTextTheme!.bodySmall!.decorationColor!.withOpacity(0.5),
58 + fillColor: Theme.of(context).extension<CakeMenuTheme>()!.dividerColor.withOpacity(0.5),
59 border: OutlineInputBorder(
60 borderSide: BorderSide.none,
61 borderRadius: BorderRadius.circular(8),
@@ -84,12 +86,12 @@ class IoniaFilterModal extends StatelessWidget {
86 children: [
87 Image.asset(
88 category.iconPath,
87 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
89 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
90 ),
91 SizedBox(width: 10),
92 Text(category.title,
93 style: textSmall(
92 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
94 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
95 ).copyWith(fontWeight: FontWeight.w500)),
96 ],
97 ),
lib/src/screens/ionia/widgets/ionia_tile.dart
+4 -2
@@ -1,5 +1,7 @@
1 import 'package:cake_wallet/typography.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 import 'package:flutter/material.dart';
4 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
5
6 class IoniaTile extends StatelessWidget {
7 const IoniaTile({
@@ -26,14 +28,14 @@ class IoniaTile extends StatelessWidget {
28 Text(
29 title,
30 style: textXSmall(
29 - color: Theme.of(context).primaryTextTheme!.labelSmall!.color!,
31 + color: Theme.of(context).extension<TransactionTradeTheme>()!.detailsTitlesColor,
32 ),
33 ),
34 SizedBox(height: 8),
35 Text(
36 subTitle,
37 style: textMediumBold(
36 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
38 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
39 ),
40 ),
41 ],
lib/src/screens/ionia/widgets/rounded_checkbox.dart
+1 -1
@@ -15,7 +15,7 @@ class RoundedCheckbox extends StatelessWidget {
15 width: 20.0,
16 decoration: BoxDecoration(
17 borderRadius: BorderRadius.all(Radius.circular(50.0)),
18 - color: Theme.of(context).accentTextTheme!.bodyLarge!.color!,
18 + color: Theme.of(context).primaryColor,
19 ),
20 child: Icon(
21 Icons.check,
lib/src/screens/ionia/widgets/text_icon_button.dart
+3 -2
@@ -1,4 +1,5 @@
1 import 'package:cake_wallet/typography.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 import 'package:flutter/material.dart';
4
5 class TextIconButton extends StatelessWidget {
@@ -22,12 +23,12 @@ class TextIconButton extends StatelessWidget {
23 Text(
24 label,
25 style: textMediumSemiBold(
25 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
26 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
27 ),
28 ),
29 Icon(
30 Icons.chevron_right_rounded,
30 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
31 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
32 ),
33 ],
34 ),
lib/src/screens/monero_accounts/monero_account_edit_or_create_page.dart
+1 -1
@@ -56,7 +56,7 @@ class MoneroAccountEditOrCreatePage extends BasePage {
56 text: moneroAccountCreationViewModel.isEdit
57 ? S.of(context).rename
58 : S.of(context).add,
59 - color: Theme.of(context).accentTextTheme!.bodyLarge!.color!,
59 + color: Theme.of(context).primaryColor,
60 textColor: Colors.white,
61 isLoading: moneroAccountCreationViewModel.state
62 is IsExecutingState,
lib/src/screens/monero_accounts/monero_account_list_page.dart
+2 -2
@@ -31,7 +31,7 @@ class MoneroAccountListPage extends StatelessWidget {
31 child: ListView.separated(
32 padding: EdgeInsets.zero,
33 controller: controller,
34 - separatorBuilder: (context, index) => const SectionDivider(),
34 + separatorBuilder: (context, index) => const VerticalSectionDivider(),
35 itemCount: accounts.length,
36 itemBuilder: (context, index) {
37 final account = accounts[index];
@@ -59,7 +59,7 @@ class MoneroAccountListPage extends StatelessWidget {
59 await Navigator.of(context).pushNamed(Routes.accountCreation),
60 child: Container(
61 height: buttonHeight,
62 - color: Theme.of(context).cardColor,
62 + color: Theme.of(context).primaryColor,
63 padding: EdgeInsets.symmetric(horizontal: 24),
64 child: Center(
65 child: Row(
lib/src/screens/monero_accounts/widgets/account_tile.dart
+22 -22
@@ -1,3 +1,5 @@
1 +import 'package:cake_wallet/themes/extensions/account_list_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
3 import 'package:flutter/material.dart';
4 import 'package:flutter_slidable/flutter_slidable.dart';
5 import 'package:cake_wallet/generated/i18n.dart';
@@ -21,11 +23,11 @@ class AccountTile extends StatelessWidget {
23 @override
24 Widget build(BuildContext context) {
25 final color = isCurrent
24 - ? Theme.of(context).textTheme.titleSmall!.decorationColor!
25 - : Theme.of(context).textTheme.displayLarge!.decorationColor!;
26 + ? Theme.of(context).extension<AccountListTheme>()!.currentAccountBackgroundColor
27 + : Theme.of(context).extension<AccountListTheme>()!.tilesBackgroundColor;
28 final textColor = isCurrent
27 - ? Theme.of(context).textTheme.titleSmall!.color!
28 - : Theme.of(context).textTheme.displayLarge!.color!;
29 + ? Theme.of(context).extension<AccountListTheme>()!.currentAccountTextColor
30 + : Theme.of(context).extension<AccountListTheme>()!.tilesTextColor;
31
32 final Widget cell = GestureDetector(
33 onTap: onTap,
@@ -61,7 +63,9 @@ class AccountTile extends StatelessWidget {
63 fontSize: 15,
64 fontWeight: FontWeight.w600,
65 fontFamily: 'Lato',
64 - color: Theme.of(context).textTheme.headlineMedium!.color!,
66 + color: isCurrent
67 + ? Theme.of(context).extension<AccountListTheme>()!.currentAccountAmountColor
68 + : Theme.of(context).extension<AccountListTheme>()!.tilesAmountColor,
69 decoration: TextDecoration.none,
70 ),
71 ),
@@ -72,24 +76,20 @@ class AccountTile extends StatelessWidget {
76 );
77
78 // return cell;
75 - return Slidable(
76 - key: Key(accountName),
77 - child: cell,
78 - endActionPane: _actionPane(context)
79 - );
79 + return Slidable(key: Key(accountName), child: cell, endActionPane: _actionPane(context));
80 }
81
82 ActionPane _actionPane(BuildContext context) => ActionPane(
83 - motion: const ScrollMotion(),
84 - extentRatio: 0.3,
85 - children: [
86 - SlidableAction(
87 - onPressed: (_) => onEdit.call(),
88 - backgroundColor: Colors.blue,
89 - foregroundColor: Colors.white,
90 - icon: Icons.edit,
91 - label: S.of(context).edit,
92 - ),
93 - ],
94 - );
83 + motion: const ScrollMotion(),
84 + extentRatio: 0.3,
85 + children: [
86 + SlidableAction(
87 + onPressed: (_) => onEdit.call(),
88 + backgroundColor: Colors.blue,
89 + foregroundColor: Colors.white,
90 + icon: Icons.edit,
91 + label: S.of(context).edit,
92 + ),
93 + ],
94 + );
95 }
lib/src/screens/new_wallet/advanced_privacy_settings_page.dart
+3 -8
@@ -3,6 +3,7 @@ import 'package:cake_wallet/entities/fiat_api_mode.dart';
3 import 'package:cake_wallet/src/screens/nodes/widgets/node_form.dart';
4 import 'package:cake_wallet/src/screens/settings/widgets/settings_choices_cell.dart';
5 import 'package:cake_wallet/src/screens/settings/widgets/settings_switcher_cell.dart';
6 +import 'package:cake_wallet/themes/extensions/new_wallet_theme.dart';
7 import 'package:cake_wallet/view_model/node_list/node_create_or_edit_view_model.dart';
8 import 'package:cake_wallet/view_model/advanced_privacy_settings_view_model.dart';
9 import 'package:cake_wallet/view_model/settings/choices_list_item.dart';
@@ -111,10 +112,7 @@ class _AdvancedPrivacySettingsBodyState extends State<AdvancedPrivacySettingsBod
112 Navigator.pop(context);
113 },
114 text: S.of(context).continue_text,
114 - color: Theme.of(context)
115 - .accentTextTheme!
116 - .bodyLarge!
117 - .color!,
115 + color: Theme.of(context).primaryColor,
116 textColor: Colors.white,
117 ),
118 const SizedBox(height: 25),
@@ -125,10 +123,7 @@ class _AdvancedPrivacySettingsBodyState extends State<AdvancedPrivacySettingsBod
123 S.of(context).settings_can_be_changed_later,
124 textAlign: TextAlign.center,
125 style: TextStyle(
128 - color: Theme.of(context)
129 - .accentTextTheme!
130 - .displayMedium!
131 - .color,
126 + color: Theme.of(context).extension<NewWalletTheme>()!.hintTextColor,
127 ),
128 ),
129 ),
lib/src/screens/new_wallet/new_wallet_page.dart
+9 -24
@@ -1,4 +1,5 @@
1 import 'package:cake_wallet/entities/generate_name.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 import 'package:cake_wallet/main.dart';
4 import 'package:cake_wallet/routes.dart';
5 import 'package:cake_wallet/themes/theme_base.dart';
@@ -17,6 +18,8 @@ import 'package:cake_wallet/src/screens/seed_language/widgets/seed_language_pick
18 import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
19 import 'package:cake_wallet/core/execution_state.dart';
20 import 'package:cake_wallet/view_model/wallet_new_vm.dart';
21 +import 'package:cake_wallet/themes/extensions/new_wallet_theme.dart';
22 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
23
24 class NewWalletPage extends BasePage {
25 NewWalletPage(this._walletNewVM);
@@ -117,32 +120,20 @@ class _WalletNameFormState extends State<WalletNameForm> {
120 style: TextStyle(
121 fontSize: 20.0,
122 fontWeight: FontWeight.w600,
120 - color: Theme.of(context)
121 - .primaryTextTheme!
122 - .titleLarge!
123 - .color!),
123 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor),
124 decoration: InputDecoration(
125 hintStyle: TextStyle(
126 fontSize: 18.0,
127 fontWeight: FontWeight.w500,
128 - color: Theme.of(context)
129 - .accentTextTheme!
130 - .displayMedium!
131 - .color),
128 + color: Theme.of(context).extension<NewWalletTheme>()!.hintTextColor),
129 hintText: S.of(context).wallet_name,
130 focusedBorder: UnderlineInputBorder(
131 borderSide: BorderSide(
135 - color: Theme.of(context)
136 - .accentTextTheme!
137 - .displayMedium!
138 - .decorationColor!,
132 + color: Theme.of(context).extension<NewWalletTheme>()!.underlineColor,
133 width: 1.0)),
134 enabledBorder: UnderlineInputBorder(
135 borderSide: BorderSide(
142 - color: Theme.of(context)
143 - .accentTextTheme!
144 - .displayMedium!
145 - .decorationColor!,
136 + color: Theme.of(context).extension<NewWalletTheme>()!.underlineColor,
137 width: 1.0),
138 ),
139 suffixIcon: Semantics(
@@ -169,10 +160,7 @@ class _WalletNameFormState extends State<WalletNameForm> {
160 height: 34,
161 child: Image.asset(
162 'assets/images/refresh_icon.png',
172 - color: Theme.of(context)
173 - .primaryTextTheme!
174 - .headlineMedium!
175 - .decorationColor!,
163 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldButtonIconColor,
164 ),
165 ),
166 ),
@@ -193,10 +181,7 @@ class _WalletNameFormState extends State<WalletNameForm> {
181 style: TextStyle(
182 fontSize: 16.0,
183 fontWeight: FontWeight.w500,
196 - color: Theme.of(context)
197 - .primaryTextTheme!
198 - .titleLarge!
199 - .color!),
184 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor),
185 ),
186 ),
187 Padding(
lib/src/screens/new_wallet/new_wallet_type_page.dart
+3 -2
@@ -4,6 +4,7 @@ import 'package:cake_wallet/src/screens/new_wallet/widgets/select_button.dart';
4 import 'package:cake_wallet/src/widgets/primary_button.dart';
5 import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
6 import 'package:cake_wallet/src/widgets/search_bar_widget.dart';
7 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
8 import 'package:cake_wallet/themes/theme_base.dart';
9 import 'package:cake_wallet/utils/responsive_layout_util.dart';
10 import 'package:cake_wallet/wallet_types.g.dart';
@@ -80,7 +81,7 @@ class WalletTypeFormState extends State<WalletTypeForm> {
81 style: TextStyle(
82 fontSize: 16,
83 fontWeight: FontWeight.w500,
83 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!),
84 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor),
85 ),
86 ),
87 Padding(
@@ -112,7 +113,7 @@ class WalletTypeFormState extends State<WalletTypeForm> {
113 bottomSection: PrimaryButton(
114 onPressed: () => onTypeSelected(),
115 text: S.of(context).seed_language_next,
115 - color: Theme.of(context).accentTextTheme!.bodyLarge!.color!,
116 + color: Theme.of(context).primaryColor,
117 textColor: Colors.white,
118 isDisabled: selected == null,
119 ),
lib/src/screens/new_wallet/widgets/select_button.dart
+9 -18
@@ -1,4 +1,7 @@
1 import 'package:flutter/material.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 +import 'package:cake_wallet/themes/extensions/filter_theme.dart';
4 +import 'package:cake_wallet/themes/extensions/wallet_list_theme.dart';
5
6 class SelectButton extends StatelessWidget {
7 SelectButton({
@@ -21,25 +24,13 @@ class SelectButton extends StatelessWidget {
24 Widget build(BuildContext context) {
25 final color = isSelected
26 ? Colors.green
24 - : Theme.of(context)
25 - .accentTextTheme!
26 - .bodySmall!
27 - .color!;
27 + : Theme.of(context).cardColor;
28 final textColor = isSelected
29 - ? Theme.of(context)
30 - .accentTextTheme!
31 - .headlineSmall!
32 - .decorationColor!
33 - : Theme.of(context).primaryTextTheme!.titleLarge!.color!;
29 + ? Theme.of(context).extension<WalletListTheme>()!.restoreWalletButtonTextColor
30 + : Theme.of(context).extension<CakeTextTheme>()!.buttonTextColor;
31 final arrowColor = isSelected
35 - ? Theme.of(context)
36 - .accentTextTheme!
37 - .headlineSmall!
38 - .decorationColor!
39 - : Theme.of(context)
40 - .accentTextTheme!
41 - .titleMedium!
42 - .color!;
32 + ? Theme.of(context).extension<WalletListTheme>()!.restoreWalletButtonTextColor
33 + : Theme.of(context).extension<FilterTheme>()!.titlesColor;
34
35 final selectArrowImage = Image.asset('assets/images/select_arrow.png',
36 color: arrowColor);
@@ -86,4 +77,4 @@ class SelectButton extends StatelessWidget {
77 ),
78 );
79 }
89 -}
\ No newline at end of file
80 +}
lib/src/screens/nodes/node_create_or_edit_page.dart
+1 -4
@@ -182,10 +182,7 @@ class NodeCreateOrEditPage extends BasePage {
182 Navigator.of(context).pop();
183 },
184 text: S.of(context).save,
185 - color: Theme.of(context)
186 - .accentTextTheme!
187 - .bodyLarge!
188 - .color!,
185 + color: Theme.of(context).primaryColor,
186 textColor: Colors.white,
187 isDisabled: (!nodeCreateOrEditViewModel.isReady)||
188 (nodeCreateOrEditViewModel
lib/src/screens/nodes/widgets/node_list_row.dart
+8 -5
@@ -1,8 +1,10 @@
1 import 'package:cake_wallet/routes.dart';
2 import 'package:cake_wallet/src/screens/nodes/widgets/node_indicator.dart';
3 import 'package:cake_wallet/src/widgets/standard_list.dart';
4 +import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
5 import 'package:cw_core/node.dart';
6 import 'package:flutter/material.dart';
7 +import 'package:cake_wallet/themes/extensions/filter_theme.dart';
8
9 class NodeListRow extends StandardListRow {
10 NodeListRow(
@@ -38,12 +40,13 @@ class NodeListRow extends StandardListRow {
40 decoration: BoxDecoration(
41 shape: BoxShape.circle,
42 color: Theme.of(context)
41 - .textTheme
42 - .headlineMedium!
43 - .decorationColor!),
43 + .extension<ReceivePageTheme>()!
44 + .iconsBackgroundColor),
45 child: Icon(Icons.edit,
46 size: 14,
46 - color: Theme.of(context).textTheme.headlineMedium!.color!)));
47 + color: Theme.of(context)
48 + .extension<ReceivePageTheme>()!
49 + .iconsColor)));
50 }
51 }
52
@@ -56,7 +59,7 @@ class NodeHeaderListRow extends StandardListRow {
59 return SizedBox(
60 width: 20,
61 child: Icon(Icons.add,
59 - color: Theme.of(context).accentTextTheme!.titleMedium!.color,size: 24.0),
62 + color: Theme.of(context).extension<FilterTheme>()!.titlesColor,size: 24.0),
63 );
64 }
65 }
lib/src/screens/order_details/order_details_page.dart
+1 -2
@@ -48,10 +48,9 @@ class OrderDetailsPageBodyState extends State<OrderDetailsPageBody> {
48 Widget build(BuildContext context) {
49 return Observer(builder: (_) {
50 return SectionStandardList(
51 - context: context,
51 sectionCount: 1,
52 itemCounter: (int _) => orderDetailsViewModel.items.length,
54 - itemBuilder: (_, __, index) {
53 + itemBuilder: (__, index) {
54 final item = orderDetailsViewModel.items[index];
55
56 if (item is TrackTradeListItem) {
lib/src/screens/pin_code/pin_code_widget.dart
+9 -19
@@ -1,3 +1,5 @@
1 +import 'package:cake_wallet/themes/extensions/pin_code_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 import 'package:cake_wallet/utils/responsive_layout_util.dart';
4 import 'package:cake_wallet/utils/show_bar.dart';
5 import 'package:another_flushbar/flushbar.dart';
@@ -110,11 +112,11 @@ class PinCodeState<T extends PinCodeWidget> extends State<T> {
112 Widget body(BuildContext context) {
113 final deleteIconImage = Image.asset(
114 'assets/images/delete_icon.png',
113 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
115 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
116 );
117 final faceImage = Image.asset(
118 'assets/images/face.png',
117 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
119 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
120 );
121
122 return RawKeyboardListener(
@@ -143,7 +145,7 @@ class PinCodeState<T extends PinCodeWidget> extends State<T> {
145 fontSize: 20,
146 fontWeight: FontWeight.w500,
147 color:
146 - Theme.of(context).primaryTextTheme!.titleLarge!.color!)),
148 + Theme.of(context).extension<CakeTextTheme>()!.titleColor)),
149 Spacer(flex: 3),
150 Container(
151 width: 180,
@@ -159,14 +161,8 @@ class PinCodeState<T extends PinCodeWidget> extends State<T> {
161 decoration: BoxDecoration(
162 shape: BoxShape.circle,
163 color: isFilled
162 - ? Theme.of(context)
163 - .primaryTextTheme!
164 - .titleLarge!
165 - .color!
166 - : Theme.of(context)
167 - .accentTextTheme!
168 - .bodyMedium!
169 - .color!
164 + ? Theme.of(context).extension<CakeTextTheme>()!.titleColor
165 + : Theme.of(context).extension<PinCodeTheme>()!.indicatorsColor
166 .withOpacity(0.25),
167 ));
168 }),
@@ -185,10 +181,7 @@ class PinCodeState<T extends PinCodeWidget> extends State<T> {
181 style: TextStyle(
182 fontSize: 14.0,
183 fontWeight: FontWeight.normal,
188 - color: Theme.of(context)
189 - .accentTextTheme!
190 - .bodyMedium!
191 - .decorationColor!),
184 + color: Theme.of(context).extension<PinCodeTheme>()!.switchColor),
185 ),
186 )
187 ],
@@ -256,10 +249,7 @@ class PinCodeState<T extends PinCodeWidget> extends State<T> {
249 style: TextStyle(
250 fontSize: 30.0,
251 fontWeight: FontWeight.w600,
259 - color: Theme.of(context)
260 - .primaryTextTheme!
261 - .titleLarge!
262 - .color!)),
252 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor)),
253 ),
254 );
255 }),
lib/src/screens/receive/anonpay_invoice_page.dart
+12 -17
@@ -1,3 +1,5 @@
1 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/keyboard_theme.dart';
3 import 'package:cake_wallet/anonpay/anonpay_donation_link_info.dart';
4 import 'package:cake_wallet/core/execution_state.dart';
5 import 'package:cake_wallet/di.dart';
@@ -40,8 +42,9 @@ class AnonPayInvoicePage extends BasePage {
42 final _formKey = GlobalKey<FormState>();
43
44 bool effectsInstalled = false;
45 +
46 @override
44 - Color get titleColor => Colors.white;
47 + bool get gradientAll => true;
48
49 @override
50 bool get resizeToAvoidBottomInset => false;
@@ -56,8 +59,9 @@ class AnonPayInvoicePage extends BasePage {
59 void onClose(BuildContext context) => Navigator.popUntil(context, (route) => route.isFirst);
60
61 @override
59 - Widget middle(BuildContext context) =>
60 - PresentReceiveOptionPicker(receiveOptionViewModel: receiveOptionViewModel);
62 + Widget middle(BuildContext context) => PresentReceiveOptionPicker(
63 + receiveOptionViewModel: receiveOptionViewModel,
64 + color: titleColor(context));
65
66 @override
67 Widget trailing(BuildContext context) => TrailButton(
@@ -82,10 +86,7 @@ class AnonPayInvoicePage extends BasePage {
86 disableScroll: true,
87 config: KeyboardActionsConfig(
88 keyboardActionsPlatform: KeyboardActionsPlatform.IOS,
85 - keyboardBarColor: Theme.of(context)
86 - .accentTextTheme!
87 - .bodyLarge!
88 - .backgroundColor!,
89 + keyboardBarColor: Theme.of(context).extension<KeyboardTheme>()!.keyboardBarColor,
90 nextFocus: false,
91 actions: [
92 KeyboardActionsItem(
@@ -103,8 +104,8 @@ class AnonPayInvoicePage extends BasePage {
104 bottomLeft: Radius.circular(24), bottomRight: Radius.circular(24)),
105 gradient: LinearGradient(
106 colors: [
106 - Theme.of(context).primaryTextTheme!.titleSmall!.color!,
107 - Theme.of(context).primaryTextTheme!.titleSmall!.decorationColor!,
107 + Theme.of(context).extension<ExchangePageTheme>()!.firstGradientTopPanelColor,
108 + Theme.of(context).extension<ExchangePageTheme>()!.secondGradientTopPanelColor,
109 ],
110 begin: Alignment.topLeft,
111 end: Alignment.bottomRight,
@@ -142,10 +143,7 @@ class AnonPayInvoicePage extends BasePage {
143 : S.of(context).anonpay_description("a donation link", "donate"),
144 textAlign: TextAlign.center,
145 style: TextStyle(
145 - color: Theme.of(context)
146 - .primaryTextTheme!
147 - .displayLarge!
148 - .decorationColor!,
146 + color: Theme.of(context).extension<ExchangePageTheme>()!.receiveAmountColor,
147 fontWeight: FontWeight.w500,
148 fontSize: 12),
149 ),
@@ -173,10 +171,7 @@ class AnonPayInvoicePage extends BasePage {
171 anonInvoicePageViewModel.generateDonationLink();
172 }
173 },
176 - color: Theme.of(context)
177 - .accentTextTheme!
178 - .bodyLarge!
179 - .color!,
174 + color: Theme.of(context).primaryColor,
175 textColor: Colors.white,
176 isLoading: anonInvoicePageViewModel.state is IsExecutingState,
177 ),
lib/src/screens/receive/anonpay_receive_page.dart
+10 -27
@@ -5,13 +5,15 @@ import 'package:cake_wallet/entities/receive_page_option.dart';
5 import 'package:cake_wallet/generated/i18n.dart';
6 import 'package:cake_wallet/routes.dart';
7 import 'package:cake_wallet/src/screens/base_page.dart';
8 +import 'package:cake_wallet/src/widgets/gradient_background.dart';
9 import 'package:cake_wallet/src/screens/receive/widgets/anonpay_status_section.dart';
10 import 'package:cake_wallet/src/screens/receive/widgets/qr_image.dart';
11 import 'package:cake_wallet/src/screens/receive/widgets/copy_link_item.dart';
11 -import 'package:cake_wallet/themes/theme_base.dart';
12 +import 'package:cake_wallet/themes/extensions/qr_code_theme.dart';
13 import 'package:device_display_brightness/device_display_brightness.dart';
14 import 'package:flutter/material.dart';
15 import 'package:qr_flutter/qr_flutter.dart' as qr;
16 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
17
18 class AnonPayReceivePage extends BasePage {
19 final AnonpayInfoBase invoiceInfo;
@@ -22,11 +24,7 @@ class AnonPayReceivePage extends BasePage {
24 String get title => S.current.receive;
25
26 @override
25 - Color get backgroundLightColor =>
26 - currentTheme.type == ThemeType.bright ? Colors.transparent : Colors.white;
27 -
28 - @override
29 - Color get backgroundDarkColor => Colors.transparent;
27 + bool get gradientBackground => true;
28
29 @override
30 bool get resizeToAvoidBottomInset => false;
@@ -44,10 +42,7 @@ class AnonPayReceivePage extends BasePage {
42 fontSize: 18.0,
43 fontWeight: FontWeight.bold,
44 fontFamily: 'Lato',
47 - color: Theme.of(context)
48 - .accentTextTheme!
49 - .displayMedium!
50 - .backgroundColor!),
45 + color: titleColor(context)),
46 ),
47 Text(
48 invoiceInfo is AnonpayInvoiceInfo
@@ -56,7 +51,7 @@ class AnonPayReceivePage extends BasePage {
51 style: TextStyle(
52 fontSize: 10.0,
53 fontWeight: FontWeight.w500,
59 - color: Theme.of(context).textTheme!.headlineSmall!.color!),
54 + color: Theme.of(context).extension<QRCodeTheme>()!.qrCodeColor),
55 )
56 ],
57 );
@@ -78,10 +73,7 @@ class AnonPayReceivePage extends BasePage {
73 ),
74 icon: Icon(
75 Icons.edit,
81 - color: Theme.of(context)
82 - .accentTextTheme!
83 - .bodySmall!
84 - .color!,
76 + color: pageIconColor(context),
77 size: 22.0,
78 ),
79 ),
@@ -90,14 +82,8 @@ class AnonPayReceivePage extends BasePage {
82
83 @override
84 Widget Function(BuildContext, Widget) get rootWrapper =>
93 - (BuildContext context, Widget scaffold) => Container(
94 - decoration: BoxDecoration(
95 - gradient: LinearGradient(colors: [
96 - Theme.of(context).colorScheme.secondary,
97 - Theme.of(context).scaffoldBackgroundColor,
98 - Theme.of(context).primaryColor,
99 - ], begin: Alignment.topRight, end: Alignment.bottomLeft)),
100 - child: scaffold);
85 + (BuildContext context, Widget scaffold) =>
86 + GradientBackground(scaffold: scaffold);
87
88 @override
89 Widget body(BuildContext context) {
@@ -139,10 +125,7 @@ class AnonPayReceivePage extends BasePage {
125 decoration: BoxDecoration(
126 border: Border.all(
127 width: 3,
142 - color: Theme.of(context)
143 - .accentTextTheme!
144 - .displayMedium!
145 - .backgroundColor!,
128 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
129 ),
130 ),
131 child: QrImage(
lib/src/screens/receive/fullscreen_qr_page.dart
+8 -26
@@ -1,8 +1,9 @@
1 import 'package:cake_wallet/entities/qr_view_data.dart';
2 +import 'package:cake_wallet/src/widgets/gradient_background.dart';
3 import 'package:cake_wallet/src/screens/receive/widgets/qr_image.dart';
3 -import 'package:cake_wallet/themes/theme_base.dart';
4 import 'package:flutter/material.dart';
5 import 'package:cake_wallet/src/screens/base_page.dart';
6 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
7
8 class FullscreenQRPage extends BasePage {
9 FullscreenQRPage({required this.qrViewData});
@@ -10,10 +11,7 @@ class FullscreenQRPage extends BasePage {
11 final QrViewData qrViewData;
12
13 @override
13 - Color get backgroundLightColor => currentTheme.type == ThemeType.bright ? Colors.transparent : Colors.white;
14 -
15 - @override
16 - Color get backgroundDarkColor => Colors.transparent;
14 + bool get gradientBackground => true;
15
16 @override
17 bool get resizeToAvoidBottomInset => false;
@@ -22,10 +20,7 @@ class FullscreenQRPage extends BasePage {
20 Widget leading(BuildContext context) {
21 final _backButton = Icon(
22 Icons.arrow_back_ios,
25 - color: Theme.of(context)
26 - .accentTextTheme!
27 - .displayMedium!
28 - .backgroundColor!,
23 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
24 size: 16,
25 );
26
@@ -47,19 +42,9 @@ class FullscreenQRPage extends BasePage {
42 }
43
44 @override
50 - Widget Function(BuildContext, Widget) get rootWrapper => (BuildContext context, Widget scaffold) => Container(
51 - decoration: BoxDecoration(
52 - gradient: LinearGradient(
53 - colors: [
54 - Theme.of(context).colorScheme.secondary,
55 - Theme.of(context).scaffoldBackgroundColor,
56 - Theme.of(context).primaryColor,
57 - ],
58 - begin: Alignment.topRight,
59 - end: Alignment.bottomLeft,
60 - ),
61 - ),
62 - child: scaffold);
45 + Widget Function(BuildContext, Widget) get rootWrapper =>
46 + (BuildContext context, Widget scaffold) =>
47 + GradientBackground(scaffold: scaffold);
48
49 @override
50 Widget body(BuildContext context) {
@@ -75,10 +60,7 @@ class FullscreenQRPage extends BasePage {
60 decoration: BoxDecoration(
61 border: Border.all(
62 width: 3,
78 - color: Theme.of(context)
79 - .accentTextTheme!
80 - .displayMedium!
81 - .backgroundColor!)),
63 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor)),
64 child: Container(
65 decoration: BoxDecoration(
66 border: Border.all(width: 3, color: Colors.white)),
lib/src/screens/receive/receive_page.dart
+18 -58
@@ -1,3 +1,6 @@
1 +import 'package:cake_wallet/themes/extensions/keyboard_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
3 +import 'package:cake_wallet/src/widgets/gradient_background.dart';
4 import 'package:cake_wallet/src/widgets/keyboard_done_button.dart';
5 import 'package:cake_wallet/src/widgets/section_divider.dart';
6 import 'package:cake_wallet/themes/theme_base.dart';
@@ -19,6 +22,7 @@ import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_list_i
22 import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_list_view_model.dart';
23 import 'package:cake_wallet/src/screens/receive/widgets/qr_widget.dart';
24 import 'package:keyboard_actions/keyboard_actions.dart';
25 +import 'package:cake_wallet/themes/extensions/balance_page_theme.dart';
26
27 class ReceivePage extends BasePage {
28 ReceivePage({required this.addressListViewModel})
@@ -41,21 +45,13 @@ class ReceivePage extends BasePage {
45 String get title => S.current.receive;
46
47 @override
44 - Color get backgroundLightColor =>
45 - currentTheme.type == ThemeType.bright ? Colors.transparent : Colors.white;
46 -
47 - @override
48 - Color get backgroundDarkColor => Colors.transparent;
48 + bool get gradientBackground => true;
49
50 @override
51 bool get resizeToAvoidBottomInset => false;
52
53 final FocusNode _cryptoAmountFocus;
54
55 - @override
56 - Color? get titleColor =>
57 - currentTheme.type == ThemeType.bright ? Colors.white : null;
58 -
55 @override
56 Widget middle(BuildContext context) {
57 return Text(
@@ -64,23 +60,14 @@ class ReceivePage extends BasePage {
60 fontSize: 18.0,
61 fontWeight: FontWeight.bold,
62 fontFamily: 'Lato',
67 - color: Theme.of(context)
68 - .accentTextTheme!
69 - .displayMedium!
70 - .backgroundColor!),
63 + color: pageIconColor(context)),
64 );
65 }
66
67 @override
68 Widget Function(BuildContext, Widget) get rootWrapper =>
76 - (BuildContext context, Widget scaffold) => Container(
77 - decoration: BoxDecoration(
78 - gradient: LinearGradient(colors: [
79 - Theme.of(context).colorScheme.secondary,
80 - Theme.of(context).scaffoldBackgroundColor,
81 - Theme.of(context).primaryColor,
82 - ], begin: Alignment.topRight, end: Alignment.bottomLeft)),
83 - child: scaffold);
69 + (BuildContext context, Widget scaffold) =>
70 + GradientBackground(scaffold: scaffold);
71
72 @override
73 Widget trailing(BuildContext context) {
@@ -103,10 +90,7 @@ class ReceivePage extends BasePage {
90 icon: Icon(
91 Icons.share,
92 size: 20,
106 - color: Theme.of(context)
107 - .accentTextTheme!
108 - .displayMedium!
109 - .backgroundColor!,
93 + color: pageIconColor(context),
94 ),
95 ),
96 ));
@@ -119,10 +103,7 @@ class ReceivePage extends BasePage {
103 ? KeyboardActions(
104 config: KeyboardActionsConfig(
105 keyboardActionsPlatform: KeyboardActionsPlatform.IOS,
122 - keyboardBarColor: Theme.of(context)
123 - .accentTextTheme!
124 - .bodyLarge!
125 - .backgroundColor!,
106 + keyboardBarColor: Theme.of(context).extension<KeyboardTheme>()!.keyboardBarColor,
107 nextFocus: false,
108 actions: [
109 KeyboardActionsItem(
@@ -146,7 +127,7 @@ class ReceivePage extends BasePage {
127 Observer(
128 builder: (_) => ListView.separated(
129 padding: EdgeInsets.all(0),
149 - separatorBuilder: (context, _) => const SectionDivider(),
130 + separatorBuilder: (context, _) => const HorizontalSectionDivider(),
131 shrinkWrap: true,
132 physics: NeverScrollableScrollPhysics(),
133 itemCount: addressListViewModel.items.length,
@@ -163,10 +144,7 @@ class ReceivePage extends BasePage {
144 icon: Icon(
145 Icons.arrow_forward_ios,
146 size: 14,
166 - color: Theme.of(context)
167 - .textTheme!
168 - .headlineMedium!
169 - .color!,
147 + color: Theme.of(context).extension<ReceivePageTheme>()!.iconsColor,
148 ));
149 }
150
@@ -178,10 +156,7 @@ class ReceivePage extends BasePage {
156 icon: Icon(
157 Icons.add,
158 size: 20,
181 - color: Theme.of(context)
182 - .textTheme!
183 - .headlineMedium!
184 - .color!,
159 + color: Theme.of(context).extension<ReceivePageTheme>()!.iconsColor,
160 ));
161 }
162
@@ -190,23 +165,11 @@ class ReceivePage extends BasePage {
165 final isCurrent =
166 item.address == addressListViewModel.address.address;
167 final backgroundColor = isCurrent
193 - ? Theme.of(context)
194 - .textTheme!
195 - .displayMedium!
196 - .decorationColor!
197 - : Theme.of(context)
198 - .textTheme!
199 - .displaySmall!
200 - .decorationColor!;
168 + ? Theme.of(context).extension<ReceivePageTheme>()!.currentTileBackgroundColor
169 + : Theme.of(context).extension<ReceivePageTheme>()!.tilesBackgroundColor;
170 final textColor = isCurrent
202 - ? Theme.of(context)
203 - .textTheme!
204 - .displayMedium!
205 - .color!
206 - : Theme.of(context)
207 - .textTheme!
208 - .displaySmall!
209 - .color!;
171 + ? Theme.of(context).extension<ReceivePageTheme>()!.currentTileTextColor
172 + : Theme.of(context).extension<ReceivePageTheme>()!.tilesTextColor;
173
174 return AddressCell.fromItem(item,
175 isCurrent: isCurrent,
@@ -252,10 +215,7 @@ class ReceivePage extends BasePage {
215 textAlign: TextAlign.center,
216 style: TextStyle(
217 fontSize: 15,
255 - color: Theme.of(context)
256 - .accentTextTheme!
257 - .displaySmall!
258 - .backgroundColor!)),
218 + color: Theme.of(context).extension<BalancePageTheme>()!.labelTextColor)),
219 ],
220 ),
221 );
lib/src/screens/receive/widgets/anonpay_currency_input_field.dart
+8 -21
@@ -1,8 +1,10 @@
1 import 'package:cake_wallet/generated/i18n.dart';
2 import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
3 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
4 import 'package:cw_core/currency.dart';
5 import 'package:flutter/material.dart';
6 import 'package:flutter/services.dart';
7 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
8
9 class AnonpayCurrencyInputField extends StatelessWidget {
10 const AnonpayCurrencyInputField(
@@ -33,7 +35,7 @@ class AnonpayCurrencyInputField extends StatelessWidget {
35 border: Border(
36 bottom: BorderSide(
37 color:
36 - Theme.of(context).primaryTextTheme!.bodyLarge!.color!,
38 + Theme.of(context).extension<ExchangePageTheme>()!.textFieldBorderBottomPanelColor,
39 width: 1)),
40 ),
41 child: Padding(
@@ -65,10 +67,7 @@ class AnonpayCurrencyInputField extends StatelessWidget {
67 child: Container(
68 height: 32,
69 decoration: BoxDecoration(
68 - color: Theme.of(context)
69 - .primaryTextTheme!
70 - .headlineMedium!
71 - .color!,
70 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldButtonColor,
71 borderRadius: BorderRadius.all(Radius.circular(6))),
72 child: Center(
73 child: Padding(
@@ -78,10 +77,7 @@ class AnonpayCurrencyInputField extends StatelessWidget {
77 style: TextStyle(
78 fontSize: 12,
79 fontWeight: FontWeight.bold,
81 - color: Theme.of(context)
82 - .primaryTextTheme!
83 - .headlineMedium!
84 - .decorationColor!,
80 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldButtonIconColor,
81 ),
82 ),
83 ),
@@ -119,10 +115,7 @@ class AnonpayCurrencyInputField extends StatelessWidget {
115 placeholderTextStyle: TextStyle(
116 fontSize: 16,
117 fontWeight: FontWeight.w600,
122 - color: Theme.of(context)
123 - .accentTextTheme!
124 - .displayLarge!
125 - .decorationColor!,
118 + color: Theme.of(context).extension<ExchangePageTheme>()!.hintTextColor,
119 ),
120 validator: null,
121 ),
@@ -143,20 +136,14 @@ class AnonpayCurrencyInputField extends StatelessWidget {
136 style: TextStyle(
137 fontSize: 10,
138 height: 1.2,
146 - color: Theme.of(context)
147 - .accentTextTheme!
148 - .displayLarge!
149 - .decorationColor!),
139 + color: Theme.of(context).extension<ExchangePageTheme>()!.hintTextColor),
140 ),
141 SizedBox(width: 10),
142 Text(S.of(context).max_value(maxAmount, selectedCurrency.toString()),
143 style: TextStyle(
144 fontSize: 10,
145 height: 1.2,
156 - color: Theme.of(context)
157 - .accentTextTheme!
158 - .displayLarge!
159 - .decorationColor!)),
146 + color: Theme.of(context).extension<ExchangePageTheme>()!.hintTextColor)),
147 ],
148 ),
149 )
lib/src/screens/receive/widgets/anonpay_input_form.dart
+7 -15
@@ -3,6 +3,7 @@ import 'package:cake_wallet/generated/i18n.dart';
3 import 'package:cake_wallet/src/screens/exchange/widgets/currency_picker.dart';
4 import 'package:cake_wallet/src/screens/receive/widgets/anonpay_currency_input_field.dart';
5 import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
6 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
7 import 'package:cake_wallet/typography.dart';
8 import 'package:cake_wallet/utils/show_pop_up.dart';
9 import 'package:cake_wallet/view_model/anon_invoice_page_view_model.dart';
@@ -69,17 +70,14 @@ class AnonInvoiceForm extends StatelessWidget {
70 BaseTextFormField(
71 controller: nameController,
72 focusNode: _nameFocusNode,
72 - borderColor: Theme.of(context).primaryTextTheme!.bodyLarge!.color!,
73 + borderColor: Theme.of(context).extension<ExchangePageTheme>()!.textFieldBorderTopPanelColor,
74 suffixIcon: SizedBox(width: 36),
75 hintText: S.of(context).optional_name,
76 textInputAction: TextInputAction.next,
77 placeholderTextStyle: TextStyle(
78 fontSize: 16,
79 fontWeight: FontWeight.w600,
79 - color: Theme.of(context)
80 - .accentTextTheme!
81 - .displayLarge!
82 - .decorationColor!,
80 + color: Theme.of(context).extension<ExchangePageTheme>()!.hintTextColor,
81 ),
82 textStyle: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Colors.white),
83 validator: null,
@@ -91,16 +89,13 @@ class AnonInvoiceForm extends StatelessWidget {
89 controller: descriptionController,
90 focusNode: _descriptionFocusNode,
91 textInputAction: TextInputAction.next,
94 - borderColor: Theme.of(context).primaryTextTheme!.bodyLarge!.color!,
92 + borderColor: Theme.of(context).extension<ExchangePageTheme>()!.textFieldBorderTopPanelColor,
93 suffixIcon: SizedBox(width: 36),
94 hintText: S.of(context).optional_description,
95 placeholderTextStyle: TextStyle(
96 fontSize: 16,
97 fontWeight: FontWeight.w600,
100 - color: Theme.of(context)
101 - .accentTextTheme!
102 - .displayLarge!
103 - .decorationColor!,
98 + color: Theme.of(context).extension<ExchangePageTheme>()!.hintTextColor,
99 ),
100 textStyle: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Colors.white),
101 validator: null,
@@ -110,17 +105,14 @@ class AnonInvoiceForm extends StatelessWidget {
105 controller: emailController,
106 textInputAction: TextInputAction.next,
107 focusNode: _emailFocusNode,
113 - borderColor: Theme.of(context).primaryTextTheme!.bodyLarge!.color!,
108 + borderColor: Theme.of(context).extension<ExchangePageTheme>()!.textFieldBorderTopPanelColor,
109 suffixIcon: SizedBox(width: 36),
110 keyboardType: TextInputType.emailAddress,
111 hintText: S.of(context).optional_email_hint,
112 placeholderTextStyle: TextStyle(
113 fontSize: 16,
114 fontWeight: FontWeight.w600,
120 - color: Theme.of(context)
121 - .accentTextTheme!
122 - .displayLarge!
123 - .decorationColor!,
115 + color: Theme.of(context).extension<ExchangePageTheme>()!.hintTextColor,
116 ),
117 textStyle: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Colors.white),
118 validator: EmailValidator(),
lib/src/screens/receive/widgets/anonpay_status_section.dart
+8 -17
@@ -1,6 +1,9 @@
1 import 'package:cake_wallet/anonpay/anonpay_invoice_info.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 import 'package:cake_wallet/generated/i18n.dart';
4 import 'package:cake_wallet/src/screens/dashboard/widgets/sync_indicator_icon.dart';
5 +import 'package:cake_wallet/themes/extensions/address_theme.dart';
6 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
7 import 'package:cake_wallet/typography.dart';
8 import 'package:flutter/material.dart';
9
@@ -31,19 +34,13 @@ class AnonInvoiceStatusSection extends StatelessWidget {
34 style: TextStyle(
35 fontSize: 14,
36 fontWeight: FontWeight.w500,
34 - color: Theme.of(context)
35 - .primaryTextTheme!
36 - .displayLarge!
37 - .decorationColor!,
37 + color: Theme.of(context).extension<ExchangePageTheme>()!.receiveAmountColor,
38 ),
39 ),
40 Container(
41 padding: EdgeInsets.symmetric(horizontal: 10, vertical: 5),
42 decoration: BoxDecoration(
43 - color: Theme.of(context)
44 - .accentTextTheme!
45 - .displaySmall!
46 - .color!,
43 + color: Theme.of(context).extension<AddressTheme>()!.actionButtonColor,
44 borderRadius: BorderRadius.circular(10),
45 ),
46 child: Row(
@@ -58,10 +55,7 @@ class AnonInvoiceStatusSection extends StatelessWidget {
55 Text(
56 invoiceInfo.status ?? '',
57 style: textSmallSemiBold(
61 - color: Theme.of(context)
62 - .primaryTextTheme!
63 - .titleLarge!
64 - .color,
58 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
59 ),
60 )
61 ],
@@ -78,16 +72,13 @@ class AnonInvoiceStatusSection extends StatelessWidget {
72 style: TextStyle(
73 fontSize: 14,
74 fontWeight: FontWeight.w500,
81 - color: Theme.of(context)
82 - .primaryTextTheme!
83 - .displayLarge!
84 - .decorationColor!,
75 + color: Theme.of(context).extension<ExchangePageTheme>()!.receiveAmountColor,
76 ),
77 ),
78 Text(
79 invoiceInfo.invoiceId ?? '',
80 style: textSmallSemiBold(
90 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color,
81 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
82 ),
83 ),
84 ],
lib/src/screens/receive/widgets/copy_link_item.dart
+4 -12
@@ -5,6 +5,7 @@ import 'package:cake_wallet/utils/show_bar.dart';
5 import 'package:flutter/material.dart';
6 import 'package:flutter/services.dart';
7 import 'package:share_plus/share_plus.dart';
8 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
9
10 class CopyLinkItem extends StatelessWidget {
11 const CopyLinkItem({super.key, required this.url, required this.title});
@@ -14,10 +15,7 @@ class CopyLinkItem extends StatelessWidget {
15 @override
16 Widget build(BuildContext context) {
17 final copyImage = Image.asset('assets/images/copy_address.png',
17 - color: Theme.of(context)
18 - .accentTextTheme!
19 - .displayMedium!
20 - .backgroundColor!);
18 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor);
19
20 return Row(
21 mainAxisAlignment: MainAxisAlignment.center,
@@ -25,10 +23,7 @@ class CopyLinkItem extends StatelessWidget {
23 Text(
24 title,
25 style: textMedium(
28 - color: Theme.of(context)
29 - .accentTextTheme!
30 - .displayMedium!
31 - .backgroundColor!,
26 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
27 ),
28 ),
29 SizedBox(width: 50),
@@ -51,10 +46,7 @@ class CopyLinkItem extends StatelessWidget {
46 onPressed: () => Share.share(url),
47 icon: Icon(
48 Icons.share,
54 - color: Theme.of(context)
55 - .accentTextTheme!
56 - .displayMedium!
57 - .backgroundColor!,
49 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
50 ),
51 )
52 ],
lib/src/screens/receive/widgets/currency_input_field.dart
+12 -18
@@ -3,6 +3,9 @@ import 'package:cake_wallet/utils/responsive_layout_util.dart';
3 import 'package:cw_core/currency.dart';
4 import 'package:flutter/material.dart';
5 import 'package:flutter/services.dart';
6 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
7 +import 'package:cake_wallet/themes/extensions/picker_theme.dart';
8 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
9
10 class CurrencyInputField extends StatelessWidget {
11 const CurrencyInputField({
@@ -24,7 +27,7 @@ class CurrencyInputField extends StatelessWidget {
27 Widget build(BuildContext context) {
28 final arrowBottomPurple = Image.asset(
29 'assets/images/arrow_bottom_purple_icon.png',
27 - color: Theme.of(context).accentTextTheme!.displayMedium!.backgroundColor!,
30 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
31 height: 8,
32 );
33 // This magic number for wider screen sets the text input focus at center of the inputfield
@@ -46,13 +49,13 @@ class CurrencyInputField extends StatelessWidget {
49 placeholderTextStyle: isLight
50 ? null
51 : TextStyle(
49 - color: Theme.of(context).primaryTextTheme!.headlineSmall!.color!,
52 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldBorderColor,
53 fontWeight: FontWeight.w600,
54 ),
52 - borderColor: Theme.of(context).accentTextTheme!.titleLarge!.backgroundColor!,
53 - textColor: Theme.of(context).accentTextTheme!.displayMedium!.backgroundColor!,
55 + borderColor: Theme.of(context).extension<PickerTheme>()!.dividerColor,
56 + textColor: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
57 textStyle: TextStyle(
55 - color: Theme.of(context).accentTextTheme!.displayMedium!.backgroundColor!,
58 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
59 ),
60 prefixIcon: Padding(
61 padding: EdgeInsets.only(
@@ -75,10 +78,7 @@ class CurrencyInputField extends StatelessWidget {
78 style: TextStyle(
79 fontWeight: FontWeight.w600,
80 fontSize: 16,
78 - color: Theme.of(context)
79 - .accentTextTheme!
80 - .displayMedium!
81 - .backgroundColor!,
81 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
82 ),
83 ),
84 if (selectedCurrency.tag != null)
@@ -86,7 +86,7 @@ class CurrencyInputField extends StatelessWidget {
86 padding: const EdgeInsets.only(right: 3.0),
87 child: Container(
88 decoration: BoxDecoration(
89 - color: Theme.of(context).primaryTextTheme!.headlineMedium!.color!,
89 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldButtonColor,
90 borderRadius: BorderRadius.all(
91 Radius.circular(6),
92 ),
@@ -97,10 +97,7 @@ class CurrencyInputField extends StatelessWidget {
97 style: TextStyle(
98 fontSize: 12,
99 fontWeight: FontWeight.bold,
100 - color: Theme.of(context)
101 - .primaryTextTheme!
102 - .headlineMedium!
103 - .decorationColor!,
100 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldButtonIconColor,
101 ),
102 ),
103 ),
@@ -113,10 +110,7 @@ class CurrencyInputField extends StatelessWidget {
110 style: TextStyle(
111 fontWeight: FontWeight.w600,
112 fontSize: 20,
116 - color: Theme.of(context)
117 - .accentTextTheme!
118 - .displayMedium!
119 - .backgroundColor!,
113 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
114 ),
115 ),
116 ),
lib/src/screens/receive/widgets/header_tile.dart
+5 -7
@@ -1,4 +1,5 @@
1 import 'package:flutter/material.dart';
2 +import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
3
4 class HeaderTile extends StatelessWidget {
5 HeaderTile({
@@ -22,7 +23,7 @@ class HeaderTile extends StatelessWidget {
23 top: 24,
24 bottom: 24
25 ),
25 - color: Theme.of(context).textTheme!.displaySmall!.decorationColor!,
26 + color: Theme.of(context).extension<ReceivePageTheme>()!.tilesBackgroundColor,
27 child: Row(
28 mainAxisSize: MainAxisSize.max,
29 mainAxisAlignment: MainAxisAlignment.spaceBetween,
@@ -32,17 +33,14 @@ class HeaderTile extends StatelessWidget {
33 style: TextStyle(
34 fontSize: 18,
35 fontWeight: FontWeight.w600,
35 - color: Theme.of(context)!.textTheme.displaySmall!.color!),
36 + color: Theme.of(context).extension<ReceivePageTheme>()!.tilesTextColor),
37 ),
38 Container(
39 height: 32,
40 width: 32,
41 decoration: BoxDecoration(
42 shape: BoxShape.circle,
42 - color: Theme.of(context)
43 - .textTheme!
44 - .headlineMedium!
45 - .decorationColor!),
43 + color: Theme.of(context).extension<ReceivePageTheme>()!.iconsBackgroundColor),
44 child: icon,
45 )
46 ],
@@ -50,4 +48,4 @@ class HeaderTile extends StatelessWidget {
48 ),
49 );
50 }
53 -}
\ No newline at end of file
51 +}
lib/src/screens/receive/widgets/qr_widget.dart
+6 -13
@@ -1,4 +1,5 @@
1 import 'package:cake_wallet/entities/qr_view_data.dart';
2 +import 'package:cake_wallet/themes/extensions/qr_code_theme.dart';
3 import 'package:cake_wallet/routes.dart';
4 import 'package:cake_wallet/src/screens/exchange/widgets/currency_picker.dart';
5 import 'package:cake_wallet/src/screens/receive/widgets/currency_input_field.dart';
@@ -12,6 +13,7 @@ import 'package:flutter_mobx/flutter_mobx.dart';
13 import 'package:cake_wallet/generated/i18n.dart';
14 import 'package:cake_wallet/src/screens/receive/widgets/qr_image.dart';
15 import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_list_view_model.dart';
16 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
17
18 class QRWidget extends StatelessWidget {
19 QRWidget({
@@ -35,7 +37,7 @@ class QRWidget extends StatelessWidget {
37 @override
38 Widget build(BuildContext context) {
39 final copyImage = Image.asset('assets/images/copy_address.png',
38 - color: Theme.of(context).textTheme!.titleMedium!.decorationColor!);
40 + color: Theme.of(context).extension<QRCodeTheme>()!.qrWidgetCopyButtonColor);
41
42 return Column(
43 mainAxisSize: MainAxisSize.min,
@@ -51,10 +53,7 @@ class QRWidget extends StatelessWidget {
53 style: TextStyle(
54 fontSize: 14,
55 fontWeight: FontWeight.w500,
54 - color: Theme.of(context)
55 - .accentTextTheme!
56 - .displayMedium!
57 - .backgroundColor!),
56 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor),
57 ),
58 ),
59 Row(
@@ -85,10 +84,7 @@ class QRWidget extends StatelessWidget {
84 decoration: BoxDecoration(
85 border: Border.all(
86 width: 3,
88 - color: Theme.of(context)
89 - .accentTextTheme!
90 - .displayMedium!
91 - .backgroundColor!,
87 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
88 ),
89 ),
90 child: Container(
@@ -152,10 +148,7 @@ class QRWidget extends StatelessWidget {
148 style: TextStyle(
149 fontSize: 15,
150 fontWeight: FontWeight.w500,
155 - color: Theme.of(context)
156 - .accentTextTheme!
157 - .displayMedium!
158 - .backgroundColor!),
151 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor),
152 ),
153 ),
154 Padding(
lib/src/screens/release_notes/release_notes_screen.dart
+5 -10
@@ -1,6 +1,7 @@
1 import 'dart:convert';
2 import 'package:cake_wallet/src/widgets/alert_background.dart';
3 import 'package:cake_wallet/src/widgets/alert_close_button.dart';
4 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
5 import 'package:cake_wallet/wallet_type_utils.dart';
6 import 'package:flutter/material.dart';
7 import 'package:flutter/services.dart';
@@ -33,8 +34,8 @@ class ReleaseNotesScreen extends StatelessWidget {
34 decoration: BoxDecoration(
35 borderRadius: BorderRadius.circular(30.0),
36 gradient: LinearGradient(colors: [
36 - Theme.of(context).colorScheme.secondary,
37 - Theme.of(context).scaffoldBackgroundColor,
37 + Theme.of(context).extension<DashboardPageTheme>()!.firstGradientBackgroundColor,
38 + Theme.of(context).extension<DashboardPageTheme>()!.secondGradientBackgroundColor,
39 ], begin: Alignment.centerLeft, end: Alignment.centerRight)),
40 child: Padding(
41 padding: const EdgeInsets.symmetric(horizontal: 24.0),
@@ -51,10 +52,7 @@ class ReleaseNotesScreen extends StatelessWidget {
52 fontSize: 24.0,
53 fontWeight: FontWeight.bold,
54 fontFamily: 'Lato',
54 - color: Theme.of(context)
55 - .accentTextTheme!
56 - .displayMedium!
57 - .backgroundColor!,
55 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
56 ),
57 child: Text(title),
58 ),
@@ -121,10 +119,7 @@ class ReleaseNotesScreen extends StatelessWidget {
119 decoration: TextDecoration.none,
120 fontSize: 16.0,
121 fontFamily: 'Lato',
124 - color: Theme.of(context)
125 - .accentTextTheme!
126 - .displayMedium!
127 - .backgroundColor!,
122 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
123 ),
124 child: Row(
125 crossAxisAlignment: CrossAxisAlignment.start,
lib/src/screens/rescan/rescan_page.dart
+1 -4
@@ -35,10 +35,7 @@ class RescanPage extends BasePage {
35 _blockchainHeightWidgetKey.currentState!.height);
36 Navigator.of(context).pop();
37 },
38 - color: Theme.of(context)
39 - .accentTextTheme!
40 - .bodyLarge!
41 - .color!,
38 + color: Theme.of(context).primaryColor,
39 textColor: Colors.white,
40 isDisabled: !_rescanViewModel.isButtonEnabled,
41 ))
lib/src/screens/restore/restore_from_backup_page.dart
+1 -4
@@ -75,10 +75,7 @@ class RestoreFromBackupPage extends BasePage {
75 restoreFromBackupViewModel.state is IsExecutingState,
76 onPressed: () => onImportHandler(context),
77 text: S.of(context).import,
78 - color: Theme.of(context)
79 - .accentTextTheme!
80 - .bodyLarge!
81 - .color!,
78 + color: Theme.of(context).primaryColor,
79 textColor: Colors.white);
80 }))
81 ])),
lib/src/screens/restore/restore_wallet_from_seed_details.dart
+1 -4
@@ -134,10 +134,7 @@ class _RestoreFromSeedDetailsFormState
134 isLoading:
135 widget.walletRestorationFromSeedVM.state is IsExecutingState,
136 text: S.of(context).restore_recover,
137 - color: Theme.of(context)
138 - .accentTextTheme!
139 - .bodyLarge!
140 - .color!,
137 + color: Theme.of(context).primaryColor,
138 textColor: Colors.white,
139 isDisabled: _nameController.text.isNotEmpty,
140 );
lib/src/screens/restore/sweeping_wallet_page.dart
+5 -12
@@ -1,8 +1,10 @@
1 import 'package:cake_wallet/themes/theme_base.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 import 'package:flutter/material.dart';
4 import 'package:cake_wallet/src/screens/base_page.dart';
5 import 'package:cake_wallet/generated/i18n.dart';
6 import 'package:flutter/scheduler.dart';
7 +import 'package:cake_wallet/themes/extensions/new_wallet_theme.dart';
8
9 class SweepingWalletPage extends BasePage {
10 SweepingWalletPage();
@@ -82,10 +84,7 @@ class _SweepingWalletWidgetState extends State<SweepingWalletWidget> {
84 style: TextStyle(
85 fontSize: 18,
86 fontWeight: FontWeight.w500,
85 - color: Theme.of(context)
86 - .accentTextTheme!
87 - .displayMedium!
88 - .color,
87 + color: Theme.of(context).extension<NewWalletTheme>()!.hintTextColor,
88 ),
89 textAlign: TextAlign.center,
90 ),
@@ -97,10 +96,7 @@ class _SweepingWalletWidgetState extends State<SweepingWalletWidget> {
96 style: TextStyle(
97 fontSize: 36,
98 fontWeight: FontWeight.bold,
100 - color: Theme.of(context)
101 - .primaryTextTheme!
102 - .titleLarge!
103 - .color!,
99 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
100 ),
101 textAlign: TextAlign.center,
102 ),
@@ -112,10 +108,7 @@ class _SweepingWalletWidgetState extends State<SweepingWalletWidget> {
108 style: TextStyle(
109 fontSize: 16,
110 fontWeight: FontWeight.w500,
115 - color: Theme.of(context)
116 - .accentTextTheme!
117 - .displayMedium!
118 - .color,
111 + color: Theme.of(context).extension<NewWalletTheme>()!.hintTextColor,
112 ),
113 textAlign: TextAlign.center,
114 ),
lib/src/screens/restore/wallet_restore_from_keys_form.dart
+2 -4
@@ -10,6 +10,7 @@ import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
10 import 'package:cake_wallet/generated/i18n.dart';
11 import 'package:cake_wallet/core/wallet_name_validator.dart';
12 import 'package:cake_wallet/entities/generate_name.dart';
13 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
14
15 class WalletRestoreFromKeysFrom extends StatefulWidget {
16 WalletRestoreFromKeysFrom({
@@ -89,10 +90,7 @@ class WalletRestoreFromKeysFromState extends State<WalletRestoreFromKeysFrom> {
90 height: 34,
91 child: Image.asset(
92 'assets/images/refresh_icon.png',
92 - color: Theme.of(context)
93 - .primaryTextTheme!
94 - .headlineMedium!
95 - .decorationColor!,
93 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldButtonIconColor,
94 ),
95 ),
96 ),
lib/src/screens/restore/wallet_restore_from_seed_form.dart
+2 -4
@@ -11,6 +11,7 @@ import 'package:cake_wallet/src/widgets/blockchain_height_widget.dart';
11 import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
12 import 'package:cake_wallet/generated/i18n.dart';
13 import 'package:cake_wallet/core/wallet_name_validator.dart';
14 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
15
16 class WalletRestoreFromSeedForm extends StatefulWidget {
17 WalletRestoreFromSeedForm(
@@ -93,10 +94,7 @@ class WalletRestoreFromSeedFormState extends State<WalletRestoreFromSeedForm> {
94 height: 34,
95 child: Image.asset(
96 'assets/images/refresh_icon.png',
96 - color: Theme.of(context)
97 - .primaryTextTheme!
98 - .headlineMedium!
99 - .decorationColor!,
97 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldButtonIconColor,
98 ),
99 ),
100 ),
lib/src/screens/restore/wallet_restore_page.dart
+7 -14
@@ -1,3 +1,5 @@
1 +import 'package:cake_wallet/themes/extensions/keyboard_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 import 'package:cake_wallet/src/widgets/keyboard_done_button.dart';
4 import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
5 import 'package:cake_wallet/utils/responsive_layout_util.dart';
@@ -22,6 +24,7 @@ import 'package:cake_wallet/generated/i18n.dart';
24 import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
25 import 'package:cake_wallet/core/seed_validator.dart';
26 import 'package:cake_wallet/view_model/restore/restore_mode.dart';
27 +import 'package:cake_wallet/themes/extensions/wallet_list_theme.dart';
28
29 class WalletRestorePage extends BasePage {
30 WalletRestorePage(this.walletRestoreViewModel)
@@ -91,8 +94,7 @@ class WalletRestorePage extends BasePage {
94 fontSize: 18.0,
95 fontWeight: FontWeight.bold,
96 fontFamily: 'Lato',
94 - color: titleColor ??
95 - Theme.of(context).primaryTextTheme!.titleLarge!.color!),
97 + color: titleColor(context)),
98 ));
99
100 final WalletRestoreViewModel walletRestoreViewModel;
@@ -139,10 +141,7 @@ class WalletRestorePage extends BasePage {
141 return KeyboardActions(
142 config: KeyboardActionsConfig(
143 keyboardActionsPlatform: KeyboardActionsPlatform.IOS,
142 - keyboardBarColor: Theme.of(context)
143 - .accentTextTheme!
144 - .bodyLarge!
145 - .backgroundColor!,
144 + keyboardBarColor: Theme.of(context).extension<KeyboardTheme>()!.keyboardBarColor,
145 nextFocus: false,
146 actions: [
147 KeyboardActionsItem(
@@ -194,14 +193,8 @@ class WalletRestorePage extends BasePage {
193 return LoadingPrimaryButton(
194 onPressed: _confirmForm,
195 text: S.of(context).restore_recover,
197 - color: Theme.of(context)
198 - .accentTextTheme!
199 - .titleSmall!
200 - .decorationColor!,
201 - textColor: Theme.of(context)
202 - .accentTextTheme!
203 - .headlineSmall!
204 - .decorationColor!,
196 + color: Theme.of(context).extension<WalletListTheme>()!.createNewWalletButtonBackgroundColor,
197 + textColor: Theme.of(context).extension<WalletListTheme>()!.restoreWalletButtonTextColor,
198 isLoading: walletRestoreViewModel.state is IsExecutingState,
199 isDisabled: !walletRestoreViewModel.isButtonEnabled,
200 );
lib/src/screens/restore/widgets/restore_button.dart
+1
@@ -1,4 +1,5 @@
1 import 'package:flutter/material.dart';
2 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
3
4 class RestoreButton extends StatelessWidget {
5 const RestoreButton(
lib/src/screens/seed/pre_seed_page.dart
+4 -1
@@ -1,3 +1,6 @@
1 +import 'package:cake_wallet/utils/responsive_layout_util.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 +import 'package:cw_core/wallet_type.dart';
4 import 'package:cake_wallet/src/screens/base_page.dart';
5 import 'package:cake_wallet/src/widgets/primary_button.dart';
6 import 'package:cake_wallet/generated/i18n.dart';
@@ -52,7 +55,7 @@ class PreSeedPage extends BasePage {
55 style: TextStyle(
56 fontSize: 14,
57 fontWeight: FontWeight.normal,
55 - color: Theme.of(context).primaryTextTheme.bodySmall!.color!),
58 + color: Theme.of(context).extension<CakeTextTheme>()!.secondaryTextColor),
59 ),
60 ),
61 PrimaryButton(
lib/src/screens/seed/wallet_seed_page.dart
+11 -6
@@ -1,4 +1,6 @@
1 import 'package:cake_wallet/palette.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 +import 'package:cake_wallet/themes/extensions/pin_code_theme.dart';
4 import 'package:cake_wallet/themes/theme_base.dart';
5 import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
6 import 'package:cake_wallet/utils/clipboard_util.dart';
@@ -13,6 +15,7 @@ import 'package:cake_wallet/generated/i18n.dart';
15 import 'package:cake_wallet/src/widgets/primary_button.dart';
16 import 'package:cake_wallet/src/screens/base_page.dart';
17 import 'package:cake_wallet/view_model/wallet_seed_view_model.dart';
18 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
19
20 class WalletSeedPage extends BasePage {
21 WalletSeedPage(this.walletSeedViewModel, {required this.isNewWalletCreated});
@@ -67,11 +70,13 @@ class WalletSeedPage extends BasePage {
70 margin: EdgeInsets.only(left: 10),
71 decoration: BoxDecoration(
72 borderRadius: BorderRadius.all(Radius.circular(16)),
70 - color: Theme.of(context).accentTextTheme.bodySmall!.color!),
73 + color: Theme.of(context).cardColor),
74 child: Text(
75 S.of(context).seed_language_next,
76 style: TextStyle(
74 - fontSize: 14, fontWeight: FontWeight.w600, color: Palette.blueCraiola),
77 + fontSize: 14, fontWeight: FontWeight.w600, color: Theme.of(context)
78 + .extension<CakeTextTheme>()!
79 + .buttonTextColor),
80 ),
81 ),
82 )
@@ -105,7 +110,7 @@ class WalletSeedPage extends BasePage {
110 style: TextStyle(
111 fontSize: 20,
112 fontWeight: FontWeight.w600,
108 - color: Theme.of(context).primaryTextTheme.titleLarge!.color!),
113 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor),
114 ),
115 Padding(
116 padding: EdgeInsets.only(top: 20, left: 16, right: 16),
@@ -115,7 +120,7 @@ class WalletSeedPage extends BasePage {
120 style: TextStyle(
121 fontSize: 14,
122 fontWeight: FontWeight.normal,
118 - color: Theme.of(context).primaryTextTheme.bodySmall!.color!),
123 + color: Theme.of(context).extension<CakeTextTheme>()!.secondaryTextColor),
124 ),
125 )
126 ],
@@ -132,7 +137,7 @@ class WalletSeedPage extends BasePage {
137 style: TextStyle(
138 fontSize: 12,
139 fontWeight: FontWeight.normal,
135 - color: Theme.of(context).primaryTextTheme.labelSmall!.color!),
140 + color: Theme.of(context).extension<TransactionTradeTheme>()!.detailsTitlesColor),
141 ),
142 )
143 : Offstage(),
@@ -164,7 +169,7 @@ class WalletSeedPage extends BasePage {
169 showBar<void>(context, S.of(context).copied_to_clipboard);
170 },
171 text: S.of(context).copy,
167 - color: Theme.of(context).accentTextTheme.bodyMedium!.color!,
172 + color: Theme.of(context).extension<PinCodeTheme>()!.indicatorsColor,
173 textColor: Colors.white)),
174 ))
175 ],
lib/src/screens/seed_language/seed_language_page.dart
+2 -1
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:cake_wallet/themes/theme_base.dart';
3 import 'package:cake_wallet/src/widgets/seed_language_selector.dart';
4 import 'package:flutter_mobx/flutter_mobx.dart';
@@ -67,7 +68,7 @@ class SeedLanguageFormState extends State<SeedLanguageForm> {
68 fontSize: 16.0,
69 fontWeight: FontWeight.w500,
70 color:
70 - Theme.of(context).primaryTextTheme!.titleLarge!.color!),
71 + Theme.of(context).extension<CakeTextTheme>()!.titleColor),
72 ),
73 ),
74 Padding(
lib/src/screens/send/send_page.dart
+5 -3
@@ -7,6 +7,8 @@ import 'package:cake_wallet/src/widgets/add_template_button.dart';
7 import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
8 import 'package:cake_wallet/src/widgets/picker.dart';
9 import 'package:cake_wallet/src/widgets/template_tile.dart';
10 +import 'package:cake_wallet/themes/extensions/seed_widget_theme.dart';
11 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
12 import 'package:cake_wallet/themes/theme_base.dart';
13 import 'package:cake_wallet/utils/payment_request.dart';
14 import 'package:cake_wallet/utils/request_review_handler.dart';
@@ -49,7 +51,7 @@ class SendPage extends BasePage {
51 String get title => S.current.send;
52
53 @override
52 - Color get titleColor => Colors.white;
54 + bool get gradientAll => true;
55
56 @override
57 bool get resizeToAvoidBottomInset => false;
@@ -61,7 +63,7 @@ class SendPage extends BasePage {
63 Widget? leading(BuildContext context) {
64 final _backButton = Icon(
65 Icons.arrow_back_ios,
64 - color: titleColor,
66 + color: titleColor(context),
67 size: 16,
68 );
69 final _closeButton = currentTheme.type == ThemeType.dark
@@ -403,7 +405,7 @@ class SendPage extends BasePage {
405 },
406 text: S.of(context).send,
407 color:
406 - Theme.of(context).accentTextTheme!.bodyLarge!.color!,
408 + Theme.of(context).primaryColor,
409 textColor: Colors.white,
410 isLoading: sendViewModel.state is IsExecutingState ||
411 sendViewModel.state is TransactionCommitting,
lib/src/screens/send/send_template_page.dart
+13 -13
@@ -1,3 +1,7 @@
1 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/keyboard_theme.dart';
3 +import 'package:cake_wallet/themes/extensions/seed_widget_theme.dart';
4 +import 'package:cake_wallet/utils/payment_request.dart';
5 import 'package:cake_wallet/src/widgets/trail_button.dart';
6 import 'package:cake_wallet/view_model/send/template_view_model.dart';
7 import 'package:flutter_mobx/flutter_mobx.dart';
@@ -7,6 +11,8 @@ import 'package:cake_wallet/generated/i18n.dart';
11 import 'package:cake_wallet/view_model/send/send_template_view_model.dart';
12 import 'package:cake_wallet/src/widgets/primary_button.dart';
13 import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
14 +import 'package:cake_wallet/src/screens/send/widgets/prefix_currency_icon_widget.dart';
15 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
16 import 'package:cake_wallet/src/screens/send/widgets/send_template_card.dart';
17 import 'package:smooth_page_indicator/smooth_page_indicator.dart';
18
@@ -21,10 +27,10 @@ class SendTemplatePage extends BasePage {
27 String get title => S.current.exchange_new_template;
28
29 @override
24 - Color get titleColor => Colors.white;
30 + bool get extendBodyBehindAppBar => true;
31
32 @override
27 - bool get extendBodyBehindAppBar => true;
33 + bool get gradientAll => true;
34
35 @override
36 AppBarStyle get appBarStyle => AppBarStyle.transparent;
@@ -91,14 +97,8 @@ class SendTemplatePage extends BasePage {
97 radius: 6.0,
98 dotWidth: 6.0,
99 dotHeight: 6.0,
94 - dotColor: Theme.of(context)
95 - .primaryTextTheme
96 - .displaySmall!
97 - .backgroundColor!,
98 - activeDotColor: Theme.of(context)
99 - .primaryTextTheme
100 - .displayMedium!
101 - .backgroundColor!))
100 + dotColor: Theme.of(context).extension<SendPageTheme>()!.indicatorDotColor,
101 + activeDotColor: Theme.of(context).extension<DashboardPageTheme>()!.indicatorDotTheme.activeIndicatorColor))
102 : Offstage();
103 },
104 ),
@@ -119,10 +119,10 @@ class SendTemplatePage extends BasePage {
119 },
120 text: S.of(context).add_receiver,
121 color: Colors.transparent,
122 - textColor: Theme.of(context).accentTextTheme.displaySmall!.decorationColor!,
122 + textColor: Theme.of(context).extension<SeedWidgetTheme>()!.hintTextColor,
123 isDottedBorder: true,
124 borderColor:
125 - Theme.of(context).primaryTextTheme.displaySmall!.decorationColor!)),
125 + Theme.of(context).extension<SendPageTheme>()!.templateBackgroundColor)),
126 PrimaryButton(
127 onPressed: () {
128 if (_formKey.currentState != null && _formKey.currentState!.validate()) {
@@ -145,7 +145,7 @@ class SendTemplatePage extends BasePage {
145 }
146 },
147 text: S.of(context).save,
148 - color: Colors.green,
148 + color: Theme.of(context).primaryColor,
149 textColor: Colors.white)
150 ])));
151 }
lib/src/screens/send/widgets/choose_yat_address_alert.dart
+4 -3
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:cake_wallet/src/widgets/cake_scrollbar.dart';
3 import 'package:cake_wallet/src/widgets/section_divider.dart';
4 import 'package:flutter/material.dart';
@@ -66,12 +67,12 @@ class ChooseYatAddressButtonsState extends State<ChooseYatAddressButtons> {
67 Container(
68 width: 300,
69 height: 158,
69 - color: Theme.of(context).accentTextTheme!.bodyMedium!.backgroundColor!,
70 + color: Theme.of(context).dialogBackgroundColor,
71 child: ListView.separated(
72 controller: controller,
73 padding: EdgeInsets.all(0),
74 itemCount: itemCount,
74 - separatorBuilder: (_, __) => const SectionDivider(),
75 + separatorBuilder: (_, __) => const HorizontalSectionDivider(),
76 itemBuilder: (context, index) {
77 final address = addresses[index];
78
@@ -95,7 +96,7 @@ class ChooseYatAddressButtonsState extends State<ChooseYatAddressButtons> {
96 fontSize: 15,
97 fontWeight: FontWeight.w600,
98 fontFamily: 'Lato',
98 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
99 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
100 decoration: TextDecoration.none,
101 ),
102 )
lib/src/screens/send/widgets/confirm_sending_alert.dart
+8 -18
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:cake_wallet/palette.dart';
3 import 'package:cake_wallet/view_model/send/output.dart';
4 import 'package:flutter/material.dart';
@@ -205,8 +206,7 @@ class ConfirmSendingAlertContentState extends State<ConfirmSendingAlertContent>
206 fontSize: 16,
207 fontWeight: FontWeight.normal,
208 fontFamily: 'Lato',
208 - color: Theme.of(context).primaryTextTheme!
209 - .titleLarge!.color!,
209 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
210 decoration: TextDecoration.none,
211 ),
212 ),
@@ -219,8 +219,7 @@ class ConfirmSendingAlertContentState extends State<ConfirmSendingAlertContent>
219 fontSize: 18,
220 fontWeight: FontWeight.w600,
221 fontFamily: 'Lato',
222 - color: Theme.of(context).primaryTextTheme!
223 - .titleLarge!.color!,
222 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
223 decoration: TextDecoration.none,
224 ),
225 ),
@@ -240,10 +239,7 @@ class ConfirmSendingAlertContentState extends State<ConfirmSendingAlertContent>
239 fontSize: 16,
240 fontWeight: FontWeight.normal,
241 fontFamily: 'Lato',
243 - color: Theme.of(context)
244 - .primaryTextTheme!
245 - .titleLarge!
246 - .color!,
242 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
243 decoration: TextDecoration.none,
244 ),
245 ),
@@ -256,10 +252,7 @@ class ConfirmSendingAlertContentState extends State<ConfirmSendingAlertContent>
252 fontSize: 18,
253 fontWeight: FontWeight.w600,
254 fontFamily: 'Lato',
259 - color: Theme.of(context)
260 - .primaryTextTheme!
261 - .titleLarge!
262 - .color,
255 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
256 decoration: TextDecoration.none,
257 ),
258 ),
@@ -290,7 +283,7 @@ class ConfirmSendingAlertContentState extends State<ConfirmSendingAlertContent>
283 fontSize: 16,
284 fontWeight: FontWeight.normal,
285 fontFamily: 'Lato',
293 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
286 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
287 decoration: TextDecoration.none,
288 ),
289 ),
@@ -303,7 +296,7 @@ class ConfirmSendingAlertContentState extends State<ConfirmSendingAlertContent>
296 fontSize: 18,
297 fontWeight: FontWeight.w600,
298 fontFamily: 'Lato',
306 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
299 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
300 decoration: TextDecoration.none,
301 ),
302 ),
@@ -332,10 +325,7 @@ class ConfirmSendingAlertContentState extends State<ConfirmSendingAlertContent>
325 fontSize: 16,
326 fontWeight: FontWeight.normal,
327 fontFamily: 'Lato',
335 - color: Theme.of(context)
336 - .primaryTextTheme!
337 - .titleLarge!
338 - .color!,
328 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
329 decoration: TextDecoration.none,
330 ),
331 ),
lib/src/screens/send/widgets/prefix_currency_icon_widget.dart
+11 -2
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
2 import 'package:flutter/material.dart';
3
4 class PrefixCurrencyIcon extends StatelessWidget {
@@ -23,7 +24,11 @@ class PrefixCurrencyIcon extends StatelessWidget {
24 padding: EdgeInsets.symmetric(vertical: 4, horizontal: 8),
25 decoration: BoxDecoration(
26 borderRadius: BorderRadius.circular(26),
26 - color: isSelected ? Colors.green : Colors.transparent,
27 + color: isSelected
28 + ? Theme.of(context)
29 + .extension<SendPageTheme>()!
30 + .templateSelectedCurrencyBackgroundColor
31 + : Colors.transparent,
32 ),
33 child: Row(
34 mainAxisSize: MainAxisSize.min,
@@ -42,7 +47,11 @@ class PrefixCurrencyIcon extends StatelessWidget {
47 style: TextStyle(
48 fontSize: 16,
49 fontWeight: FontWeight.w600,
45 - color: Colors.white,
50 + color: isSelected
51 + ? Theme.of(context)
52 + .extension<SendPageTheme>()!
53 + .templateSelectedCurrencyTitleColor
54 + : Colors.white,
55 ),
56 ),
57 ],
lib/src/screens/send/widgets/send_card.dart
+17 -41
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/keyboard_theme.dart';
2 import 'package:cake_wallet/entities/priority_for_wallet_type.dart';
3 import 'package:cake_wallet/src/screens/exchange/widgets/currency_picker.dart';
4 import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
@@ -20,6 +21,7 @@ import 'package:cake_wallet/utils/show_pop_up.dart';
21 import 'package:cake_wallet/src/widgets/address_text_field.dart';
22 import 'package:cake_wallet/generated/i18n.dart';
23 import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
24 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
25
26 class SendCard extends StatefulWidget {
27 SendCard({
@@ -101,7 +103,7 @@ class SendCardState extends State<SendCard> with AutomaticKeepAliveClientMixin<S
103 KeyboardActions(
104 config: KeyboardActionsConfig(
105 keyboardActionsPlatform: KeyboardActionsPlatform.IOS,
104 - keyboardBarColor: Theme.of(context).accentTextTheme.bodyLarge!.backgroundColor!,
106 + keyboardBarColor: Theme.of(context).extension<KeyboardTheme>()!.keyboardBarColor,
107 nextFocus: false,
108 actions: [
109 KeyboardActionsItem(
@@ -126,8 +128,8 @@ class SendCardState extends State<SendCard> with AutomaticKeepAliveClientMixin<S
128 bottomLeft: Radius.circular(24), bottomRight: Radius.circular(24)),
129 gradient: LinearGradient(
130 colors: [
129 - Theme.of(context).primaryTextTheme.titleMedium!.color!,
130 - Theme.of(context).primaryTextTheme.titleMedium!.decorationColor!,
131 + Theme.of(context).extension<SendPageTheme>()!.firstGradientColor,
132 + Theme.of(context).extension<SendPageTheme>()!.secondGradientColor,
133 ],
134 begin: Alignment.topLeft,
135 end: Alignment.bottomRight,
@@ -173,7 +175,7 @@ class SendCardState extends State<SendCard> with AutomaticKeepAliveClientMixin<S
175 fontSize: 14,
176 fontWeight: FontWeight.w500,
177 color:
176 - Theme.of(context).primaryTextTheme.headlineSmall!.decorationColor!),
178 + Theme.of(context).extension<SendPageTheme>()!.textFieldHintColor),
179 onPushPasteButton: (context) async {
180 output.resetParsedAddress();
181 await output.fetchParsedAddress(context);
@@ -194,7 +196,7 @@ class SendCardState extends State<SendCard> with AutomaticKeepAliveClientMixin<S
196 child: BaseTextFormField(
197 controller: extractedAddressController,
198 readOnly: true,
197 - borderColor: Theme.of(context).primaryTextTheme.headlineSmall!.color!,
199 + borderColor: Theme.of(context).extension<SendPageTheme>()!.textFieldBorderColor,
200 textStyle: TextStyle(
201 fontSize: 14, fontWeight: FontWeight.w500, color: Colors.white),
202 validator: sendViewModel.addressValidator)),
@@ -249,10 +251,7 @@ class SendCardState extends State<SendCard> with AutomaticKeepAliveClientMixin<S
251 child: Container(
252 height: 32,
253 decoration: BoxDecoration(
252 - color: Theme.of(context)
253 - .primaryTextTheme
254 - .headlineMedium!
255 - .color!,
254 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldButtonColor,
255 borderRadius: BorderRadius.all(
256 Radius.circular(6),
257 )),
@@ -264,10 +263,7 @@ class SendCardState extends State<SendCard> with AutomaticKeepAliveClientMixin<S
263 style: TextStyle(
264 fontSize: 12,
265 fontWeight: FontWeight.bold,
267 - color: Theme.of(context)
268 - .primaryTextTheme
269 - .headlineMedium!
270 - .decorationColor!),
266 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldButtonIconColor),
267 ),
268 ),
269 ),
@@ -308,10 +304,7 @@ class SendCardState extends State<SendCard> with AutomaticKeepAliveClientMixin<S
304 fontWeight: FontWeight.w500,
305 color: Colors.white),
306 placeholderTextStyle: TextStyle(
311 - color: Theme.of(context)
312 - .primaryTextTheme
313 - .headlineSmall!
314 - .decorationColor!,
307 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldHintColor,
308 fontWeight: FontWeight.w500,
309 fontSize: 14),
310 validator: output.sendAll
@@ -329,10 +322,7 @@ class SendCardState extends State<SendCard> with AutomaticKeepAliveClientMixin<S
322 onTap: () async => output.setSendAll(),
323 child: Container(
324 decoration: BoxDecoration(
332 - color: Theme.of(context)
333 - .primaryTextTheme
334 - .headlineMedium!
335 - .color!,
325 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldButtonColor,
326 borderRadius: BorderRadius.all(
327 Radius.circular(6),
328 ),
@@ -344,10 +334,7 @@ class SendCardState extends State<SendCard> with AutomaticKeepAliveClientMixin<S
334 style: TextStyle(
335 fontSize: 12,
336 fontWeight: FontWeight.bold,
347 - color: Theme.of(context)
348 - .primaryTextTheme
349 - .headlineMedium!
350 - .decorationColor!,
337 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldButtonIconColor,
338 ),
339 ),
340 ),
@@ -363,7 +350,7 @@ class SendCardState extends State<SendCard> with AutomaticKeepAliveClientMixin<S
350 ),
351 Divider(
352 height: 1,
366 - color: Theme.of(context).primaryTextTheme.headlineSmall!.decorationColor!),
353 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldHintColor),
354 Observer(
355 builder: (_) => Padding(
356 padding: EdgeInsets.only(top: 10),
@@ -377,10 +364,7 @@ class SendCardState extends State<SendCard> with AutomaticKeepAliveClientMixin<S
364 style: TextStyle(
365 fontSize: 12,
366 fontWeight: FontWeight.w600,
380 - color: Theme.of(context)
381 - .primaryTextTheme
382 - .headlineSmall!
383 - .decorationColor!),
367 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldHintColor),
368 ),
369 ),
370 Text(
@@ -388,10 +372,7 @@ class SendCardState extends State<SendCard> with AutomaticKeepAliveClientMixin<S
372 style: TextStyle(
373 fontSize: 12,
374 fontWeight: FontWeight.w600,
391 - color: Theme.of(context)
392 - .primaryTextTheme
393 - .headlineSmall!
394 - .decorationColor!),
375 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldHintColor),
376 )
377 ],
378 ),
@@ -448,7 +429,7 @@ class SendCardState extends State<SendCard> with AutomaticKeepAliveClientMixin<S
429 fontSize: 14,
430 fontWeight: FontWeight.w500,
431 color:
451 - Theme.of(context).primaryTextTheme.headlineSmall!.decorationColor!),
432 + Theme.of(context).extension<SendPageTheme>()!.textFieldHintColor),
433 ),
434 ),
435 Observer(
@@ -465,7 +446,6 @@ class SendCardState extends State<SendCard> with AutomaticKeepAliveClientMixin<S
446 style: TextStyle(
447 fontSize: 12,
448 fontWeight: FontWeight.w500,
468 - //color: Theme.of(context).primaryTextTheme!.displaySmall!.color!,
449 color: Colors.white),
450 ),
451 Container(
@@ -483,7 +463,6 @@ class SendCardState extends State<SendCard> with AutomaticKeepAliveClientMixin<S
463 style: TextStyle(
464 fontSize: 12,
465 fontWeight: FontWeight.w600,
486 - //color: Theme.of(context).primaryTextTheme!.displaySmall!.color!,
466 color: Colors.white,
467 ),
468 ),
@@ -498,10 +477,7 @@ class SendCardState extends State<SendCard> with AutomaticKeepAliveClientMixin<S
477 style: TextStyle(
478 fontSize: 12,
479 fontWeight: FontWeight.w600,
501 - color: Theme.of(context)
502 - .primaryTextTheme
503 - .headlineSmall!
504 - .decorationColor!,
480 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldHintColor,
481 ),
482 ),
483 ),
lib/src/screens/send/widgets/send_template_card.dart
+12 -11
@@ -1,5 +1,6 @@
1 import 'package:cake_wallet/src/screens/exchange/widgets/currency_picker.dart';
2 import 'package:cake_wallet/src/screens/send/widgets/prefix_currency_icon_widget.dart';
3 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
4 import 'package:cake_wallet/utils/payment_request.dart';
5 import 'package:cake_wallet/utils/show_pop_up.dart';
6 import 'package:cake_wallet/view_model/send/template_view_model.dart';
@@ -43,8 +44,8 @@ class SendTemplateCard extends StatelessWidget {
44 borderRadius:
45 BorderRadius.only(bottomLeft: Radius.circular(24), bottomRight: Radius.circular(24)),
46 gradient: LinearGradient(colors: [
46 - Theme.of(context).primaryTextTheme.titleMedium!.color!,
47 - Theme.of(context).primaryTextTheme.titleMedium!.decorationColor!
47 + Theme.of(context).extension<SendPageTheme>()!.firstGradientColor,
48 + Theme.of(context).extension<SendPageTheme>()!.secondGradientColor
49 ], begin: Alignment.topLeft, end: Alignment.bottomRight)),
50 child: Column(
51 children: <Widget>[
@@ -58,11 +59,11 @@ class SendTemplateCard extends StatelessWidget {
59 hintText: sendTemplateViewModel.recipients.length > 1
60 ? S.of(context).template_name
61 : S.of(context).send_name,
61 - borderColor: Theme.of(context).primaryTextTheme.headlineSmall!.color!,
62 + borderColor: Theme.of(context).extension<SendPageTheme>()!.textFieldBorderColor,
63 textStyle:
64 TextStyle(fontSize: 14, fontWeight: FontWeight.w500, color: Colors.white),
65 placeholderTextStyle: TextStyle(
65 - color: Theme.of(context).primaryTextTheme.headlineSmall!.decorationColor!,
66 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldHintColor,
67 fontWeight: FontWeight.w500,
68 fontSize: 14),
69 validator: sendTemplateViewModel.templateValidator),
@@ -89,8 +90,8 @@ class SendTemplateCard extends StatelessWidget {
90 template.output.resetParsedAddress();
91 await template.output.fetchParsedAddress(context);
92 },
92 - buttonColor: Theme.of(context).primaryTextTheme.headlineMedium!.color!,
93 - borderColor: Theme.of(context).primaryTextTheme.headlineSmall!.color!,
93 + buttonColor: Theme.of(context).extension<SendPageTheme>()!.textFieldButtonColor,
94 + borderColor: Theme.of(context).extension<SendPageTheme>()!.textFieldBorderColor,
95 textStyle: TextStyle(
96 fontSize: 14,
97 fontWeight: FontWeight.w500,
@@ -99,7 +100,7 @@ class SendTemplateCard extends StatelessWidget {
100 hintStyle: TextStyle(
101 fontSize: 14,
102 fontWeight: FontWeight.w500,
102 - color: Theme.of(context).primaryTextTheme.headlineSmall!.decorationColor!,
103 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldHintColor,
104 ),
105 validator: sendTemplateViewModel.addressValidator,
106 ),
@@ -127,11 +128,11 @@ class SendTemplateCard extends StatelessWidget {
128 ),
129 ),
130 hintText: '0.0000',
130 - borderColor: Theme.of(context).primaryTextTheme.headlineSmall!.color!,
131 + borderColor: Theme.of(context).extension<SendPageTheme>()!.textFieldBorderColor,
132 textStyle:
133 TextStyle(fontSize: 14, fontWeight: FontWeight.w500, color: Colors.white),
134 placeholderTextStyle: TextStyle(
134 - color: Theme.of(context).primaryTextTheme.headlineSmall!.decorationColor!,
135 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldHintColor,
136 fontWeight: FontWeight.w500,
137 fontSize: 14),
138 validator: sendTemplateViewModel.amountValidator,
@@ -156,11 +157,11 @@ class SendTemplateCard extends StatelessWidget {
157 title: sendTemplateViewModel.fiatCurrency,
158 isSelected: template.isFiatSelected)),
159 hintText: '0.00',
159 - borderColor: Theme.of(context).primaryTextTheme.headlineSmall!.color!,
160 + borderColor: Theme.of(context).extension<SendPageTheme>()!.textFieldBorderColor,
161 textStyle:
162 TextStyle(fontSize: 14, fontWeight: FontWeight.w500, color: Colors.white),
163 placeholderTextStyle: TextStyle(
163 - color: Theme.of(context).primaryTextTheme.headlineSmall!.decorationColor!,
164 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldHintColor,
165 fontWeight: FontWeight.w500,
166 fontSize: 14,
167 ),
lib/src/screens/settings/desktop_settings/desktop_settings_page.dart
+2 -4
@@ -5,6 +5,7 @@ import 'package:cake_wallet/src/widgets/setting_actions.dart';
5 import 'package:cake_wallet/typography.dart';
6 import 'package:flutter/material.dart';
7 import 'package:cake_wallet/router.dart' as Router;
8 +import 'package:cake_wallet/themes/extensions/menu_theme.dart';
9
10 final _settingsNavigatorKey = GlobalKey<NavigatorState>();
11
@@ -71,10 +72,7 @@ class _DesktopSettingsPageState extends State<DesktopSettingsPage> {
72 },
73 separatorBuilder: (_, index) => Container(
74 height: 1,
74 - color: Theme.of(context)
75 - .primaryTextTheme!
76 - .bodySmall!
77 - .decorationColor!,
75 + color: Theme.of(context).extension<CakeMenuTheme>()!.dividerColor,
76 ),
77 itemCount: itemCount,
78 ),
lib/src/screens/settings/display_settings_page.dart
+2 -12
@@ -2,14 +2,11 @@ import 'package:cake_wallet/entities/fiat_currency.dart';
2 import 'package:cake_wallet/entities/language_service.dart';
3 import 'package:cake_wallet/generated/i18n.dart';
4 import 'package:cake_wallet/src/screens/base_page.dart';
5 -import 'package:cake_wallet/src/screens/settings/widgets/settings_choices_cell.dart';
5 import 'package:cake_wallet/src/screens/settings/widgets/settings_picker_cell.dart';
6 import 'package:cake_wallet/src/screens/settings/widgets/settings_switcher_cell.dart';
8 -import 'package:cake_wallet/themes/theme_base.dart';
9 -import 'package:cake_wallet/themes/theme_list.dart';
7 +import 'package:cake_wallet/src/screens/settings/widgets/settings_theme_choice.dart';
8 import 'package:cake_wallet/utils/device_info.dart';
9 import 'package:cake_wallet/utils/responsive_layout_util.dart';
12 -import 'package:cake_wallet/view_model/settings/choices_list_item.dart';
10 import 'package:cake_wallet/view_model/settings/display_settings_view_model.dart';
11 import 'package:flutter/material.dart';
12 import 'package:flutter_mobx/flutter_mobx.dart';
@@ -78,14 +75,7 @@ class DisplaySettingsPage extends BasePage {
75 },
76 ),
77 if (ResponsiveLayoutUtil.instance.isMobile && DeviceInfo.instance.isMobile)
81 - SettingsChoicesCell(
82 - ChoicesListItem<ThemeBase>(
83 - title: S.current.color_theme,
84 - items: ThemeList.all,
85 - selectedItem: _displaySettingsViewModel.theme,
86 - onItemSelected: (ThemeBase theme) => _displaySettingsViewModel.setTheme(theme),
87 - ),
88 - ),
78 + SettingsThemeChoicesCell(_displaySettingsViewModel),
79 ],
80 ),
81 );
lib/src/screens/settings/manage_nodes_page.dart
+1 -2
@@ -37,12 +37,11 @@ class ManageNodesPage extends BasePage {
37 return Flexible(
38 child: SectionStandardList(
39 sectionCount: 1,
40 - context: context,
40 dividerPadding: EdgeInsets.symmetric(horizontal: 24),
41 itemCounter: (int sectionIndex) {
42 return nodeListViewModel.nodes.length;
43 },
45 - itemBuilder: (_, sectionIndex, index) {
44 + itemBuilder: (_, index) {
45 final node = nodeListViewModel.nodes[index];
46 final isSelected = node.keyIndex == nodeListViewModel.currentNode.keyIndex;
47 final nodeListRow = NodeListRow(
lib/src/screens/settings/widgets/settings_cell_with_arrow.dart
+2 -1
@@ -1,5 +1,6 @@
1 import 'package:flutter/material.dart';
2 import 'package:cake_wallet/src/widgets/standard_list.dart';
3 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
4
5 class SettingsCellWithArrow extends StandardListRow {
6 SettingsCellWithArrow({required String title, required Function(BuildContext context)? handler})
@@ -7,5 +8,5 @@ class SettingsCellWithArrow extends StandardListRow {
8
9 @override
10 Widget buildTrailing(BuildContext context) => Image.asset('assets/images/select_arrow.png',
10 - color: Theme.of(context).primaryTextTheme.labelSmall!.color!);
11 + color: Theme.of(context).extension<TransactionTradeTheme>()!.detailsTitlesColor);
12 }
lib/src/screens/settings/widgets/settings_choices_cell.dart
+8 -6
@@ -1,10 +1,12 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:cake_wallet/view_model/settings/choices_list_item.dart';
3 import 'package:flutter/material.dart';
4 +import 'package:cake_wallet/themes/extensions/address_theme.dart';
5
6 class SettingsChoicesCell extends StatelessWidget {
7 const SettingsChoicesCell(this.choicesListItem, {Key? key}) : super(key: key);
8
7 - final ChoicesListItem choicesListItem;
9 + final ChoicesListItem<dynamic> choicesListItem;
10
11 @override
12 Widget build(BuildContext context) {
@@ -22,7 +24,7 @@ class SettingsChoicesCell extends StatelessWidget {
24 style: TextStyle(
25 fontSize: 14,
26 fontWeight: FontWeight.normal,
25 - color: Theme.of(context).primaryTextTheme.titleLarge!.color!,
27 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
28 ),
29 ),
30 ],
@@ -34,7 +36,7 @@ class SettingsChoicesCell extends StatelessWidget {
36 child: Container(
37 decoration: BoxDecoration(
38 borderRadius: BorderRadius.circular(30),
37 - color: Theme.of(context).accentTextTheme.displaySmall!.color!,
39 + color: Theme.of(context).extension<AddressTheme>()!.actionButtonColor,
40 ),
41 child: Row(
42 mainAxisAlignment: MainAxisAlignment.center,
@@ -42,18 +44,18 @@ class SettingsChoicesCell extends StatelessWidget {
44 final isSelected = choicesListItem.selectedItem == e;
45 return GestureDetector(
46 onTap: () {
45 - choicesListItem.onItemSelected?.call(e);
47 + choicesListItem.onItemSelected.call(e);
48 },
49 child: Container(
50 padding: EdgeInsets.symmetric(horizontal: 32, vertical: 8),
51 decoration: BoxDecoration(
52 borderRadius: BorderRadius.circular(30),
53 color: isSelected
52 - ? Theme.of(context).accentTextTheme.bodyLarge!.color!
54 + ? Theme.of(context).primaryColor
55 : null,
56 ),
57 child: Text(
56 - choicesListItem.displayItem?.call(e) ?? e.toString(),
58 + choicesListItem.displayItem.call(e),
59 style: TextStyle(
60 color: isSelected
61 ? Colors.white
lib/src/screens/settings/widgets/settings_link_provider_cell.dart
+1 -1
@@ -27,7 +27,7 @@ class SettingsLinkProviderCell extends StandardListRow {
27 style: TextStyle(
28 fontSize: 14.0,
29 fontWeight: FontWeight.w500,
30 - color: Palette.blueCraiola));
30 + color: Theme.of(context).primaryColor));
31
32 static void _launchUrl(String url) async {
33 try {
lib/src/screens/settings/widgets/settings_picker_cell.dart
+2 -1
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
2 import 'package:cake_wallet/utils/show_pop_up.dart';
3 import 'package:flutter/material.dart';
4 import 'package:cake_wallet/src/widgets/picker.dart';
@@ -55,7 +56,7 @@ class SettingsPickerCell<ItemType> extends StandardListRow {
56 style: TextStyle(
57 fontSize: 14.0,
58 fontWeight: FontWeight.w500,
58 - color: Theme.of(context).primaryTextTheme!.labelSmall?.color,
59 + color: Theme.of(context).extension<TransactionTradeTheme>()!.detailsTitlesColor,
60 ),
61 );
62 }
lib/src/screens/settings/widgets/settings_theme_choice.dart new
+117
@@ -0,0 +1,117 @@
1 +import 'package:cake_wallet/generated/i18n.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 +import 'package:cake_wallet/themes/theme_base.dart';
4 +import 'package:cake_wallet/themes/theme_list.dart';
5 +import 'package:cake_wallet/view_model/settings/display_settings_view_model.dart';
6 +import 'package:flutter/material.dart';
7 +
8 +class SettingsThemeChoicesCell extends StatelessWidget {
9 + SettingsThemeChoicesCell(this._displaySettingsViewModel);
10 +
11 + final items = ThemeList.all;
12 +
13 + final DisplaySettingsViewModel _displaySettingsViewModel;
14 +
15 + final double cellHeight = 25;
16 + final double cellWidth = 12;
17 + final double cellRadius = 6;
18 +
19 + @override
20 + Widget build(BuildContext context) {
21 + return Container(
22 + padding: EdgeInsets.all(cellHeight),
23 + child: Column(
24 + mainAxisSize: MainAxisSize.min,
25 + crossAxisAlignment: CrossAxisAlignment.start,
26 + children: [
27 + Row(
28 + children: [
29 + Text(
30 + S.current.color_theme,
31 + style: TextStyle(
32 + fontSize: 14,
33 + fontWeight: FontWeight.normal,
34 + color:
35 + Theme.of(context).extension<CakeTextTheme>()!.titleColor,
36 + ),
37 + ),
38 + ],
39 + ),
40 + SizedBox(height: cellHeight),
41 + GridView.builder(
42 + itemCount: items.length,
43 + shrinkWrap: true,
44 + physics: NeverScrollableScrollPhysics(),
45 + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
46 + crossAxisCount: 3,
47 + mainAxisExtent: 75,
48 + crossAxisSpacing: 20,
49 + ),
50 + itemBuilder: (context, index) {
51 + final ThemeBase e = items[index];
52 + final currentTheme = _displaySettingsViewModel.theme;
53 + final isSelected = currentTheme == e;
54 +
55 + return Padding(
56 + padding: EdgeInsets.all(5),
57 + child: GestureDetector(
58 + onTap: () {
59 + _displaySettingsViewModel.setTheme(e);
60 + },
61 + child: Container(
62 + padding: EdgeInsets.all(5),
63 + decoration: BoxDecoration(
64 + borderRadius: BorderRadius.circular(cellRadius),
65 + border: isSelected
66 + ? Border.all(
67 + color: Theme.of(context).primaryColor)
68 + : null,
69 + color: Theme.of(context)
70 + .extension<CakeTextTheme>()!
71 + .secondaryTextColor
72 + .withOpacity(
73 + currentTheme.brightness == Brightness.light
74 + ? 0.1
75 + : 0.3),
76 + ),
77 + child: Row(
78 + mainAxisAlignment: MainAxisAlignment.center,
79 + children: [
80 + Container(
81 + padding: EdgeInsets.symmetric(
82 + horizontal: cellWidth, vertical: cellHeight),
83 + decoration: BoxDecoration(
84 + borderRadius: BorderRadius.only(
85 + topLeft: Radius.circular(cellRadius),
86 + bottomLeft: Radius.circular(cellRadius)),
87 + color: e.themeData.primaryColor,
88 + ),
89 + ),
90 + Container(
91 + padding: EdgeInsets.symmetric(
92 + horizontal: cellWidth, vertical: cellHeight),
93 + decoration: BoxDecoration(
94 + color: e.themeData.colorScheme.background,
95 + ),
96 + ),
97 + Container(
98 + padding: EdgeInsets.symmetric(
99 + horizontal: cellWidth, vertical: cellHeight),
100 + decoration: BoxDecoration(
101 + borderRadius: BorderRadius.only(
102 + topRight: Radius.circular(cellRadius),
103 + bottomRight: Radius.circular(cellRadius)),
104 + color: e.themeData.cardColor,
105 + ),
106 + ),
107 + ],
108 + ),
109 + ),
110 + ),
111 + );
112 + }),
113 + ],
114 + ),
115 + );
116 + }
117 +}
lib/src/screens/settings/widgets/settings_version_cell.dart
+2 -1
@@ -1,4 +1,5 @@
1 import 'package:flutter/material.dart';
2 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
3
4 class SettingsVersionCell extends StatelessWidget {
5 SettingsVersionCell({required this.title});
@@ -18,7 +19,7 @@ class SettingsVersionCell extends StatelessWidget {
19 style: TextStyle(
20 fontSize: 12,
21 fontWeight: FontWeight.normal,
21 - color: Theme.of(context).primaryTextTheme!.labelSmall!.color!),
22 + color: Theme.of(context).extension<TransactionTradeTheme>()!.detailsTitlesColor),
23 )
24 ],
25 ),
lib/src/screens/setup_2fa/setup_2fa.dart
+3 -2
@@ -1,4 +1,5 @@
1 import 'package:cake_wallet/generated/i18n.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 import 'package:flutter/material.dart';
4
5 import 'package:cake_wallet/routes.dart';
@@ -33,7 +34,7 @@ class Setup2FAPage extends BasePage {
34 fontWeight: FontWeight.w700,
35 fontSize: 14,
36 height: 1.571,
36 - color: Theme.of(context).primaryTextTheme.headline6!.color!,
37 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
38 ),
39 ),
40 SizedBox(height: 16),
@@ -43,7 +44,7 @@ class Setup2FAPage extends BasePage {
44 fontWeight: FontWeight.w400,
45 fontSize: 14,
46 height: 1.571,
46 - color: Theme.of(context).primaryTextTheme.headline6!.color!,
47 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
48 ),
49 ),
50 ],
lib/src/screens/setup_2fa/setup_2fa_enter_code_page.dart
+1 -1
@@ -203,7 +203,7 @@ class TOTPEnterCode extends BasePage {
203
204 },
205 text: S.of(context).continue_text,
206 - color: Theme.of(context).accentTextTheme.bodyLarge!.color!,
206 + color: Theme.of(context).primaryColor,
207 textColor: Colors.white,
208 );
209 },
lib/src/screens/setup_2fa/setup_2fa_qr_page.dart
+3 -2
@@ -6,6 +6,7 @@ import 'package:cake_wallet/src/widgets/standard_list.dart';
6 import 'package:cake_wallet/generated/i18n.dart';
7 import 'package:cake_wallet/palette.dart';
8 import 'package:cake_wallet/routes.dart';
9 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
10 import 'package:cake_wallet/utils/clipboard_util.dart';
11 import 'package:cake_wallet/utils/show_bar.dart';
12 import 'package:cake_wallet/view_model/set_up_2fa_viewmodel.dart';
@@ -53,7 +54,7 @@ class Setup2FAQRPage extends BasePage {
54 decoration: BoxDecoration(
55 border: Border.all(
56 width: 3,
56 - color: Theme.of(context).accentTextTheme.headline2!.backgroundColor!,
57 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
58 ),
59 ),
60 child: Container(
@@ -137,7 +138,7 @@ class Setup2FAQRPage extends BasePage {
138 );
139 },
140 text: S.current.continue_text,
140 - color: Theme.of(context).accentTextTheme.bodyLarge!.color!,
141 + color: Theme.of(context).primaryColor,
142 textColor: Colors.white,
143 ),
144 SizedBox(height: 24),
lib/src/screens/setup_2fa/widgets/popup_cancellable_alert.dart
+3 -2
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:cake_wallet/src/widgets/alert_close_button.dart';
3 import 'package:cake_wallet/src/widgets/primary_button.dart';
4 import 'package:flutter/material.dart';
@@ -30,7 +31,7 @@ class PopUpCancellableAlertDialog extends StatelessWidget {
31 fontSize: 16,
32 fontWeight: FontWeight.normal,
33 fontFamily: 'Lato',
33 - color: Theme.of(context).primaryTextTheme.titleLarge!.color!,
34 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
35 decoration: TextDecoration.none,
36 ),
37 );
@@ -55,7 +56,7 @@ class PopUpCancellableAlertDialog extends StatelessWidget {
56 child: Container(
57 width: 340,
58 padding: EdgeInsets.all(10),
58 - color: Theme.of(context).accentTextTheme.titleLarge!.decorationColor!,
59 + color: Theme.of(context).dialogBackgroundColor,
60 child: Column(
61 mainAxisSize: MainAxisSize.min,
62 children: <Widget>[
lib/src/screens/subaddress/address_edit_or_create_page.dart
+1 -4
@@ -53,10 +53,7 @@ class AddressEditOrCreatePage extends BasePage {
53 text: addressEditOrCreateViewModel.isEdit
54 ? S.of(context).rename
55 : S.of(context).new_subaddress_create,
56 - color: Theme.of(context)
57 - .accentTextTheme!
58 - .bodyLarge!
59 - .color!,
56 + color: Theme.of(context).primaryColor,
57 textColor: Colors.white,
58 isLoading:
59 addressEditOrCreateViewModel.state is AddressIsSaving,
lib/src/screens/support/widgets/support_tiles.dart
+4 -3
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
2 import 'package:flutter/material.dart';
3
4 class SupportTile extends StatelessWidget {
@@ -22,7 +23,7 @@ class SupportTile extends StatelessWidget {
23 alignment: Alignment.center,
24 decoration: BoxDecoration(
25 borderRadius: BorderRadius.all(Radius.circular(12)),
25 - color: Theme.of(context).accentTextTheme.bodySmall!.color!,
26 + color: Theme.of(context).cardColor,
27 ),
28 child: Row(
29 mainAxisSize: MainAxisSize.max,
@@ -43,7 +44,7 @@ class SupportTile extends StatelessWidget {
44 style: TextStyle(
45 fontSize: 20,
46 fontWeight: FontWeight.w500,
46 - color: Theme.of(context).primaryTextTheme.titleLarge!.color!,
47 + color: Theme.of(context).dialogTheme.backgroundColor,
48 ),
49 ),
50 Padding(
@@ -53,7 +54,7 @@ class SupportTile extends StatelessWidget {
54 style: TextStyle(
55 fontSize: 16,
56 fontWeight: FontWeight.normal,
56 - color: Theme.of(context).primaryTextTheme.labelSmall!.color!,
57 + color: Theme.of(context).extension<TransactionTradeTheme>()!.detailsTitlesColor,
58 ),
59 ),
60 )
lib/src/screens/support_other_links/support_other_links_page.dart
+4 -6
@@ -1,6 +1,7 @@
1 import 'package:cake_wallet/src/screens/settings/widgets/settings_cell_with_arrow.dart';
2 import 'package:cake_wallet/src/screens/settings/widgets/settings_link_provider_cell.dart';
3 import 'package:cake_wallet/src/widgets/standard_list.dart';
4 +import 'package:cake_wallet/themes/extensions/support_page_theme.dart';
5 import 'package:cake_wallet/view_model/settings/link_list_item.dart';
6 import 'package:cake_wallet/view_model/settings/regular_list_item.dart';
7 import 'package:cake_wallet/view_model/support_view_model.dart';
@@ -21,23 +22,20 @@ class SupportOtherLinksPage extends BasePage {
22
23 @override
24 Widget body(BuildContext context) {
24 - final iconColor =
25 - Theme.of(context).accentTextTheme.displayLarge!.backgroundColor!;
25 + final iconColor = Theme.of(context).extension<SupportPageTheme>()!.iconColor;
26
27 return Container(
28 child: Center(
29 child: ConstrainedBox(
30 constraints: BoxConstraints(maxWidth: 500),
31 child: SectionStandardList(
32 - context: context,
32 sectionCount: 1,
33 itemCounter: (int _) => supportViewModel.items.length,
35 - itemBuilder: (_, __, index) {
34 + itemBuilder: (_, index) {
35 final item = supportViewModel.items[index];
36
37 if (item is RegularListItem) {
39 - return SettingsCellWithArrow(
40 - title: item.title, handler: item.handler);
38 + return SettingsCellWithArrow(title: item.title, handler: item.handler);
39 }
40
41 if (item is LinkListItem) {
lib/src/screens/trade_details/trade_details_page.dart
+1 -2
@@ -53,10 +53,9 @@ class TradeDetailsPageBodyState extends State<TradeDetailsPageBody> {
53 return Observer(builder: (_) {
54 // FIX-ME: Added `context` it was not used here before, maby bug ?
55 return SectionStandardList(
56 - context: context,
56 sectionCount: 1,
57 itemCounter: (int _) => tradeDetailsViewModel.items.length,
59 - itemBuilder: (_, __, index) {
58 + itemBuilder: (__, index) {
59 final item = tradeDetailsViewModel.items[index];
60
61 if (item is TrackTradeListItem) {
lib/src/screens/transaction_details/transaction_details_page.dart
+1 -7
@@ -10,11 +10,6 @@ import 'package:cake_wallet/src/widgets/list_row.dart';
10 import 'package:cake_wallet/src/screens/transaction_details/blockexplorer_list_item.dart';
11 import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.dart';
12 import 'package:cake_wallet/src/screens/base_page.dart';
13 -import 'package:cake_wallet/utils/date_formatter.dart';
14 -
15 -import 'package:url_launcher/url_launcher.dart';
16 -
17 -import 'package:hive/hive.dart';
13
14 class TransactionDetailsPage extends BasePage {
15 TransactionDetailsPage({required this.transactionDetailsViewModel});
@@ -28,10 +23,9 @@ class TransactionDetailsPage extends BasePage {
23 Widget body(BuildContext context) {
24 // FIX-ME: Added `context` it was not used here before, maby bug ?
25 return SectionStandardList(
31 - context: context,
26 sectionCount: 1,
27 itemCounter: (int _) => transactionDetailsViewModel.items.length,
34 - itemBuilder: (_, __, index) {
28 + itemBuilder: (__, index) {
29 final item = transactionDetailsViewModel.items[index];
30
31 if (item is StandartListItem) {
lib/src/screens/transaction_details/widgets/textfield_list_row.dart
+5 -9
@@ -1,5 +1,7 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:flutter/material.dart';
3 import 'package:cake_wallet/generated/i18n.dart';
4 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
5
6 class TextFieldListRow extends StatelessWidget {
7 TextFieldListRow(
@@ -34,10 +36,7 @@ class TextFieldListRow extends StatelessWidget {
36 style: TextStyle(
37 fontSize: titleFontSize,
38 fontWeight: FontWeight.w500,
37 - color: Theme.of(context)
38 - .primaryTextTheme!
39 - .labelSmall!
40 - .color!),
39 + color: Theme.of(context).extension<TransactionTradeTheme>()!.detailsTitlesColor),
40 textAlign: TextAlign.left),
41 TextField(
42 controller: _textController,
@@ -49,7 +48,7 @@ class TextFieldListRow extends StatelessWidget {
48 fontSize: valueFontSize,
49 fontWeight: FontWeight.w500,
50 color:
52 - Theme.of(context).primaryTextTheme!.titleLarge!.color!),
51 + Theme.of(context).extension<CakeTextTheme>()!.titleColor),
52 decoration: InputDecoration(
53 isDense: true,
54 contentPadding: EdgeInsets.only(top: 12, bottom: 0),
@@ -57,10 +56,7 @@ class TextFieldListRow extends StatelessWidget {
56 hintStyle: TextStyle(
57 fontSize: valueFontSize,
58 fontWeight: FontWeight.w500,
60 - color: Theme.of(context)
61 - .primaryTextTheme!
62 - .labelSmall!
63 - .color!),
59 + color: Theme.of(context).extension<TransactionTradeTheme>()!.detailsTitlesColor),
60 border: InputBorder.none),
61 onSubmitted: (value) => onSubmitted?.call(value),
62 )
lib/src/screens/unspent_coins/unspent_coins_details_page.dart
+1 -2
@@ -26,10 +26,9 @@ class UnspentCoinsDetailsPage extends BasePage {
26 Widget body(BuildContext context) {
27 // FIX-ME: Added `context` it was not used here before, maby bug ?
28 return SectionStandardList(
29 - context: context,
29 sectionCount: 1,
30 itemCounter: (int _) => unspentCoinsDetailsViewModel.items.length,
32 - itemBuilder: (_, __, index) {
31 + itemBuilder: (__, index) {
32 final item = unspentCoinsDetailsViewModel.items[index];
33
34 if (item is StandartListItem) {
lib/src/screens/unspent_coins/unspent_coins_list_page.dart
+1 -1
@@ -18,7 +18,7 @@ class UnspentCoinsListPage extends BasePage {
18 //@override
19 //Widget trailing(BuildContext context) {
20 // final questionImage = Image.asset('assets/images/question_mark.png',
21 - // color: Theme.of(context).primaryTextTheme!.titleLarge!.color!);
21 + // color: Theme.of(context).extension<CakeTextTheme>()!.titleColor);
22
23 // return SizedBox(
24 // height: 20.0,
lib/src/screens/unspent_coins/widgets/unspent_coins_list_item.dart
+13 -7
@@ -1,8 +1,7 @@
1 import 'package:auto_size_text/auto_size_text.dart';
2 -import 'package:cake_wallet/palette.dart';
2 import 'package:cake_wallet/src/widgets/standard_checkbox.dart';
3 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
4 import 'package:flutter/material.dart';
5 -import 'package:flutter/cupertino.dart';
5 import 'package:cake_wallet/generated/i18n.dart';
6
7 class UnspentCoinsListItem extends StatelessWidget {
@@ -15,11 +14,6 @@ class UnspentCoinsListItem extends StatelessWidget {
14 this.onCheckBoxTap,
15 });
16
18 - static const amountColor = Palette.darkBlueCraiola;
19 - static const addressColor = Palette.darkGray;
20 - static const selectedItemColor = Palette.paleCornflowerBlue;
21 - static const unselectedItemColor = Palette.moderateLavender;
22 -
17 final String note;
18 final String amount;
19 final String address;
@@ -29,7 +23,17 @@ class UnspentCoinsListItem extends StatelessWidget {
23
24 @override
25 Widget build(BuildContext context) {
26 + final unselectedItemColor = Theme.of(context).cardColor;
27 + final selectedItemColor = Theme.of(context).primaryColor;
28 final itemColor = isSending ? selectedItemColor : unselectedItemColor;
29 +
30 + final amountColor = isSending
31 + ? Colors.white
32 + : Theme.of(context).extension<CakeTextTheme>()!.buttonTextColor;
33 + final addressColor = isSending
34 + ? Colors.white.withOpacity(0.5)
35 + : Theme.of(context).extension<CakeTextTheme>()!.buttonSecondaryTextColor;
36 +
37 return Container(
38 height: 70,
39 padding: EdgeInsets.symmetric(vertical: 6, horizontal: 12),
@@ -41,6 +45,8 @@ class UnspentCoinsListItem extends StatelessWidget {
45 Padding(
46 padding: EdgeInsets.only(right: 12),
47 child: StandardCheckbox(
48 + iconColor: amountColor,
49 + borderColor: addressColor,
50 value: isSending, onChanged: (value) => onCheckBoxTap?.call())),
51 Expanded(
52 child: Column(
lib/src/screens/unspent_coins/widgets/unspent_coins_switch_row.dart
+2 -4
@@ -1,5 +1,6 @@
1 import 'package:cake_wallet/src/widgets/standard_switch.dart';
2 import 'package:flutter/material.dart';
3 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
4
5 class UnspentCoinsSwitchRow extends StatelessWidget {
6 UnspentCoinsSwitchRow(
@@ -28,10 +29,7 @@ class UnspentCoinsSwitchRow extends StatelessWidget {
29 style: TextStyle(
30 fontSize: titleFontSize,
31 fontWeight: FontWeight.w500,
31 - color: Theme.of(context)
32 - .primaryTextTheme!
33 - .labelSmall!
34 - .color!),
32 + color: Theme.of(context).extension<TransactionTradeTheme>()!.detailsTitlesColor),
33 textAlign: TextAlign.left),
34 Padding(
35 padding: EdgeInsets.only(top: 12),
lib/src/screens/wallet/wallet_edit_page.dart
+1 -1
@@ -102,7 +102,7 @@ class WalletEditPage extends BasePage {
102 }
103 },
104 text: S.of(context).save,
105 - color: Theme.of(context).accentTextTheme.bodyLarge!.color!,
105 + color: Theme.of(context).primaryColor,
106 textColor: Colors.white,
107 isDisabled: walletEditViewModel.newName.isEmpty || isLoading,
108 ),
lib/src/screens/wallet_keys/wallet_keys_page.dart
+57 -49
@@ -13,6 +13,7 @@ import 'package:flutter/material.dart';
13 import 'package:flutter/services.dart';
14 import 'package:flutter_mobx/flutter_mobx.dart';
15 import 'package:qr_flutter/qr_flutter.dart';
16 +import 'package:cake_wallet/themes/extensions/picker_theme.dart';
17
18 class WalletKeysPage extends BasePage {
19 WalletKeysPage(this.walletKeysViewModel);
@@ -49,61 +50,68 @@ class WalletKeysPage extends BasePage {
50 @override
51 Widget body(BuildContext context) {
52 return Column(
52 - children: [
53 - Expanded(
54 - child: Padding(
55 - padding: const EdgeInsets.symmetric(horizontal: 24.0),
56 - child: Container(
57 - width: double.infinity,
58 - decoration: BoxDecoration(
59 - borderRadius: BorderRadius.circular(12.0),
60 - color: Theme.of(context).accentTextTheme.bodySmall!.color!,
61 - ),
62 - child: Center(
63 - child: Padding(
64 - padding: const EdgeInsets.all(8.0),
65 - child: AutoSizeText(
66 - S.of(context).do_not_share_warning_text.toUpperCase(),
67 - textAlign: TextAlign.center,
68 - maxLines: 4,
69 - style: TextStyle(
70 - fontSize: 16,
71 - fontWeight: FontWeight.w500,
72 - color: Colors.red)),
53 + children: [
54 + Expanded(
55 + child: Padding(
56 + padding: const EdgeInsets.symmetric(horizontal: 24.0),
57 + child: Container(
58 + width: double.infinity,
59 + decoration: BoxDecoration(
60 + borderRadius: BorderRadius.circular(12.0),
61 + color: Theme.of(context).cardColor,
62 + ),
63 + child: Center(
64 + child: Padding(
65 + padding: const EdgeInsets.all(8.0),
66 + child: AutoSizeText(
67 + S.of(context).do_not_share_warning_text.toUpperCase(),
68 + textAlign: TextAlign.center,
69 + maxLines: 4,
70 + style: TextStyle(
71 + fontSize: 16,
72 + fontWeight: FontWeight.w500,
73 + color: Colors.red,
74 + ),
75 ),
76 ),
77 ),
78 ),
79 ),
78 - Expanded(
79 - flex: 7,
80 + ),
81 + Expanded(
82 + flex: 7,
83 child: Container(
81 - padding: EdgeInsets.only(top: 20.0, bottom: 20.0),
82 - child: Observer(
83 - builder: (_) {
84 - return ListView.separated(
85 - separatorBuilder: (context, index) => Container(
86 - height: 1,
87 - padding: EdgeInsets.only(left: 24),
88 - color: Theme.of(context).accentTextTheme.titleLarge!.backgroundColor!,
89 - child: const SectionDivider(),
90 - ),
91 - itemCount: walletKeysViewModel.items.length,
92 - itemBuilder: (BuildContext context, int index) {
93 - final item = walletKeysViewModel.items[index];
84 + padding: EdgeInsets.only(top: 20.0, bottom: 20.0),
85 + child: Observer(
86 + builder: (_) {
87 + return ListView.separated(
88 + separatorBuilder: (context, index) => Container(
89 + height: 1,
90 + padding: EdgeInsets.only(left: 24),
91 + color: Theme.of(context).extension<PickerTheme>()!.dividerColor,
92 + child: const HorizontalSectionDivider(),
93 + ),
94 + itemCount: walletKeysViewModel.items.length,
95 + itemBuilder: (BuildContext context, int index) {
96 + final item = walletKeysViewModel.items[index];
97
95 - return GestureDetector(
96 - onTap: () {
97 - ClipboardUtil.setSensitiveDataToClipboard(ClipboardData(text: item.value));
98 - showBar<void>(context, S.of(context).copied_key_to_clipboard(item.title));
99 - },
100 - child: ListRow(
101 - title: item.title + ':',
102 - value: item.value,
103 - ),
104 - );
105 - });
106 - },
107 - )))]);
98 + return GestureDetector(
99 + onTap: () {
100 + ClipboardUtil.setSensitiveDataToClipboard(ClipboardData(text: item.value));
101 + showBar<void>(context, S.of(context).copied_key_to_clipboard(item.title));
102 + },
103 + child: ListRow(
104 + title: item.title + ':',
105 + value: item.value,
106 + ),
107 + );
108 + },
109 + );
110 + },
111 + ),
112 + ),
113 + ),
114 + ],
115 + );
116 }
117 }
lib/src/screens/wallet_list/wallet_list_page.dart
+29 -25
@@ -1,5 +1,7 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:cake_wallet/core/auth_service.dart';
3 import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
4 +import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
5 import 'package:cake_wallet/utils/responsive_layout_util.dart';
6 import 'package:cake_wallet/utils/show_bar.dart';
7 import 'package:cake_wallet/utils/show_pop_up.dart';
@@ -15,6 +17,7 @@ import 'package:cake_wallet/src/widgets/primary_button.dart';
17 import 'package:cake_wallet/src/screens/base_page.dart';
18 import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
19 import 'package:cake_wallet/wallet_type_utils.dart';
20 +import 'package:cake_wallet/themes/extensions/wallet_list_theme.dart';
21
22 class WalletListPage extends BasePage {
23 WalletListPage({required this.walletListViewModel, required this.authService});
@@ -56,7 +59,9 @@ class WalletListBodyState extends State<WalletListBody> {
59 final newWalletImage =
60 Image.asset('assets/images/new_wallet.png', height: 12, width: 12, color: Colors.white);
61 final restoreWalletImage = Image.asset('assets/images/restore_wallet.png',
59 - height: 12, width: 12, color: Theme.of(context).primaryTextTheme.titleLarge!.color!);
62 + height: 12,
63 + width: 12,
64 + color: Theme.of(context).extension<CakeTextTheme>()!.buttonTextColor);
65
66 return Container(
67 padding: EdgeInsets.only(top: 16),
@@ -73,7 +78,9 @@ class WalletListBodyState extends State<WalletListBody> {
78 itemBuilder: (__, index) {
79 final wallet = widget.walletListViewModel.wallets[index];
80 final currentColor = wallet.isCurrent
76 - ? Theme.of(context).accentTextTheme.titleSmall!.decorationColor!
81 + ? Theme.of(context)
82 + .extension<WalletListTheme>()!
83 + .createNewWalletButtonBackgroundColor
84 : Theme.of(context).colorScheme.background;
85 final row = GestureDetector(
86 onTap: () => wallet.isCurrent ? null : _loadWallet(wallet),
@@ -98,29 +105,25 @@ class WalletListBodyState extends State<WalletListBody> {
105 color: Theme.of(context).colorScheme.background,
106 alignment: Alignment.centerLeft,
107 child: Row(
101 - crossAxisAlignment: CrossAxisAlignment.center,
102 - children: <Widget>[
103 - wallet.isEnabled
104 - ? _imageFor(type: wallet.type)
105 - : nonWalletTypeIcon,
106 - SizedBox(width: 10),
107 - Flexible(
108 - child: Text(
108 + crossAxisAlignment: CrossAxisAlignment.center,
109 + children: <Widget>[
110 + wallet.isEnabled
111 + ? _imageFor(type: wallet.type)
112 + : nonWalletTypeIcon,
113 + SizedBox(width: 10),
114 + Flexible(
115 + child: Text(
116 wallet.name,
117 maxLines: null,
118 softWrap: true,
119 style: TextStyle(
113 - fontSize: 22,
114 - fontWeight: FontWeight.w500,
115 - color: Theme.of(context)
116 - .primaryTextTheme
117 - .titleLarge!
118 - .color!,
119 - ),
120 - ),
121 - ),
122 - ],
123 - ),
120 + fontSize: 22,
121 + fontWeight: FontWeight.w500,
122 + color: Theme.of(context)
123 + .extension<CakeTextTheme>()!
124 + .titleColor),
125 + ))
126 + ]),
127 ),
128 ),
129 ],
@@ -144,13 +147,14 @@ class WalletListBodyState extends State<WalletListBody> {
147 decoration: BoxDecoration(
148 shape: BoxShape.circle,
149 color: Theme.of(context)
147 - .textTheme
148 - .headlineMedium!
149 - .decorationColor!),
150 + .extension<ReceivePageTheme>()!
151 + .iconsBackgroundColor),
152 child: Icon(
153 Icons.edit,
154 size: 14,
153 - color: Theme.of(context).textTheme.headlineMedium!.color!,
155 + color: Theme.of(context)
156 + .extension<ReceivePageTheme>()!
157 + .iconsColor,
158 ),
159 ),
160 ),
lib/src/screens/welcome/welcome_page.dart
+13 -29
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:cake_wallet/themes/theme_base.dart';
3 import 'package:cake_wallet/utils/responsive_layout_util.dart';
4 import 'package:flutter/material.dart';
@@ -6,6 +7,8 @@ import 'package:cake_wallet/src/widgets/primary_button.dart';
7 import 'package:cake_wallet/src/screens/base_page.dart';
8 import 'package:cake_wallet/generated/i18n.dart';
9 import 'package:cake_wallet/wallet_type_utils.dart';
10 +import 'package:cake_wallet/themes/extensions/new_wallet_theme.dart';
11 +import 'package:cake_wallet/themes/extensions/wallet_list_theme.dart';
12
13 class WelcomePage extends BasePage {
14 static const aspectRatioImage = 1.25;
@@ -53,15 +56,12 @@ class WelcomePage extends BasePage {
56 final newWalletImage = Image.asset('assets/images/new_wallet.png',
57 height: 12,
58 width: 12,
56 - color: Theme.of(context)
57 - .accentTextTheme.headlineSmall!
58 - .decorationColor!);
59 + color: Theme.of(context).extension<WalletListTheme>()!.restoreWalletButtonTextColor);
60 final restoreWalletImage = Image.asset('assets/images/restore_wallet.png',
61 height: 12,
62
63 width: 12,
63 -
64 - color: Theme.of(context).primaryTextTheme.titleLarge!.color!);
64 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor);
65
66 return WillPopScope(
67 onWillPop: () async => false,
@@ -88,9 +88,7 @@ class WelcomePage extends BasePage {
88 style: TextStyle(
89 fontSize: 18,
90 fontWeight: FontWeight.w500,
91 - color: Theme.of(context)
92 - .accentTextTheme.displayMedium!
93 - .color!,
91 + color: Theme.of(context).extension<NewWalletTheme>()!.hintTextColor,
92 ),
93 textAlign: TextAlign.center,
94 ),
@@ -102,9 +100,7 @@ class WelcomePage extends BasePage {
100 style: TextStyle(
101 fontSize: 36,
102 fontWeight: FontWeight.bold,
105 - color: Theme.of(context)
106 - .primaryTextTheme.titleLarge!
107 - .color!,
103 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
104 ),
105 textAlign: TextAlign.center,
106 ),
@@ -116,9 +112,7 @@ class WelcomePage extends BasePage {
112 style: TextStyle(
113 fontSize: 16,
114 fontWeight: FontWeight.w500,
119 - color: Theme.of(context)
120 - .accentTextTheme.displayMedium!
121 - .color!,
115 + color: Theme.of(context).extension<NewWalletTheme>()!.hintTextColor,
116 ),
117 textAlign: TextAlign.center,
118 ),
@@ -132,9 +126,7 @@ class WelcomePage extends BasePage {
126 style: TextStyle(
127 fontSize: 12,
128 fontWeight: FontWeight.normal,
135 - color: Theme.of(context)
136 - .accentTextTheme.displayMedium!
137 - .color!,
129 + color: Theme.of(context).extension<NewWalletTheme>()!.hintTextColor,
130 ),
131 textAlign: TextAlign.center,
132 ),
@@ -145,12 +137,8 @@ class WelcomePage extends BasePage {
137 context, Routes.newWalletFromWelcome),
138 image: newWalletImage,
139 text: S.of(context).create_new,
148 - color: Theme.of(context)
149 - .accentTextTheme.titleSmall!
150 - .decorationColor!,
151 - textColor: Theme.of(context)
152 - .accentTextTheme.headlineSmall!
153 - .decorationColor!,
140 + color: Theme.of(context).extension<WalletListTheme>()!.createNewWalletButtonBackgroundColor,
141 + textColor: Theme.of(context).extension<WalletListTheme>()!.restoreWalletButtonTextColor,
142 ),
143 ),
144 Padding(
@@ -163,12 +151,8 @@ class WelcomePage extends BasePage {
151 },
152 image: restoreWalletImage,
153 text: S.of(context).restore_wallet,
166 - color: Theme.of(context)
167 - .accentTextTheme.bodySmall!
168 - .color!,
169 - textColor: Theme.of(context)
170 - .primaryTextTheme.titleLarge!
171 - .color!),
154 + color: Theme.of(context).cardColor,
155 + textColor: Theme.of(context).extension<CakeTextTheme>()!.titleColor),
156 )
157 ],
158 )
lib/src/screens/yat_emoji_id.dart
+6 -6
@@ -6,12 +6,15 @@ import 'package:cake_wallet/src/screens/yat/widgets/yat_close_button.dart';
6 import 'package:cake_wallet/src/widgets/alert_background.dart';
7 import 'package:cake_wallet/src/widgets/primary_button.dart';
8 import 'package:cake_wallet/store/yat/yat_store.dart';
9 +import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart';
10 import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
11 import 'package:flutter/material.dart';
12 import 'package:animate_do/animate_do.dart';
13 import 'package:flutter_mobx/flutter_mobx.dart';
14 import 'package:url_launcher/url_launcher.dart';
15 import 'package:cake_wallet/generated/i18n.dart';
16 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
17 +import 'package:cake_wallet/themes/extensions/balance_page_theme.dart';
18
19 class YatEmojiId extends StatelessWidget {
20 YatEmojiId(this.emojiId);
@@ -39,7 +42,7 @@ class YatEmojiId extends StatelessWidget {
42 child: Container(
43 height: 420,
44 color:
42 - Theme.of(context).textTheme!.titleLarge!.backgroundColor!,
45 + Theme.of(context).extension<SyncIndicatorTheme>()!.syncedBackgroundColor,
46 padding: EdgeInsets.fromLTRB(24, 15, 24, 24),
47 child: Column(
48 mainAxisSize: MainAxisSize.max,
@@ -89,7 +92,7 @@ class YatEmojiId extends StatelessWidget {
92 fontSize: 32,
93 fontWeight: FontWeight.bold,
94 fontFamily: 'Lato',
92 - color: Theme.of(context).accentTextTheme!.displayMedium!.backgroundColor!,
95 + color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
96 decoration: TextDecoration.none,
97 )
98 ),
@@ -102,10 +105,7 @@ class YatEmojiId extends StatelessWidget {
105 fontSize: 18,
106 fontWeight: FontWeight.normal,
107 fontFamily: 'Lato',
105 - color: Theme.of(context)
106 - .accentTextTheme!
107 - .displaySmall!
108 - .backgroundColor!,
108 + color: Theme.of(context).extension<BalancePageTheme>()!.labelTextColor,
109 decoration: TextDecoration.none,
110 )
111 )
lib/src/widgets/add_template_button.dart
+4 -9
@@ -2,6 +2,7 @@ import 'package:cake_wallet/generated/i18n.dart';
2 import 'package:cake_wallet/utils/responsive_layout_util.dart';
3 import 'package:dotted_border/dotted_border.dart';
4 import 'package:flutter/material.dart';
5 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
6
7 class AddTemplateButton extends StatelessWidget {
8 final Function() onTap;
@@ -20,7 +21,7 @@ class AddTemplateButton extends StatelessWidget {
21 borderType: BorderType.RRect,
22 dashPattern: [6, 4],
23 color:
23 - Theme.of(context).primaryTextTheme!.displaySmall!.decorationColor!,
24 + Theme.of(context).extension<SendPageTheme>()!.templateDottedBorderColor,
25 strokeWidth: 2,
26 radius: Radius.circular(20),
27 child: Container(
@@ -35,20 +36,14 @@ class AddTemplateButton extends StatelessWidget {
36 child: currentTemplatesLength >= 1
37 ? Icon(
38 Icons.add,
38 - color: Theme.of(context)
39 - .primaryTextTheme!
40 - .displayMedium!
41 - .color!,
39 + color: Theme.of(context).extension<SendPageTheme>()!.templateNewTextColor,
40 )
41 : Text(
42 S.of(context).new_template,
43 style: TextStyle(
44 fontSize: 14,
45 fontWeight: FontWeight.w600,
48 - color: Theme.of(context)
49 - .primaryTextTheme!
50 - .displayMedium!
51 - .color!,
46 + color: Theme.of(context).extension<SendPageTheme>()!.templateNewTextColor,
47 ),
48 ),
49 ),
lib/src/widgets/address_text_field.dart
+13 -13
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:cake_wallet/utils/device_info.dart';
3 import 'package:cake_wallet/utils/responsive_layout_util.dart';
4 import 'package:flutter/services.dart';
@@ -7,6 +8,7 @@ import 'package:cake_wallet/generated/i18n.dart';
8 import 'package:cake_wallet/entities/qr_scanner.dart';
9 import 'package:cake_wallet/entities/contact_base.dart';
10 import 'package:cw_core/crypto_currency.dart';
11 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
12
13 enum AddressTextFieldOption { paste, qrCode, addressBook }
14
@@ -64,7 +66,8 @@ class AddressTextField extends StatelessWidget {
66 controller: controller,
67 focusNode: focusNode,
68 style: textStyle ??
67 - TextStyle(fontSize: 16, color: Theme.of(context).primaryTextTheme.titleLarge!.color!),
69 + TextStyle(
70 + fontSize: 16, color: Theme.of(context).extension<CakeTextTheme>()!.titleColor),
71 decoration: InputDecoration(
72 suffixIcon: SizedBox(
73 width: prefixIconWidth * options.length + (spaceBetweenPrefixIcons * options.length),
@@ -113,15 +116,14 @@ class AddressTextField extends StatelessWidget {
116 padding: EdgeInsets.all(8),
117 decoration: BoxDecoration(
118 color: buttonColor ??
116 - Theme.of(context).accentTextTheme.titleLarge!.color!,
119 + Theme.of(context).dialogTheme.backgroundColor,
120 borderRadius: BorderRadius.all(Radius.circular(6))),
121 child: Image.asset(
122 'assets/images/paste_ios.png',
123 color: iconColor ??
124 Theme.of(context)
122 - .primaryTextTheme
123 - .headlineMedium!
124 - .decorationColor!,
125 + .extension<SendPageTheme>()!
126 + .textFieldButtonIconColor,
127 )),
128 ),
129 )),
@@ -140,15 +142,14 @@ class AddressTextField extends StatelessWidget {
142 padding: EdgeInsets.all(8),
143 decoration: BoxDecoration(
144 color: buttonColor ??
143 - Theme.of(context).accentTextTheme.titleLarge!.color!,
145 + Theme.of(context).dialogTheme.backgroundColor,
146 borderRadius: BorderRadius.all(Radius.circular(6))),
147 child: Image.asset(
148 'assets/images/qr_code_icon.png',
149 color: iconColor ??
150 Theme.of(context)
149 - .primaryTextTheme
150 - .headlineMedium!
151 - .decorationColor!,
151 + .extension<SendPageTheme>()!
152 + .textFieldButtonIconColor,
153 )),
154 ),
155 ))
@@ -167,15 +168,14 @@ class AddressTextField extends StatelessWidget {
168 padding: EdgeInsets.all(8),
169 decoration: BoxDecoration(
170 color: buttonColor ??
170 - Theme.of(context).accentTextTheme.titleLarge!.color!,
171 + Theme.of(context).dialogTheme.backgroundColor,
172 borderRadius: BorderRadius.all(Radius.circular(6))),
173 child: Image.asset(
174 'assets/images/open_book.png',
175 color: iconColor ??
176 Theme.of(context)
176 - .primaryTextTheme
177 - .headlineMedium!
178 - .decorationColor!,
177 + .extension<SendPageTheme>()!
178 + .textFieldButtonIconColor,
179 )),
180 ),
181 ))
lib/src/widgets/alert_background.dart
+4 -2
@@ -1,7 +1,7 @@
1 import 'dart:ui';
2 +import 'package:cake_wallet/themes/extensions/alert_theme.dart';
3 import 'package:cake_wallet/utils/responsive_layout_util.dart';
4 import 'package:flutter/material.dart';
4 -import 'package:cake_wallet/palette.dart';
5
6 class AlertBackground extends StatelessWidget {
7 AlertBackground({required this.child});
@@ -20,7 +20,9 @@ class AlertBackground extends StatelessWidget {
20 child: BackdropFilter(
21 filter: ImageFilter.blur(sigmaX: 3.0, sigmaY: 3.0),
22 child: Container(
23 - decoration: BoxDecoration(color: PaletteDark.darkNightBlue.withOpacity(0.75)),
23 + decoration: BoxDecoration(
24 + color:
25 + Theme.of(context).extension<AlertTheme>()!.backdropColor),
26 child: Center(
27 child: Container(
28 width: ResponsiveLayoutUtil.kDesktopMaxWidthConstraint,
lib/src/widgets/alert_with_one_action.dart
+2 -8
@@ -31,10 +31,7 @@ class AlertWithOneAction extends BaseAlertDialog {
31 width: 300,
32 height: 52,
33 padding: EdgeInsets.only(left: 12, right: 12),
34 - color: Theme.of(context)
35 - .accentTextTheme!
36 - .bodyMedium!
37 - .backgroundColor!,
34 + color: Theme.of(context).dialogBackgroundColor,
35 child: ButtonTheme(
36 minWidth: double.infinity,
37 child: TextButton(
@@ -48,10 +45,7 @@ class AlertWithOneAction extends BaseAlertDialog {
45 style: TextStyle(
46 fontSize: 15,
47 fontWeight: FontWeight.w600,
51 - color: Theme.of(context)
52 - .primaryTextTheme!
53 - .bodyMedium!
54 - .backgroundColor!,
48 + color: Theme.of(context).primaryColor,
49 decoration: TextDecoration.none,
50 ),
51 )),
lib/src/widgets/base_alert_dialog.dart
+15 -26
@@ -1,5 +1,7 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'dart:ui';
3 import 'package:cake_wallet/src/widgets/section_divider.dart';
4 +import 'package:cake_wallet/themes/extensions/alert_theme.dart';
5 import 'package:flutter/material.dart';
6 import 'package:cake_wallet/palette.dart';
7
@@ -25,7 +27,7 @@ class BaseAlertDialog extends StatelessWidget {
27 fontSize: 20,
28 fontFamily: 'Lato',
29 fontWeight: FontWeight.w600,
28 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
30 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
31 decoration: TextDecoration.none,
32 ),
33 );
@@ -39,7 +41,7 @@ class BaseAlertDialog extends StatelessWidget {
41 fontSize: 16,
42 fontWeight: FontWeight.normal,
43 fontFamily: 'Lato',
42 - color: Theme.of(context).primaryTextTheme!.titleLarge!.color!,
44 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
45 decoration: TextDecoration.none,
46 ),
47 );
@@ -57,10 +59,7 @@ class BaseAlertDialog extends StatelessWidget {
59 onPressed: actionLeft,
60 style: TextButton.styleFrom(
61 backgroundColor: leftActionButtonColor ??
60 - Theme.of(context)
61 - .accentTextTheme!
62 - .bodyLarge!
63 - .decorationColor!,
62 + Theme.of(context).dialogBackgroundColor,
63 shape: const RoundedRectangleBorder(
64 borderRadius: BorderRadius.all(Radius.zero))),
65 child: Text(
@@ -71,24 +70,18 @@ class BaseAlertDialog extends StatelessWidget {
70 fontFamily: 'Lato',
71 fontWeight: FontWeight.w600,
72 color: leftActionButtonTextColor ??
74 - Theme.of(context)
75 - .primaryTextTheme!
76 - .bodyLarge!
77 - .backgroundColor!,
73 + Theme.of(context).extension<AlertTheme>()!.leftButtonTextColor,
74 decoration: TextDecoration.none,
75 ),
76 )),
77 ),
82 - const SectionDivider(),
78 + const VerticalSectionDivider(),
79 Expanded(
80 child: TextButton(
81 onPressed: actionRight,
82 style: TextButton.styleFrom(
83 backgroundColor: rightActionButtonColor ??
88 - Theme.of(context)
89 - .accentTextTheme!
90 - .bodyMedium!
91 - .backgroundColor!,
84 + Theme.of(context).dialogBackgroundColor,
85 shape: const RoundedRectangleBorder(
86 borderRadius: BorderRadius.all(Radius.zero))),
87 child: Text(
@@ -99,10 +92,7 @@ class BaseAlertDialog extends StatelessWidget {
92 fontFamily: 'Lato',
93 fontWeight: FontWeight.w600,
94 color: rightActionButtonTextColor ??
102 - Theme.of(context)
103 - .primaryTextTheme!
104 - .bodyMedium!
105 - .backgroundColor!,
95 + Theme.of(context).primaryColor,
96 decoration: TextDecoration.none,
97 ),
98 )),
@@ -120,7 +110,9 @@ class BaseAlertDialog extends StatelessWidget {
110 child: BackdropFilter(
111 filter: ImageFilter.blur(sigmaX: 3.0, sigmaY: 3.0),
112 child: Container(
123 - decoration: BoxDecoration(color: PaletteDark.darkNightBlue.withOpacity(0.75)),
113 + decoration: BoxDecoration(
114 + color:
115 + Theme.of(context).extension<AlertTheme>()!.backdropColor),
116 child: Center(
117 child: GestureDetector(
118 onTap: () => null,
@@ -128,10 +120,7 @@ class BaseAlertDialog extends StatelessWidget {
120 borderRadius: BorderRadius.all(Radius.circular(30)),
121 child: Container(
122 width: 300,
131 - color: Theme.of(context)
132 - .accentTextTheme!
133 - .titleLarge!
134 - .decorationColor!,
123 + color: Theme.of(context).dialogBackgroundColor,
124 child: Column(
125 mainAxisSize: MainAxisSize.min,
126 children: <Widget>[
@@ -145,7 +134,7 @@ class BaseAlertDialog extends StatelessWidget {
134 isDividerExists
135 ? Padding(
136 padding: EdgeInsets.only(top: 16, bottom: 8),
148 - child: const SectionDivider(),
137 + child: const HorizontalSectionDivider(),
138 )
139 : Offstage(),
140 Padding(
@@ -154,7 +143,7 @@ class BaseAlertDialog extends StatelessWidget {
143 )
144 ],
145 ),
157 - const SectionDivider(),
146 + const HorizontalSectionDivider(),
147 actionButtons(context)
148 ],
149 ),
lib/src/widgets/base_text_form_field.dart
+5 -13
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:flutter/material.dart';
3 import 'package:flutter/services.dart';
4
@@ -78,7 +79,7 @@ class BaseTextFormField extends StatelessWidget {
79 TextStyle(
80 fontSize: 16.0,
81 color: textColor ??
81 - Theme.of(context).primaryTextTheme!.titleLarge!.color!),
82 + Theme.of(context).extension<CakeTextTheme>()!.titleColor),
83 decoration: InputDecoration(
84 prefix: prefix,
85 prefixIcon: prefixIcon,
@@ -92,26 +93,17 @@ class BaseTextFormField extends StatelessWidget {
93 focusedBorder: UnderlineInputBorder(
94 borderSide: BorderSide(
95 color: borderColor ??
95 - Theme.of(context)
96 - .primaryTextTheme!
97 - .titleLarge!
98 - .backgroundColor!,
96 + Theme.of(context).extension<CakeTextTheme>()!.textfieldUnderlineColor,
97 width: borderWidth)),
98 disabledBorder: UnderlineInputBorder(
99 borderSide: BorderSide(
100 color: borderColor ??
103 - Theme.of(context)
104 - .primaryTextTheme!
105 - .titleLarge!
106 - .backgroundColor!,
101 + Theme.of(context).extension<CakeTextTheme>()!.textfieldUnderlineColor,
102 width: borderWidth)),
103 enabledBorder: UnderlineInputBorder(
104 borderSide: BorderSide(
105 color: borderColor ??
111 - Theme.of(context)
112 - .primaryTextTheme!
113 - .titleLarge!
114 - .backgroundColor!,
106 + Theme.of(context).extension<CakeTextTheme>()!.textfieldUnderlineColor,
107 width: borderWidth))),
108 validator: validator,
109 );
lib/src/widgets/blockchain_height_widget.dart
+2 -1
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:cake_wallet/utils/date_picker.dart';
3 import 'package:flutter/material.dart';
4 import 'package:intl/intl.dart';
@@ -81,7 +82,7 @@ class BlockchainHeightState extends State<BlockchainHeightWidget> {
82 fontSize: 16.0,
83 fontWeight: FontWeight.w500,
84 color:
84 - Theme.of(context).primaryTextTheme!.titleLarge!.color!),
85 + Theme.of(context).extension<CakeTextTheme>()!.titleColor),
86 ),
87 ),
88 Row(
lib/src/widgets/cake_scrollbar.dart
+3 -2
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/cake_scrollbar_theme.dart';
2 import 'package:flutter/material.dart';
3
4 class CakeScrollbar extends StatelessWidget {
@@ -28,7 +29,7 @@ class CakeScrollbar extends StatelessWidget {
29 width: width,
30 decoration: BoxDecoration(
31 color: backgroundColor ??
31 - Theme.of(context).textTheme!.bodyMedium!.decorationColor!,
32 + Theme.of(context).extension<CakeScrollbarTheme>()!.trackColor,
33 borderRadius: BorderRadius.all(Radius.circular(3))),
34 child: Stack(
35 children: <Widget>[
@@ -40,7 +41,7 @@ class CakeScrollbar extends StatelessWidget {
41 width: width,
42 decoration: BoxDecoration(
43 color: thumbColor ??
43 - Theme.of(context).textTheme!.bodyMedium!.color!,
44 + Theme.of(context).extension<CakeScrollbarTheme>()!.thumbColor,
45 borderRadius: BorderRadius.all(Radius.circular(3))),
46 ),
47 )
lib/src/widgets/check_box_picker.dart
+9 -21
@@ -1,7 +1,10 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:cake_wallet/palette.dart';
3 import 'package:cake_wallet/utils/responsive_layout_util.dart';
4 import 'package:flutter/material.dart';
5 import 'package:cake_wallet/src/widgets/picker_wrapper_widget.dart';
6 +import 'package:cake_wallet/themes/extensions/filter_theme.dart';
7 +import 'package:cake_wallet/themes/extensions/picker_theme.dart';
8
9 class CheckBoxPicker extends StatefulWidget {
10 CheckBoxPicker({
@@ -53,10 +56,7 @@ class CheckBoxPickerState extends State<CheckBoxPicker> {
56 child: ClipRRect(
57 borderRadius: BorderRadius.all(Radius.circular(30)),
58 child: Container(
56 - color: Theme.of(context)
57 - .accentTextTheme!
58 - .titleLarge!
59 - .color!,
59 + color: Theme.of(context).dialogTheme.backgroundColor,
60 child: ConstrainedBox(
61 constraints: BoxConstraints(
62 maxHeight: MediaQuery.of(context).size.height * 0.65,
@@ -90,20 +90,14 @@ class CheckBoxPickerState extends State<CheckBoxPicker> {
90
91 Widget itemsList() {
92 return Container(
93 - color: Theme.of(context)
94 - .accentTextTheme!
95 - .titleLarge!
96 - .backgroundColor!,
93 + color: Theme.of(context).extension<PickerTheme>()!.dividerColor,
94 child: ListView.separated(
95 padding: EdgeInsets.zero,
96 controller: controller,
97 shrinkWrap: true,
98 separatorBuilder: (context, index) => widget.isSeparated
99 ? Divider(
103 - color: Theme.of(context)
104 - .accentTextTheme!
105 - .titleLarge!
106 - .backgroundColor!,
100 + color: Theme.of(context).extension<PickerTheme>()!.dividerColor,
101 height: 1,
102 )
103 : const SizedBox(),
@@ -122,19 +116,13 @@ class CheckBoxPickerState extends State<CheckBoxPicker> {
116 },
117 child: Container(
118 height: 55,
125 - color: Theme.of(context)
126 - .accentTextTheme!
127 - .titleLarge!
128 - .color!,
119 + color: Theme.of(context).dialogTheme.backgroundColor,
120 padding: EdgeInsets.only(left: 24, right: 24),
121 child: CheckboxListTile(
122 value: item.value,
123 activeColor: item.value
124 ? Palette.blueCraiola
134 - : Theme.of(context)
135 - .accentTextTheme!
136 - .titleMedium!
137 - .decorationColor!,
125 + : Theme.of(context).extension<FilterTheme>()!.checkboxBackgroundColor,
126 checkColor: Colors.white,
127 title: widget.displayItem?.call(item) ??
128 Text(
@@ -145,7 +133,7 @@ class CheckBoxPickerState extends State<CheckBoxPicker> {
133 fontWeight: FontWeight.w600,
134 color: item.isDisabled
135 ? Colors.grey.withOpacity(0.5)
148 - : Theme.of(context).primaryTextTheme!.titleLarge!.color!,
136 + : Theme.of(context).extension<CakeTextTheme>()!.titleColor,
137 decoration: TextDecoration.none,
138 ),
139 ),
lib/src/widgets/checkbox_widget.dart
+7 -3
@@ -1,5 +1,7 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:cake_wallet/palette.dart';
3 import 'package:flutter/material.dart';
4 +import 'package:cake_wallet/themes/extensions/filter_theme.dart';
5
6 class CheckboxWidget extends StatefulWidget {
7 CheckboxWidget({required this.value, required this.caption, required this.onChanged});
@@ -37,7 +39,9 @@ class CheckboxWidgetState extends State<CheckboxWidget> {
39 margin: EdgeInsets.only(right: 10.0),
40 decoration: BoxDecoration(
41 border: Border.all(
40 - color: Theme.of(context).primaryTextTheme.bodySmall!.color!,
42 + color: value
43 + ? Palette.blueCraiola
44 + : Theme.of(context).extension<FilterTheme>()!.checkboxBoundsColor,
45 width: 1.0,
46 ),
47 borderRadius: BorderRadius.all(
@@ -59,12 +63,12 @@ class CheckboxWidgetState extends State<CheckboxWidget> {
63 style: TextStyle(
64 fontWeight: FontWeight.bold,
65 fontSize: 14.0,
62 - color: Theme.of(context).primaryTextTheme.titleLarge!.color!,
66 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
67 ),
68 ),
69 )
70 ],
67 - ),
71 + )
72 );
73 }
74 }
lib/src/widgets/collapsible_standart_list.dart
+14 -68
@@ -3,90 +3,36 @@ import 'package:flutter/material.dart';
3
4 class CollapsibleSectionList extends SectionStandardList {
5 CollapsibleSectionList(
6 - {required BuildContext context,
7 - required int sectionCount,
8 - required int Function(int sectionIndex) itemCounter,
9 - required Widget Function(BuildContext context, int sectionIndex, int itemIndex) itemBuilder,
10 - Color? themeColor,
11 - Color? dividerThemeColor,
12 - Widget Function(BuildContext context, int sectionIndex)? sectionTitleBuilder,
13 - bool hasTopSeparator = false})
6 + {required int sectionCount,
7 + required int Function(int sectionIndex) itemCounter,
8 + required Widget Function(int sectionIndex, int itemIndex) itemBuilder,
9 + Widget Function(int sectionIndex)? sectionTitleBuilder,
10 + bool hasTopSeparator = false})
11 : super(
15 - context: context,
16 - hasTopSeparator: hasTopSeparator,
17 - sectionCount: sectionCount,
18 - itemCounter: itemCounter,
19 - itemBuilder: itemBuilder,
20 - sectionTitleBuilder: sectionTitleBuilder,
21 - themeColor: themeColor,
22 - dividerThemeColor: dividerThemeColor);
12 + hasTopSeparator: hasTopSeparator,
13 + sectionCount: sectionCount,
14 + itemCounter: itemCounter,
15 + itemBuilder: itemBuilder,
16 + sectionTitleBuilder: sectionTitleBuilder);
17
18 @override
25 - List<Widget> transform(
26 - bool hasTopSeparator,
27 - BuildContext context,
28 - int sectionCount,
29 - int Function(int sectionIndex) itemCounter,
30 - Widget Function(BuildContext context, int sectionIndex, int itemIndex) itemBuilder,
31 - Widget Function(BuildContext context, int sectionIndex)? sectionTitleBuilder,
32 - Color? themeColor,
33 - Color? dividerThemeColor) {
34 - final items = <Widget>[];
35 -
36 - for (var sectionIndex = 0; sectionIndex < sectionCount; sectionIndex++) {
37 - final itemCount = itemCounter(sectionIndex);
38 -
39 - items.add(Theme(
40 - data: ThemeData(
41 - textTheme: TextTheme(titleMedium: TextStyle(color: themeColor,fontFamily: 'Lato')),
42 - backgroundColor: dividerThemeColor,
43 - unselectedWidgetColor: themeColor,
44 - accentColor: themeColor)
45 - .copyWith(dividerColor: Colors.transparent),
46 - child: Padding(
47 - padding: const EdgeInsets.only(left: 24.0),
48 - child: ListTileTheme(
49 - contentPadding: EdgeInsets.only(right: 16,top:sectionIndex>0?26:0),
50 - child: ExpansionTile(
51 - textColor: themeColor,
52 - iconColor: themeColor,
53 - title: sectionTitleBuilder == null
54 - ? Container()
55 - : Container(child: buildTitle(items, sectionIndex, context)),
56 - initiallyExpanded: true,
57 - children: buildSection(itemCount, items, sectionIndex, context),
58 - ),
59 - ),
60 - ),
61 - ));
62 -
63 - }
64 -
65 - items.add(StandardListSeparator(padding: EdgeInsets.only(left: 24)));
66 - return items;
67 - }
68 -
69 - @override
70 - Widget buildTitle(
71 - List<Widget> items, int sectionIndex, BuildContext context) {
19 + Widget buildTitle(List<Widget> items, int sectionIndex) {
20 if (sectionTitleBuilder == null) {
21 throw Exception('Cannot to build title. sectionTitleBuilder is null');
22 }
75 - return sectionTitleBuilder!.call(context, sectionIndex);
23 + return sectionTitleBuilder!.call(sectionIndex);
24 }
25
26 @override
79 - List<Widget> buildSection(int itemCount, List<Widget> items, int sectionIndex,
80 - BuildContext context) {
27 + List<Widget> buildSection(int itemCount, List<Widget> items, int sectionIndex) {
28 final List<Widget> section = [];
29
30 for (var itemIndex = 0; itemIndex < itemCount; itemIndex++) {
84 - final item = itemBuilder(context, sectionIndex, itemIndex);
31 + final item = itemBuilder(sectionIndex, itemIndex);
32
33 section.add(StandardListSeparator());
34
35 section.add(item);
89 -
36 }
37 return section;
38 }
lib/src/widgets/dashboard_card_widget.dart
+7 -10
@@ -1,4 +1,7 @@
1 +import 'package:cake_wallet/themes/extensions/balance_page_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart';
3 import 'package:flutter/material.dart';
4 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
5
6 class DashBoardRoundedCardWidget extends StatelessWidget {
7
@@ -26,10 +29,10 @@ class DashBoardRoundedCardWidget extends StatelessWidget {
29 padding: EdgeInsets.all(20),
30 width: double.infinity,
31 decoration: BoxDecoration(
29 - color: Theme.of(context).textTheme!.titleLarge!.backgroundColor!,
32 + color: Theme.of(context).extension<SyncIndicatorTheme>()!.syncedBackgroundColor,
33 borderRadius: BorderRadius.circular(20),
34 border: Border.all(
32 - color: Colors.white.withOpacity(0.20),
35 + color: Theme.of(context).extension<BalancePageTheme>()!.cardBorderColor,
36 ),
37 ),
38 child:
@@ -39,10 +42,7 @@ class DashBoardRoundedCardWidget extends StatelessWidget {
42 Text(
43 title,
44 style: TextStyle(
42 - color: Theme.of(context)
43 - .accentTextTheme!
44 - .displayMedium!
45 - .backgroundColor!,
45 + color: Theme.of(context).extension<DashboardPageTheme>()!.cardTextColor,
46 fontSize: 24,
47 fontWeight: FontWeight.w900,
48 ),
@@ -51,10 +51,7 @@ class DashBoardRoundedCardWidget extends StatelessWidget {
51 Text(
52 subTitle,
53 style: TextStyle(
54 - color: Theme.of(context)
55 - .accentTextTheme!
56 - .displayMedium!
57 - .backgroundColor!,
54 + color: Theme.of(context).extension<DashboardPageTheme>()!.cardTextColor,
55 fontWeight: FontWeight.w500,
56 fontFamily: 'Lato'),
57 )
lib/src/widgets/gradient_background.dart new
+30
@@ -0,0 +1,30 @@
1 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
2 +import 'package:flutter/material.dart';
3 +
4 +class GradientBackground extends StatelessWidget {
5 + const GradientBackground({required this.scaffold});
6 +
7 + final Widget scaffold;
8 +
9 + @override
10 + Widget build(BuildContext context) {
11 + return Container(
12 + decoration: BoxDecoration(
13 + gradient: LinearGradient(
14 + colors: [
15 + Theme.of(context)
16 + .extension<DashboardPageTheme>()!
17 + .firstGradientBackgroundColor,
18 + Theme.of(context)
19 + .extension<DashboardPageTheme>()!
20 + .secondGradientBackgroundColor,
21 + Theme.of(context)
22 + .extension<DashboardPageTheme>()!
23 + .thirdGradientBackgroundColor,
24 + ],
25 + begin: Alignment.topRight,
26 + end: Alignment.bottomLeft,
27 + )),
28 + child: scaffold);
29 + }
30 +}
lib/src/widgets/introducing_card.dart
+5 -9
@@ -1,6 +1,8 @@
1 import 'package:auto_size_text/auto_size_text.dart';
2 +import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart';
3 import 'package:flutter/material.dart';
4 import 'package:cake_wallet/palette.dart';
5 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
6 import 'package:cake_wallet/generated/i18n.dart';
7
8 class IntroducingCard extends StatelessWidget {
@@ -27,7 +29,7 @@ class IntroducingCard extends StatelessWidget {
29 color: borderColor,
30 width: 1,
31 ),
30 - color: Theme.of(context).textTheme!.titleLarge!.backgroundColor!),
32 + color: Theme.of(context).extension<SyncIndicatorTheme>()!.syncedBackgroundColor),
33 child: Row(
34 mainAxisAlignment: MainAxisAlignment.spaceBetween,
35 crossAxisAlignment: CrossAxisAlignment.start,
@@ -45,10 +47,7 @@ class IntroducingCard extends StatelessWidget {
47 fontSize: 24,
48 fontFamily: 'Lato',
49 fontWeight: FontWeight.bold,
48 - color: Theme.of(context)
49 - .accentTextTheme!
50 - .displayMedium!
51 - .backgroundColor!,
50 + color: Theme.of(context).extension<DashboardPageTheme>()!.cardTextColor,
51 height: 1),
52 maxLines: 1,
53 textAlign: TextAlign.center),
@@ -58,10 +57,7 @@ class IntroducingCard extends StatelessWidget {
57 style: TextStyle(
58 fontSize: 12,
59 fontFamily: 'Lato',
61 - color: Theme.of(context)
62 - .accentTextTheme!
63 - .displayMedium!
64 - .backgroundColor!,
60 + color: Theme.of(context).extension<DashboardPageTheme>()!.cardTextColor,
61 height: 1)),
62 ],
63 ),
lib/src/widgets/list_row.dart
+4 -8
@@ -1,5 +1,7 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:flutter/cupertino.dart';
3 import 'package:flutter/material.dart';
4 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
5
6 class ListRow extends StatelessWidget {
7 ListRow(
@@ -30,10 +32,7 @@ class ListRow extends StatelessWidget {
32 style: TextStyle(
33 fontSize: titleFontSize,
34 fontWeight: FontWeight.w500,
33 - color: Theme.of(context)
34 - .primaryTextTheme!
35 - .labelSmall!
36 - .color!),
35 + color: Theme.of(context).extension<TransactionTradeTheme>()!.detailsTitlesColor),
36 textAlign: TextAlign.left),
37 Padding(
38 padding: const EdgeInsets.only(top: 12),
@@ -47,10 +46,7 @@ class ListRow extends StatelessWidget {
46 style: TextStyle(
47 fontSize: valueFontSize,
48 fontWeight: FontWeight.w500,
50 - color: Theme.of(context)
51 - .primaryTextTheme!
52 - .titleLarge!
53 - .color!)),
49 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor)),
50 ),
51 image != null
52 ? Padding(
lib/src/widgets/picker.dart
+29 -53
@@ -7,6 +7,9 @@ import 'package:cake_wallet/utils/responsive_layout_util.dart';
7 import 'package:flutter/material.dart';
8 import 'package:cw_core/currency.dart';
9 import 'package:cake_wallet/src/widgets/picker_wrapper_widget.dart';
10 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
11 +import 'package:cake_wallet/themes/extensions/cake_scrollbar_theme.dart';
12 +import 'package:cake_wallet/themes/extensions/picker_theme.dart';
13
14 class Picker<Item> extends StatefulWidget {
15 Picker({
@@ -40,8 +43,7 @@ class Picker<Item> extends StatefulWidget {
43 final bool Function(Item, String)? matchingCriteria;
44
45 @override
43 - _PickerState<Item> createState() =>
44 - _PickerState<Item>(items, images, onItemSelected);
46 + _PickerState<Item> createState() => _PickerState<Item>(items, images, onItemSelected);
47 }
48
49 class _PickerState<Item> extends State<Picker<Item>> {
@@ -90,8 +92,7 @@ class _PickerState<Item> extends State<Picker<Item>> {
92 setState(() {
93 filteredItems = List.from(items.where((element) {
94 if (widget.selectedAtIndex != items.indexOf(element) &&
93 - (widget.matchingCriteria?.call(element, searchController.text) ??
94 - true)) {
95 + (widget.matchingCriteria?.call(element, searchController.text) ?? true)) {
96 if (images.isNotEmpty) {
97 filteredImages.add(images[items.indexOf(element)]);
98 }
@@ -146,9 +147,7 @@ class _PickerState<Item> extends State<Picker<Item>> {
147 child: ClipRRect(
148 borderRadius: BorderRadius.all(Radius.circular(30)),
149 child: Container(
149 - color: Theme.of(context)
150 - .accentTextTheme.titleLarge!
151 - .color!,
150 + color: Theme.of(context).dialogTheme.backgroundColor,
151 child: ConstrainedBox(
152 constraints: BoxConstraints(
153 maxHeight: containerHeight,
@@ -163,13 +162,10 @@ class _PickerState<Item> extends State<Picker<Item>> {
162 child: SearchBarWidget(searchController: searchController),
163 ),
164 Divider(
166 - color: Theme.of(context)
167 - .accentTextTheme.titleLarge!
168 - .backgroundColor!,
165 + color: Theme.of(context).extension<PickerTheme>()!.dividerColor,
166 height: 1,
167 ),
171 - if (widget.selectedAtIndex != -1)
172 - buildSelectedItem(widget.selectedAtIndex),
168 + if (widget.selectedAtIndex != -1) buildSelectedItem(widget.selectedAtIndex),
169 Flexible(
170 child: Stack(
171 alignment: Alignment.center,
@@ -193,9 +189,8 @@ class _PickerState<Item> extends State<Picker<Item>> {
189 fontWeight: FontWeight.w500,
190 fontFamily: 'Lato',
191 decoration: TextDecoration.none,
196 - color: Theme.of(context)
197 - .primaryTextTheme.titleLarge!
198 - .color!,
192 + color:
193 + Theme.of(context).extension<CakeTextTheme>()!.titleColor,
194 ),
195 ),
196 )
@@ -215,9 +210,7 @@ class _PickerState<Item> extends State<Picker<Item>> {
210
211 Widget itemsList() {
212 return Container(
218 - color: Theme.of(context)
219 - .accentTextTheme.titleLarge!
220 - .backgroundColor!,
213 + color: Theme.of(context).extension<PickerTheme>()!.dividerColor,
214 child: widget.isGridView
215 ? GridView.builder(
216 padding: EdgeInsets.zero,
@@ -237,9 +230,7 @@ class _PickerState<Item> extends State<Picker<Item>> {
230 shrinkWrap: true,
231 separatorBuilder: (context, index) => widget.isSeparated
232 ? Divider(
240 - color: Theme.of(context)
241 - .accentTextTheme.titleLarge!
242 - .backgroundColor!,
233 + color: Theme.of(context).extension<PickerTheme>()!.dividerColor,
234 height: 1,
235 )
236 : const SizedBox(),
@@ -264,9 +255,7 @@ class _PickerState<Item> extends State<Picker<Item>> {
255 },
256 child: Container(
257 height: 55,
267 - color: Theme.of(context)
268 - .accentTextTheme.titleLarge!
269 - .color!,
258 + color: Theme.of(context).dialogTheme.backgroundColor,
259 padding: EdgeInsets.symmetric(horizontal: 24),
260 child: Row(
261 mainAxisSize: MainAxisSize.max,
@@ -287,9 +276,7 @@ class _PickerState<Item> extends State<Picker<Item>> {
276 fontSize: 14,
277 fontFamily: 'Lato',
278 fontWeight: FontWeight.w600,
290 - color: Theme.of(context)
291 - .primaryTextTheme.titleLarge!
292 - .color!,
279 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
280 decoration: TextDecoration.none,
281 ),
282 ),
@@ -304,19 +291,17 @@ class _PickerState<Item> extends State<Picker<Item>> {
291 child: Text(
292 tag,
293 style: TextStyle(
307 - fontSize: 7.0,
308 - fontFamily: 'Lato',
309 - color: Theme.of(context)
310 - .textTheme.bodyMedium!
311 - .color!),
294 + fontSize: 7.0,
295 + fontFamily: 'Lato',
296 + color:
297 + Theme.of(context).extension<CakeScrollbarTheme>()!.thumbColor,
298 + ),
299 ),
300 ),
301 decoration: BoxDecoration(
302 borderRadius: BorderRadius.circular(6.0),
303 //border: Border.all(color: ),
317 - color: Theme.of(context)
318 - .textTheme.bodyMedium!
319 - .decorationColor!,
304 + color: Theme.of(context).extension<CakeScrollbarTheme>()!.trackColor,
305 ),
306 ),
307 ),
@@ -344,9 +329,7 @@ class _PickerState<Item> extends State<Picker<Item>> {
329 },
330 child: Container(
331 height: 55,
347 - color: Theme.of(context)
348 - .accentTextTheme.titleLarge!
349 - .color!,
332 + color: Theme.of(context).dialogTheme.backgroundColor,
333 padding: EdgeInsets.symmetric(horizontal: 24),
334 child: Row(
335 mainAxisSize: MainAxisSize.max,
@@ -367,9 +350,7 @@ class _PickerState<Item> extends State<Picker<Item>> {
350 fontSize: 16,
351 fontFamily: 'Lato',
352 fontWeight: FontWeight.w700,
370 - color: Theme.of(context)
371 - .primaryTextTheme.titleLarge!
372 - .color!,
353 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
354 decoration: TextDecoration.none,
355 ),
356 ),
@@ -384,19 +365,17 @@ class _PickerState<Item> extends State<Picker<Item>> {
365 child: Text(
366 tag,
367 style: TextStyle(
387 - fontSize: 7.0,
388 - fontFamily: 'Lato',
389 - color: Theme.of(context)
390 - .textTheme.bodyMedium!
391 - .color!),
368 + fontSize: 7.0,
369 + fontFamily: 'Lato',
370 + color:
371 + Theme.of(context).extension<CakeScrollbarTheme>()!.thumbColor,
372 + ),
373 ),
374 ),
375 decoration: BoxDecoration(
376 borderRadius: BorderRadius.circular(6.0),
377 //border: Border.all(color: ),
397 - color: Theme.of(context)
398 - .textTheme.bodyMedium!
399 - .decorationColor!,
378 + color: Theme.of(context).extension<CakeScrollbarTheme>()!.trackColor,
379 ),
380 ),
381 ),
@@ -404,10 +383,7 @@ class _PickerState<Item> extends State<Picker<Item>> {
383 ),
384 ),
385 ),
407 - Icon(Icons.check_circle,
408 - color: Theme.of(context)
409 - .accentTextTheme.bodyLarge!
410 - .color!),
386 + Icon(Icons.check_circle, color: Theme.of(context).primaryColor),
387 ],
388 ),
389 ),
lib/src/widgets/picker_inner_wrapper_widget.dart
+3 -2
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/account_list_theme.dart';
2 import 'package:cake_wallet/utils/responsive_layout_util.dart';
3 import 'package:flutter/material.dart';
4 import 'package:cake_wallet/src/widgets/picker_wrapper_widget.dart';
@@ -44,7 +45,7 @@ class PickerInnerWrapperWidget extends StatelessWidget {
45 child: ClipRRect(
46 borderRadius: BorderRadius.all(Radius.circular(14)),
47 child: Container(
47 - color: Theme.of(context).textTheme.displayLarge!.decorationColor!,
48 + color: Theme.of(context).dialogTheme.backgroundColor,
49 child: ConstrainedBox(
50 constraints: BoxConstraints(
51 maxHeight:
@@ -72,7 +73,7 @@ class PickerInnerWrapperWidget extends StatelessWidget {
73 child: ClipRRect(
74 borderRadius: BorderRadius.all(Radius.circular(14)),
75 child: Container(
75 - color: Theme.of(context).textTheme.displayLarge!.decorationColor!,
76 + color: Theme.of(context).dialogTheme.backgroundColor,
77 child: ConstrainedBox(
78 constraints: BoxConstraints(
79 maxHeight: containerHeight,
lib/src/widgets/search_bar_widget.dart
+10 -3
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/picker_theme.dart';
2 import 'package:flutter/material.dart';
3 import 'package:cake_wallet/generated/i18n.dart';
4
@@ -16,12 +17,18 @@ class SearchBarWidget extends StatelessWidget {
17 Widget build(BuildContext context) {
18 return TextFormField(
19 controller: searchController,
19 - style: TextStyle(color: Theme.of(context).primaryTextTheme!.titleLarge!.color!),
20 + style: TextStyle(
21 + color: Theme.of(context).extension<PickerTheme>()!.searchTextColor),
22 decoration: InputDecoration(
23 hintText: hintText ?? S.of(context).search_currency,
22 - prefixIcon: Image.asset("assets/images/search_icon.png"),
24 + hintStyle: TextStyle(
25 + color: Theme.of(context).extension<PickerTheme>()!.searchHintColor),
26 + prefixIcon: Image.asset("assets/images/search_icon.png",
27 + color: Theme.of(context).extension<PickerTheme>()!.searchIconColor),
28 filled: true,
24 - fillColor: Theme.of(context).accentTextTheme!.displaySmall!.color!,
29 + fillColor: Theme.of(context)
30 + .extension<PickerTheme>()!
31 + .searchBackgroundFillColor,
32 alignLabelWithHint: false,
33 contentPadding: const EdgeInsets.symmetric(vertical: 4, horizontal: 16),
34 enabledBorder: OutlineInputBorder(
lib/src/widgets/section_divider.dart
+24 -3
@@ -1,13 +1,34 @@
1 import 'package:flutter/material.dart';
2
3 class SectionDivider extends StatelessWidget {
4 - const SectionDivider();
4 + const SectionDivider({required this.direction});
5 +
6 + final Axis direction;
7
8 @override
9 Widget build(BuildContext context) {
10 return Container(
9 - height: 1,
11 + height: direction == Axis.horizontal ? 1 : null,
12 + width: direction == Axis.vertical ? 1 : null,
13 color: Theme.of(context).dividerColor,
14 );
15 }
13 -}
\ No newline at end of file
16 +}
17 +
18 +class HorizontalSectionDivider extends StatelessWidget {
19 + const HorizontalSectionDivider();
20 +
21 + @override
22 + Widget build(BuildContext context) {
23 + return SectionDivider(direction: Axis.horizontal);
24 + }
25 +}
26 +
27 +class VerticalSectionDivider extends StatelessWidget {
28 + const VerticalSectionDivider();
29 +
30 + @override
31 + Widget build(BuildContext context) {
32 + return SectionDivider(direction: Axis.vertical);
33 + }
34 +}
lib/src/widgets/seed_widget.dart
+6 -16
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:cw_core/wallet_type.dart';
3 import 'package:cake_wallet/src/widgets/validable_annotated_editable_text.dart';
4 import 'package:cake_wallet/src/widgets/blockchain_height_widget.dart';
@@ -10,6 +11,7 @@ import 'package:cake_wallet/src/widgets/primary_button.dart';
11 import 'package:cake_wallet/entities/mnemonic_item.dart';
12 import 'package:cake_wallet/generated/i18n.dart';
13 import 'package:flutter/widgets.dart';
14 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
15
16 class SeedWidget extends StatefulWidget {
17 SeedWidget({
@@ -89,10 +91,7 @@ class SeedWidgetState extends State<SeedWidget> {
91 cursorColor: Colors.blue,
92 backgroundCursorColor: Colors.blue,
93 validStyle: TextStyle(
92 - color: Theme.of(context)
93 - .primaryTextTheme!
94 - .titleLarge!
95 - .color!,
94 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
95 backgroundColor: Colors.transparent,
96 fontWeight: FontWeight.normal,
97 fontSize: 16),
@@ -105,10 +104,7 @@ class SeedWidgetState extends State<SeedWidget> {
104 controller: controller,
105 words: words,
106 textStyle: TextStyle(
108 - color: Theme.of(context)
109 - .primaryTextTheme!
110 - .titleLarge!
111 - .color!,
107 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
108 backgroundColor: Colors.transparent,
109 fontWeight: FontWeight.normal,
110 fontSize: 16),
@@ -128,19 +124,13 @@ class SeedWidgetState extends State<SeedWidget> {
124 borderRadius:
125 BorderRadius.all(Radius.circular(6))),
126 child: Image.asset('assets/images/paste_ios.png',
131 - color: Theme.of(context)
132 - .primaryTextTheme!
133 - .headlineMedium!
134 - .decorationColor!)),
127 + color: Theme.of(context).extension<SendPageTheme>()!.textFieldButtonIconColor)),
128 )))
129 ]),
130 Container(
131 margin: EdgeInsets.only(top: 15),
132 height: 1.0,
140 - color: Theme.of(context)
141 - .primaryTextTheme!
142 - .titleLarge!
143 - .backgroundColor!),
133 + color: Theme.of(context).extension<CakeTextTheme>()!.textfieldUnderlineColor),
134 ]));
135 }
136
lib/src/widgets/setting_action_button.dart
+7 -4
@@ -1,4 +1,5 @@
1 import 'package:cake_wallet/palette.dart';
2 +import 'package:cake_wallet/themes/extensions/menu_theme.dart';
3 import 'package:flutter/material.dart';
4
5 class SettingActionButton extends StatelessWidget {
@@ -29,15 +30,15 @@ class SettingActionButton extends StatelessWidget {
30 @override
31 Widget build(BuildContext context) {
32 Color? color = isSelected
32 - ? Theme.of(context).textTheme!.displaySmall!.color
33 + ? Theme.of(context).extension<CakeMenuTheme>()!.settingTitleColor
34 : selectionActive
35 ? Palette.darkBlue
35 - : Theme.of(context).textTheme!.displaySmall!.color;
36 + : Theme.of(context).extension<CakeMenuTheme>()!.settingTitleColor;
37 return InkWell(
38 onTap: onTap,
39 hoverColor: Colors.transparent,
40 child: Container(
40 - height: tileHeight,
41 + height: tileHeight,
42 padding: isLastTile
43 ? EdgeInsets.only(
44 left: 24,
@@ -54,7 +55,9 @@ class SettingActionButton extends StatelessWidget {
55 image,
56 height: 16,
57 width: 16,
57 - color: Palette.darkBlue,
58 + color: Theme.of(context)
59 + .extension<CakeMenuTheme>()!
60 + .settingActionsIconColor,
61 ),
62 SizedBox(width: 16),
63 Expanded(
lib/src/widgets/standard_checkbox.dart
+7 -7
@@ -1,5 +1,5 @@
1 -import 'dart:ui';
2 -import 'package:flutter/cupertino.dart';
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/filter_theme.dart';
3 import 'package:flutter/material.dart';
4
5 class StandardCheckbox extends StatelessWidget {
@@ -21,12 +21,12 @@ class StandardCheckbox extends StatelessWidget {
21 @override
22 Widget build(BuildContext context) {
23 final baseGradient = LinearGradient(colors: [
24 - Theme.of(context).primaryTextTheme!.titleMedium!.color!,
25 - Theme.of(context).primaryTextTheme!.titleMedium!.decorationColor!,
24 + Theme.of(context).extension<FilterTheme>()!.checkboxFirstGradientColor,
25 + Theme.of(context).extension<FilterTheme>()!.checkboxSecondGradientColor,
26 ], begin: Alignment.centerLeft, end: Alignment.centerRight);
27
28 final boxBorder = Border.all(
29 - color: borderColor ?? Theme.of(context).primaryTextTheme!.bodySmall!.color!, width: 1.0);
29 + color: borderColor ?? Theme.of(context).extension<CakeTextTheme>()!.secondaryTextColor, width: 1.0);
30
31 final checkedBoxDecoration = BoxDecoration(
32 gradient: gradientBackground ? baseGradient : null,
@@ -49,7 +49,7 @@ class StandardCheckbox extends StatelessWidget {
49 child: value
50 ? Icon(
51 Icons.check,
52 - color: iconColor ?? Colors.blue,
52 + color: iconColor ?? Theme.of(context).primaryColor,
53 size: 20.0,
54 )
55 : Offstage(),
@@ -60,7 +60,7 @@ class StandardCheckbox extends StatelessWidget {
60 child: Text(
61 caption,
62 style: TextStyle(
63 - fontSize: 16.0, color: Theme.of(context).primaryTextTheme!.titleLarge!.color!),
63 + fontSize: 16.0, color: Theme.of(context).extension<CakeTextTheme>()!.titleColor),
64 ))
65 ],
66 ),
lib/src/widgets/standard_list.dart
+77 -103
@@ -1,11 +1,10 @@
1 -import 'package:cake_wallet/palette.dart';
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:cake_wallet/src/widgets/standard_list_card.dart';
3 import 'package:cake_wallet/src/widgets/standard_list_status_row.dart';
4 import 'package:flutter/material.dart';
5
6 class StandardListRow extends StatelessWidget {
7 - StandardListRow(
8 - {required this.title, required this.isSelected, this.onTap, this.decoration});
7 + StandardListRow({required this.title, required this.isSelected, this.onTap, this.decoration});
8
9 final String title;
10 final bool isSelected;
@@ -18,50 +17,54 @@ class StandardListRow extends StatelessWidget {
17 final trailing = buildTrailing(context);
18
19 return InkWell(
21 - onTap: () => onTap?.call(context),
22 - child: Container(
23 - height: 56,
24 - padding: EdgeInsets.only(left: 24, right: 24),
25 - decoration: decoration ?? BoxDecoration(
26 - color: _backgroundColor(context),
20 + onTap: () => onTap?.call(context),
21 + child: Container(
22 + height: 56,
23 + padding: EdgeInsets.only(left: 24, right: 24),
24 + decoration: decoration ??
25 + BoxDecoration(
26 + color: Theme.of(context).colorScheme.background,
27 ),
28 - child: Row(
29 - mainAxisAlignment: MainAxisAlignment.spaceBetween,
30 - children: <Widget>[
31 - if (leading != null) leading,
32 - buildCenter(context, hasLeftOffset: leading != null),
33 - if (trailing != null) trailing
34 - ])));
28 + child: Row(
29 + mainAxisAlignment: MainAxisAlignment.spaceBetween,
30 + children: <Widget>[
31 + if (leading != null) leading,
32 + buildCenter(context, hasLeftOffset: leading != null),
33 + if (trailing != null) trailing,
34 + ],
35 + ),
36 + ),
37 + );
38 }
39
40 Widget? buildLeading(BuildContext context) => null;
41
42 Widget buildCenter(BuildContext context, {required bool hasLeftOffset}) {
40 - // FIXME: find better way for keep text on left side.
43 return Expanded(
42 - child: Row(mainAxisAlignment: MainAxisAlignment.start, children: [
43 - if (hasLeftOffset) SizedBox(width: 10),
44 - Expanded(
45 - child: Text(title,
46 - style: TextStyle(
44 + child: Row(
45 + mainAxisAlignment: MainAxisAlignment.start,
46 + children: [
47 + if (hasLeftOffset) SizedBox(width: 10),
48 + Expanded(
49 + child: Text(
50 + title,
51 + style: TextStyle(
52 fontSize: 14,
53 fontWeight: FontWeight.normal,
54 color: titleColor(context),
55 + ),
56 ),
51 - ),
52 - )
53 - ]));
57 + )
58 + ],
59 + ),
60 + );
61 }
62
63 Widget? buildTrailing(BuildContext context) => null;
64
65 Color titleColor(BuildContext context) => isSelected
59 - ? Palette.blueCraiola
60 - : Theme.of(context).primaryTextTheme.titleLarge!.color!;
61 -
62 - Color _backgroundColor(BuildContext context) {
63 - return Theme.of(context).colorScheme.background;
64 - }
66 + ? Theme.of(context).primaryColor
67 + : Theme.of(context).extension<CakeTextTheme>()!.titleColor;
68 }
69
70 class SectionHeaderListRow extends StatelessWidget {
@@ -69,15 +72,12 @@ class SectionHeaderListRow extends StatelessWidget {
72 Widget build(BuildContext context) => Column(children: [
73 StandardListSeparator(padding: EdgeInsets.only(left: 24)),
74 Container(
72 - width: double.infinity,
73 - height: 40,
74 - color: Theme.of(context).colorScheme.background),
75 + width: double.infinity, height: 40, color: Theme.of(context).colorScheme.background),
76 //StandardListSeparator(padding: EdgeInsets.only(left: 24))
77 ]);
78 }
79
80 class StandardListSeparator extends StatelessWidget {
80 -
81 const StandardListSeparator({this.padding, this.height = 1});
82
83 final EdgeInsets? padding;
@@ -90,11 +90,7 @@ class StandardListSeparator extends StatelessWidget {
90 padding: padding,
91 color: Theme.of(context).colorScheme.background,
92 child: Container(
93 - height: height,
94 - color: Theme.of(context)
95 - .primaryTextTheme
96 - .titleLarge
97 - ?.backgroundColor));
93 + height: height, color: Theme.of(context).primaryTextTheme.titleLarge?.backgroundColor));
94 }
95 }
96
@@ -107,11 +103,9 @@ class StandardList extends StatelessWidget {
103 @override
104 Widget build(BuildContext context) {
105 return ListView.separated(
110 - separatorBuilder: (_, __) =>
111 - StandardListSeparator(padding: EdgeInsets.only(left: 24)),
106 + separatorBuilder: (_, __) => StandardListSeparator(padding: EdgeInsets.only(left: 24)),
107 itemCount: itemCount,
108 itemBuilder: itemBuilder);
114 -
109 }
110 }
111
@@ -123,51 +117,29 @@ class SectionStandardListItem {
117 }
118
119 class SectionStandardList extends StatelessWidget {
126 - SectionStandardList(
127 - {required this.itemCounter,
128 - required this.itemBuilder,
129 - required this.sectionCount,
130 - required BuildContext context,
131 - this.dividerPadding = const EdgeInsets.only(left: 24),
132 - this.themeColor,
133 - this.dividerThemeColor,
134 - this.sectionTitleBuilder,
135 - this.hasTopSeparator = false,})
136 - : totalRows = [] {
137 - totalRows.addAll(transform(
138 - hasTopSeparator,
139 - context,
140 - sectionCount,
141 - itemCounter,
142 - itemBuilder,
143 - sectionTitleBuilder,
144 - themeColor,
145 - dividerThemeColor));
146 - }
120 + SectionStandardList({
121 + required this.itemCounter,
122 + required this.itemBuilder,
123 + required this.sectionCount,
124 + this.dividerPadding = const EdgeInsets.only(left: 24),
125 + this.sectionTitleBuilder,
126 + this.hasTopSeparator = false,
127 + }) : totalRows = [];
128
129 final int sectionCount;
130 final bool hasTopSeparator;
131 final int Function(int sectionIndex) itemCounter;
151 - final Widget Function(BuildContext context, int sectionIndex, int itemIndex)
152 - itemBuilder;
153 - final Widget Function(BuildContext context, int sectionIndex)?
154 - sectionTitleBuilder;
132 + final Widget Function(int sectionIndex, int itemIndex) itemBuilder;
133 + final Widget Function(int sectionIndex)? sectionTitleBuilder;
134 final List<Widget> totalRows;
156 - final Color? themeColor;
157 - final Color? dividerThemeColor;
135 final EdgeInsets dividerPadding;
136
137 List<Widget> transform(
138 bool hasTopSeparator,
162 - BuildContext context,
139 int sectionCount,
140 int Function(int sectionIndex) itemCounter,
165 - Widget Function(BuildContext context, int sectionIndex, int itemIndex)
166 - itemBuilder,
167 - Widget Function(BuildContext context, int sectionIndex)?
168 - sectionTitleBuilder,
169 - Color? themeColor,
170 - Color? dividerThemeColor) {
141 + Widget Function(int sectionIndex, int itemIndex) itemBuilder,
142 + Widget Function(int sectionIndex)? sectionTitleBuilder) {
143 final items = <Widget>[];
144
145 for (var sectionIndex = 0; sectionIndex < sectionCount; sectionIndex++) {
@@ -176,12 +148,12 @@ class SectionStandardList extends StatelessWidget {
148 }
149
150 if (sectionTitleBuilder != null) {
179 - items.add(buildTitle(items, sectionIndex, context));
151 + items.add(buildTitle(items, sectionIndex));
152 }
153
154 final itemCount = itemCounter(sectionIndex);
155
184 - items.addAll(buildSection(itemCount, items, sectionIndex, context));
156 + items.addAll(buildSection(itemCount, items, sectionIndex));
157
158 items.add(sectionIndex + 1 != sectionCount
159 ? SectionHeaderListRow()
@@ -191,21 +163,19 @@ class SectionStandardList extends StatelessWidget {
163 return items;
164 }
165
194 - Widget buildTitle(
195 - List<Widget> items, int sectionIndex, BuildContext context) {
166 + Widget buildTitle(List<Widget> items, int sectionIndex) {
167 if (sectionTitleBuilder == null) {
168 throw Exception('Cannot to build title. sectionTitleBuilder is null');
169 }
170
200 - return sectionTitleBuilder!.call(context, sectionIndex);
171 + return sectionTitleBuilder!.call(sectionIndex);
172 }
173
203 - List<Widget> buildSection(int itemCount, List<Widget> items, int sectionIndex,
204 - BuildContext context) {
174 + List<Widget> buildSection(int itemCount, List<Widget> items, int sectionIndex) {
175 final List<Widget> section = [];
176
177 for (var itemIndex = 0; itemIndex < itemCount; itemIndex++) {
208 - final item = itemBuilder(context, sectionIndex, itemIndex);
178 + final item = itemBuilder(sectionIndex, itemIndex);
179
180 section.add(item);
181 }
@@ -214,29 +184,33 @@ class SectionStandardList extends StatelessWidget {
184
185 @override
186 Widget build(BuildContext context) {
187 + totalRows.clear();
188 + totalRows.addAll(
189 + transform(hasTopSeparator, sectionCount, itemCounter, itemBuilder, sectionTitleBuilder));
190 +
191 return ListView.separated(
218 - separatorBuilder: (_, index) {
219 - final row = totalRows[index];
192 + separatorBuilder: (_, index) {
193 + final row = totalRows[index];
194
221 - if (row is StandardListSeparator || row is SectionHeaderListRow) {
222 - return Container();
223 - }
195 + if (row is StandardListSeparator || row is SectionHeaderListRow) {
196 + return Container();
197 + }
198
225 - if (row is StandardListStatusRow || row is TradeDetailsStandardListCard) {
226 - return Container();
227 - }
199 + if (row is StandardListStatusRow || row is TradeDetailsStandardListCard) {
200 + return Container();
201 + }
202
229 - final nextRow = totalRows[index + 1];
203 + final nextRow = totalRows[index + 1];
204
231 - // If current row is pre last and last row is separator.
232 - if (nextRow is StandardListSeparator ||
233 - nextRow is SectionHeaderListRow) {
234 - return Container();
235 - }
205 + // If current row is pre last and last row is separator.
206 + if (nextRow is StandardListSeparator || nextRow is SectionHeaderListRow) {
207 + return Container();
208 + }
209
237 - return StandardListSeparator(padding: dividerPadding);
238 - },
239 - itemCount: totalRows.length,
240 - itemBuilder: (_, index) => totalRows[index]);
210 + return StandardListSeparator(padding: dividerPadding);
211 + },
212 + itemCount: totalRows.length,
213 + itemBuilder: (_, index) => totalRows[index],
214 + );
215 }
216 }
lib/src/widgets/standard_list_card.dart
+3 -2
@@ -1,4 +1,5 @@
1 import 'package:cake_wallet/palette.dart';
2 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
3 import 'package:flutter/material.dart';
4 import 'package:cake_wallet/themes/theme_base.dart';
5
@@ -21,8 +22,8 @@ class TradeDetailsStandardListCard extends StatelessWidget {
22 final darkTheme = currentTheme == ThemeType.dark;
23
24 final baseGradient = LinearGradient(colors: [
24 - Theme.of(context).primaryTextTheme!.titleSmall!.color!,
25 - Theme.of(context).primaryTextTheme!.titleSmall!.decorationColor!,
25 + Theme.of(context).extension<ExchangePageTheme>()!.firstGradientTopPanelColor,
26 + Theme.of(context).extension<ExchangePageTheme>()!.secondGradientTopPanelColor,
27 ], begin: Alignment.centerLeft, end: Alignment.centerRight);
28
29 final gradient = LinearGradient(colors: [
lib/src/widgets/standard_list_status_row.dart
+6 -6
@@ -1,7 +1,10 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:cake_wallet/palette.dart';
3 import 'package:cake_wallet/src/screens/dashboard/widgets/sync_indicator_icon.dart';
4 import 'package:flutter/cupertino.dart';
5 import 'package:flutter/material.dart';
6 +import 'package:cake_wallet/themes/extensions/address_theme.dart';
7 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
8
9 class StandardListStatusRow extends StatelessWidget {
10 StandardListStatusRow({required this.title, required this.value});
@@ -24,13 +27,13 @@ class StandardListStatusRow extends StatelessWidget {
27 style: TextStyle(
28 fontSize: 14,
29 fontWeight: FontWeight.w500,
27 - color: Theme.of(context).primaryTextTheme!.labelSmall!.color!),
30 + color: Theme.of(context).extension<TransactionTradeTheme>()!.detailsTitlesColor),
31 textAlign: TextAlign.left),
32 Padding(
33 padding: const EdgeInsets.only(top: 12),
34 child: Container(
35 decoration: BoxDecoration(
33 - color: Theme.of(context).accentTextTheme!.displaySmall!.color!,
36 + color: Theme.of(context).extension<AddressTheme>()!.actionButtonColor,
37 borderRadius: BorderRadius.circular(30.0),
38 ),
39 child: Padding(
@@ -50,10 +53,7 @@ class StandardListStatusRow extends StatelessWidget {
53 style: TextStyle(
54 fontSize: 16,
55 fontWeight: FontWeight.w500,
53 - color: Theme.of(context)
54 - .primaryTextTheme!
55 - .titleLarge!
56 - .color!))
56 + color: Theme.of(context).extension<CakeTextTheme>()!.titleColor))
57 ],
58 ),
59 ),
lib/src/widgets/standard_switch.dart
+2 -8
@@ -24,14 +24,8 @@ class StandardSwitchState extends State<StandardSwitch> {
24 height: 28,
25 decoration: BoxDecoration(
26 color: widget.value
27 - ? Theme.of(context)
28 - .accentTextTheme!
29 - .bodyLarge!
30 - .color!
31 - : Theme.of(context)
32 - .accentTextTheme!
33 - .displayLarge!
34 - .color!,
27 + ? Theme.of(context).primaryColor
28 + : Theme.of(context).disabledColor,
29 borderRadius: BorderRadius.all(Radius.circular(14.0))),
30 child: Container(
31 width: 24.0,
lib/src/widgets/template_tile.dart
+7 -3
@@ -1,5 +1,7 @@
1 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
2 import 'package:flutter/material.dart';
3 import 'package:cake_wallet/palette.dart';
4 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
5
6 class TemplateTile extends StatefulWidget {
7 TemplateTile({
@@ -49,7 +51,9 @@ class TemplateTileState extends State<TemplateTile> {
51
52 @override
53 Widget build(BuildContext context) {
52 - final color = isRemovable ? Colors.white : Theme.of(context).primaryTextTheme!.titleLarge!.color!;
54 + final color = isRemovable
55 + ? Colors.white
56 + : Theme.of(context).extension<SendPageTheme>()!.templateTitleColor;
57 final toIcon = Image.asset('assets/images/to_icon.png', color: color);
58
59 final content = Row(
@@ -109,7 +113,7 @@ class TemplateTileState extends State<TemplateTile> {
113 child: Container(
114 height: 40,
115 padding: EdgeInsets.only(left: 24, right: 24),
112 - color: Theme.of(context).primaryTextTheme!.displayMedium!.decorationColor!,
116 + color: Theme.of(context).extension<SendPageTheme>()!.templateBackgroundColor,
117 child: content,
118 ),
119 ),
@@ -154,4 +158,4 @@ class TemplateTileState extends State<TemplateTile> {
158
159 return isRemovable ? removableTile : tile;
160 }
157 -}
\ No newline at end of file
161 +}
lib/src/widgets/trail_button.dart
+2 -4
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
2 import 'package:flutter/material.dart';
3 import 'package:cake_wallet/palette.dart';
4
@@ -24,10 +25,7 @@ class TrailButton extends StatelessWidget {
25 caption,
26 style: TextStyle(
27 color: textColor ??
27 - Theme.of(context)
28 - .accentTextTheme!
29 - .displayLarge!
30 - .decorationColor!,
28 + Theme.of(context).extension<ExchangePageTheme>()!.hintTextColor,
29 fontWeight: FontWeight.w600,
30 fontSize: 14),
31 ),
lib/themes/bitcoin_dark_theme.dart new
+14
@@ -0,0 +1,14 @@
1 +import 'package:cake_wallet/generated/i18n.dart';
2 +import 'package:cake_wallet/palette.dart';
3 +import 'package:cake_wallet/themes/monero_dark_theme.dart';
4 +import 'package:flutter/material.dart';
5 +
6 +class BitcoinDarkTheme extends MoneroDarkTheme {
7 + BitcoinDarkTheme({required int raw}) : super(raw: raw);
8 +
9 + @override
10 + String get title => S.current.bitcoin_dark_theme;
11 + @override
12 + Color get primaryColor => Palette.bitcoinOrange;
13 +}
14 +
lib/themes/bitcoin_light_theme.dart new
+13
@@ -0,0 +1,13 @@
1 +import 'package:cake_wallet/generated/i18n.dart';
2 +import 'package:cake_wallet/palette.dart';
3 +import 'package:cake_wallet/themes/monero_light_theme.dart';
4 +import 'package:flutter/material.dart';
5 +
6 +class BitcoinLightTheme extends MoneroLightTheme {
7 + BitcoinLightTheme({required int raw}) : super(raw: raw);
8 +
9 + @override
10 + String get title => S.current.bitcoin_light_theme;
11 + @override
12 + Color get primaryColor => Palette.bitcoinOrange;
13 +}
lib/themes/bright_theme.dart
+110 -259
@@ -1,275 +1,126 @@
1 +import 'package:cake_wallet/themes/extensions/balance_page_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
4 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
5 +import 'package:cake_wallet/themes/extensions/filter_theme.dart';
6 +import 'package:cake_wallet/themes/extensions/indicator_dot_theme.dart';
7 +import 'package:cake_wallet/themes/extensions/menu_theme.dart';
8 +import 'package:cake_wallet/themes/extensions/new_wallet_theme.dart';
9 +import 'package:cake_wallet/themes/extensions/order_theme.dart';
10 +import 'package:cake_wallet/themes/extensions/placeholder_theme.dart';
11 +import 'package:cake_wallet/themes/extensions/qr_code_theme.dart';
12 +import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
13 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
14 +import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart';
15 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
16 +import 'package:cake_wallet/themes/extensions/wallet_list_theme.dart';
17 +import 'package:cake_wallet/themes/light_theme.dart';
18 import 'package:cake_wallet/themes/theme_base.dart';
19 import 'package:cake_wallet/generated/i18n.dart';
20 import 'package:cake_wallet/palette.dart';
21 import 'package:flutter/material.dart';
22
6 -class BrightTheme extends ThemeBase {
23 +class BrightTheme extends LightTheme {
24 BrightTheme({required int raw}) : super(raw: raw);
25
26 @override
27 String get title => S.current.bright_theme;
11 -
28 @override
29 ThemeType get type => ThemeType.bright;
30 + @override
31 + Color get primaryColor => Palette.moderateSlateBlue;
32 + @override
33 + Color get containerColor => Palette.moderateLavender;
34 +
35 + @override
36 + DashboardPageTheme get dashboardPageTheme =>
37 + super.dashboardPageTheme.copyWith(
38 + firstGradientBackgroundColor: Palette.blueCraiola,
39 + secondGradientBackgroundColor: Palette.pinkFlamingo,
40 + thirdGradientBackgroundColor: Palette.redHat,
41 + pageTitleTextColor: Colors.white,
42 + mainActionsIconColor: Colors.white,
43 + textColor: Colors.white,
44 + cardTextColor: Colors.white,
45 + indicatorDotTheme: IndicatorDotTheme(
46 + indicatorColor: Colors.white.withOpacity(0.5),
47 + activeIndicatorColor: Colors.white));
48 +
49 + @override
50 + SyncIndicatorTheme get syncIndicatorStyle =>
51 + super.syncIndicatorStyle.copyWith(
52 + textColor: Colors.white,
53 + syncedBackgroundColor: Colors.white.withOpacity(0.2),
54 + notSyncedBackgroundColor: Colors.white.withOpacity(0.15));
55 +
56 + @override
57 + ExchangePageTheme get exchangePageTheme => super.exchangePageTheme.copyWith(
58 + secondGradientBottomPanelColor: Palette.pinkFlamingo.withOpacity(0.7),
59 + firstGradientBottomPanelColor: Palette.blueCraiola.withOpacity(0.7),
60 + secondGradientTopPanelColor: Palette.pinkFlamingo,
61 + firstGradientTopPanelColor: Palette.blueCraiola);
62 +
63 + @override
64 + NewWalletTheme get newWalletTheme => super.newWalletTheme.copyWith(
65 + hintTextColor: Palette.darkGray,
66 + underlineColor: Palette.periwinkleCraiola);
67 +
68 + @override
69 + BalancePageTheme get balancePageTheme => super
70 + .balancePageTheme
71 + .copyWith(labelTextColor: Colors.white.withOpacity(0.5));
72 +
73 + @override
74 + CakeMenuTheme get menuTheme =>
75 + super.menuTheme.copyWith(headerSecondGradientColor: Palette.pinkFlamingo);
76
15 - ThemeData theme = ThemeData(
16 - fontFamily: 'Lato',
17 - brightness: Brightness.light,
18 - scaffoldBackgroundColor: Palette.pinkFlamingo, // second gradient color
19 - primaryColor: Palette.redHat, // third gradient color
20 - indicatorColor: Colors.white.withOpacity(0.5), // page indicator
21 - hoverColor: Colors.white, // amount hint text (receive page)
22 - dividerColor: Palette.paleBlue,
23 - hintColor: Palette.gray,
24 - textTheme: TextTheme(
25 - // title -> titleLarge
26 - titleLarge: TextStyle(
27 - color: Colors.white, // sync_indicator text
28 - backgroundColor: Colors.white.withOpacity(0.2), // synced sync_indicator
29 - decorationColor: Colors.white.withOpacity(0.15), // not synced sync_indicator
30 - ),
31 - bodySmall: TextStyle(
32 - color: Palette.shineOrange, // not synced light
33 - decorationColor: Colors.white, // filter icon
34 - ),
35 - labelSmall: TextStyle(
36 - color: Colors.white.withOpacity(0.2), // filter button
37 - backgroundColor:
38 - Colors.white.withOpacity(0.5), // date section row
39 - decorationColor: Colors.white
40 - .withOpacity(0.2) // icons (transaction and trade rows)
41 - ),
42 - // subhead -> titleMedium
43 - titleMedium: TextStyle(
44 - color: Colors.white.withOpacity(0.2), // address button border
45 - decorationColor: Colors.white.withOpacity(0.4), // copy button (qr widget)
46 - ),
47 - // headline -> headlineSmall
48 - headlineSmall: TextStyle(
49 - color: Colors.white, // qr code
50 - decorationColor: Colors.white.withOpacity(0.5), // bottom border of amount (receive page)
51 - ),
52 - // display1 -> headlineMedium
53 - headlineMedium: TextStyle(
54 - color: PaletteDark.lightBlueGrey, // icons color (receive page)
55 - decorationColor: Palette.lavender, // icons background (receive page)
56 - ),
57 - // display2 -> displaySmall
58 - displaySmall: TextStyle(
59 - color:
60 - Palette.darkBlueCraiola, // text color of tiles (receive page)
61 - decorationColor:
62 - Colors.white // background of tiles (receive page)
63 - ),
64 - // display3 -> displayMedium
65 - displayMedium: TextStyle(
66 - color: Colors.white, // text color of current tile (receive page),
67 - //decorationColor: Palette.blueCraiola // background of current tile (receive page)
68 - decorationColor: Palette
69 - .moderateSlateBlue // background of current tile (receive page)
70 - ),
71 - // display4 -> displayLarge
72 - displayLarge: TextStyle(
73 - color: Palette.violetBlue, // text color of tiles (account list)
74 - decorationColor:
75 - Colors.white // background of tiles (account list)
76 - ),
77 - // subtitle -> titleSmall
78 - titleSmall: TextStyle(
79 - color: Palette
80 - .moderateSlateBlue, // text color of current tile (account list)
81 - decorationColor:
82 - Colors.white // background of current tile (account list)
83 - ),
84 - // body -> bodyMedium
85 - bodyMedium: TextStyle(
86 - color: Palette.moderatePurpleBlue, // scrollbar thumb
87 - decorationColor: Palette.periwinkleCraiola // scrollbar background
88 - ),
89 - // body2 -> bodyLarge
90 - bodyLarge: TextStyle(
91 - color: Palette.moderateLavender, // menu header
92 - decorationColor: Colors.white, // menu background
93 - )
94 - ),
95 - scrollbarTheme: ScrollbarThemeData(
96 - thumbColor: MaterialStateProperty.all(Palette.moderatePurpleBlue),
97 - trackColor: MaterialStateProperty.all(Palette.periwinkleCraiola),
98 - radius: Radius.circular(3),
99 - thickness: MaterialStateProperty.all(6),
100 - thumbVisibility: MaterialStateProperty.all(true),
101 - crossAxisMargin: 6,
102 - ),
103 - primaryTextTheme: TextTheme(
104 - titleLarge: TextStyle(
105 - color: Palette.darkBlueCraiola, // title color
106 - backgroundColor: Palette.wildPeriwinkle // textfield underline
107 - ),
108 - bodySmall: TextStyle(
109 - color: PaletteDark.pigeonBlue, // secondary text
110 - decorationColor: Palette.wildLavender // menu divider
111 - ),
112 - labelSmall: TextStyle(
113 - color: Palette.darkGray, // transaction/trade details titles
114 - decorationColor: Colors.white.withOpacity(0.5), // placeholder
115 - ),
116 - // subhead -> titleMedium
117 - titleMedium: TextStyle(
118 - color: Palette.blueCraiola, // first gradient color (send page)
119 - decorationColor:
120 - Palette.pinkFlamingo // second gradient color (send page)
121 - ),
122 - // headline -> headlineSmall
123 - headlineSmall: TextStyle(
124 - color: Colors.white
125 - .withOpacity(0.5), // text field border color (send page)
126 - decorationColor: Colors.white
127 - .withOpacity(0.5), // text field hint color (send page)
128 - ),
129 - // display1 -> headlineMedium
130 - headlineMedium: TextStyle(
131 - color: Colors.white
132 - .withOpacity(0.2), // text field button color (send page)
133 - decorationColor:
134 - Colors.white // text field button icon color (send page)
135 - ),
136 - // display2 -> displaySmall
137 - displaySmall: TextStyle(
138 - color: Colors.white.withOpacity(0.5), // estimated fee (send page)
139 - backgroundColor: PaletteDark.darkCyanBlue
140 - .withOpacity(0.67), // dot color for indicator on send page
141 - decorationColor:
142 - Palette.shadowWhite // template dotted border (send page)
143 - ),
144 - // display3 -> displayMedium
145 - displayMedium: TextStyle(
146 - color: Palette.darkBlueCraiola, // template new text (send page)
147 - backgroundColor: PaletteDark
148 - .darkNightBlue, // active dot color for indicator on send page
149 - decorationColor:
150 - Palette.shadowWhite // template background color (send page)
151 - ),
152 - // display4 -> displayLarge
153 - displayLarge: TextStyle(
154 - color: Palette.darkBlueCraiola, // template title (send page)
155 - backgroundColor:
156 - Colors.white, // icon color on order row (moonpay)
157 - decorationColor:
158 - Palette.niagara // receive amount text (exchange page)
159 - ),
160 - // subtitle -> titleSmall
161 - titleSmall: TextStyle(
162 - color: Palette
163 - .blueCraiola, // first gradient color top panel (exchange page)
164 - decorationColor: Palette
165 - .pinkFlamingo // second gradient color top panel (exchange page)
166 - ),
167 - // body -> bodyMedium
168 - bodyMedium: TextStyle(
169 - color: Palette.blueCraiola.withOpacity(
170 - 0.7), // first gradient color bottom panel (exchange page)
171 - decorationColor: Palette.pinkFlamingo.withOpacity(
172 - 0.7), // second gradient color bottom panel (exchange page)
173 - backgroundColor:
174 - Palette.moderateSlateBlue // alert right button text
175 - ),
176 - // body2 -> bodyLarge
177 - bodyLarge: TextStyle(
178 - color: Colors.white.withOpacity(
179 - 0.5), // text field border on top panel (exchange page)
180 - decorationColor: Colors.white.withOpacity(
181 - 0.5), // text field border on bottom panel (exchange page)
182 - backgroundColor: Palette.brightOrange // alert left button text
183 - )
184 - ),
185 - focusColor: Colors.white.withOpacity(0.2), // text field button (exchange page)
186 - accentTextTheme: TextTheme(
187 - // title -> titleLarge
188 - titleLarge: TextStyle(
189 - color: Colors.white, // picker background
190 - backgroundColor: Palette.periwinkleCraiola, // picker divider
191 - decorationColor: Colors.white // dialog background
192 - ),
193 - bodySmall: TextStyle(
194 - color: Palette.moderateLavender, // container (confirm exchange)
195 - backgroundColor: Palette.moderateLavender, // button background (confirm exchange)
196 - decorationColor: Palette.darkBlueCraiola, // text color (information page)
197 - ),
198 - // subtitle -> titleSmall
199 - titleSmall: TextStyle(
200 - color: Palette.darkBlueCraiola, // QR code (exchange trade page)
201 - backgroundColor: Palette.wildPeriwinkle, // divider (exchange trade page)
202 - //decorationColor: Palette.blueCraiola // crete new wallet button background (wallet list page)
203 - decorationColor: Palette
204 - .moderateSlateBlue // crete new wallet button background (wallet list page)
205 - ),
206 - // headline -> headlineSmall
207 - headlineSmall: TextStyle(
208 - color: Palette
209 - .moderateLavender, // first gradient color of wallet action buttons (wallet list page)
210 - backgroundColor: Palette
211 - .moderateLavender, // second gradient color of wallet action buttons (wallet list page)
212 - decorationColor: Colors
213 - .white // restore wallet button text color (wallet list page)
214 - ),
215 - // subhead -> titleMedium
216 - titleMedium: TextStyle(
217 - color: Palette.darkGray, // titles color (filter widget)
218 - backgroundColor: Palette.periwinkle, // divider color (filter widget)
219 - decorationColor: Colors.white // checkbox background (filter widget)
220 - ),
221 - labelSmall: TextStyle(
222 - color: Palette.wildPeriwinkle, // checkbox bounds (filter widget)
223 - decorationColor: Colors.white, // menu subname
224 - ),
225 - // display1 -> headlineMedium
226 - headlineMedium: TextStyle(
227 - color: Palette.blueCraiola, // first gradient color (menu header)
228 - decorationColor: Palette.pinkFlamingo, // second gradient color(menu header)
229 - backgroundColor: Colors.white // active dot color
230 - ),
231 - // display2 -> displaySmall
232 - displaySmall: TextStyle(
233 - color:
234 - Palette.shadowWhite, // action button color (address text field)
235 - decorationColor: Palette.darkGray, // hint text (seed widget)
236 - backgroundColor:
237 - Colors.white.withOpacity(0.5) // text on balance page
238 - ),
239 - // display3 -> displayMedium
240 - displayMedium: TextStyle(
241 - color: Palette.darkGray, // hint text (new wallet page)
242 - decorationColor:
243 - Palette.periwinkleCraiola, // underline (new wallet page)
244 - backgroundColor:
245 - Colors.white // menu, icons, balance (dashboard page)
246 - ),
247 - // display4 -> displayLarge
248 - displayLarge: TextStyle(
249 - color: Palette.darkGray, // switch background (settings page)
250 - backgroundColor:
251 - Colors.black, // icon color on support page (moonpay, github)
252 - decorationColor:
253 - Colors.white.withOpacity(0.4) // hint text (exchange page)
254 - ),
255 - // body -> bodyMedium
256 - bodyMedium: TextStyle(
257 - color: Palette.darkGray, // indicators (PIN code)
258 - decorationColor: Palette.darkGray, // switch (PIN code)
259 - backgroundColor: Colors.white // alert right button
260 - ),
261 - // body2 -> bodyLarge
262 - bodyLarge: TextStyle(
263 - color: Palette.moderateSlateBlue, // primary buttons
264 - decorationColor: Colors.white, // alert left button,
265 - backgroundColor: Palette.dullGray // keyboard bar color
266 - ),
267 - ),
268 - cardColor: Palette.moderateSlateBlue // bottom button (action list)
77 + @override
78 + FilterTheme get filterTheme => super.filterTheme.copyWith(
79 + checkboxSecondGradientColor: Palette.pinkFlamingo,
80 + checkboxBackgroundColor: Colors.white,
81 + buttonColor: Colors.white.withOpacity(0.2),
82 + iconColor: Colors.white);
83 +
84 + @override
85 + WalletListTheme get walletListTheme => super.walletListTheme.copyWith(
86 + createNewWalletButtonBackgroundColor: Palette.moderateSlateBlue);
87 +
88 + @override
89 + OrderTheme get orderTheme => OrderTheme(iconColor: Colors.white);
90 +
91 + @override
92 + SendPageTheme get sendPageTheme => super.sendPageTheme.copyWith(
93 + templateBackgroundColor: Palette.shadowWhite,
94 + templateDottedBorderColor: Palette.shadowWhite,
95 + secondGradientColor: Palette.pinkFlamingo);
96 +
97 + @override
98 + PlaceholderTheme get placeholderTheme =>
99 + PlaceholderTheme(color: Colors.white.withOpacity(0.5));
100 +
101 + @override
102 + TransactionTradeTheme get transactionTradeTheme => super
103 + .transactionTradeTheme
104 + .copyWith(rowsColor: Colors.white.withOpacity(0.2));
105 +
106 + @override
107 + ReceivePageTheme get receivePageTheme => super.receivePageTheme.copyWith(
108 + currentTileBackgroundColor: Palette.moderateSlateBlue,
109 + tilesBackgroundColor: Colors.white,
110 + iconsBackgroundColor: Palette.lavender,
111 + amountBottomBorderColor: Colors.white.withOpacity(0.5),
112 + amountHintTextColor: Colors.white,
113 );
114
115 @override
272 - ThemeData get themeData => theme.copyWith(
273 - colorScheme: theme.colorScheme
274 - .copyWith(background: Colors.white, secondary: Palette.blueCraiola));
116 + QRCodeTheme get qrCodeTheme => super
117 + .qrCodeTheme
118 + .copyWith(qrWidgetCopyButtonColor: Colors.white.withOpacity(0.4));
119 +
120 + @override
121 + CakeTextTheme get cakeTextTheme => super.cakeTextTheme.copyWith(
122 + buttonSecondaryTextColor: super.cakeTextTheme.secondaryTextColor,
123 + buttonTextColor: super.cakeTextTheme.titleColor,
124 + addressButtonBorderColor: Colors.white.withOpacity(0.4),
125 + dateSectionRowColor: Colors.white.withOpacity(0.5));
126 }
lib/themes/dark_theme.dart
+210 -268
@@ -1,3 +1,29 @@
1 +import 'package:cake_wallet/themes/extensions/account_list_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/address_theme.dart';
3 +import 'package:cake_wallet/themes/extensions/alert_theme.dart';
4 +import 'package:cake_wallet/themes/extensions/balance_page_theme.dart';
5 +import 'package:cake_wallet/themes/extensions/cake_scrollbar_theme.dart';
6 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
7 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
8 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
9 +import 'package:cake_wallet/themes/extensions/filter_theme.dart';
10 +import 'package:cake_wallet/themes/extensions/indicator_dot_theme.dart';
11 +import 'package:cake_wallet/themes/extensions/info_theme.dart';
12 +import 'package:cake_wallet/themes/extensions/keyboard_theme.dart';
13 +import 'package:cake_wallet/themes/extensions/menu_theme.dart';
14 +import 'package:cake_wallet/themes/extensions/new_wallet_theme.dart';
15 +import 'package:cake_wallet/themes/extensions/order_theme.dart';
16 +import 'package:cake_wallet/themes/extensions/picker_theme.dart';
17 +import 'package:cake_wallet/themes/extensions/pin_code_theme.dart';
18 +import 'package:cake_wallet/themes/extensions/placeholder_theme.dart';
19 +import 'package:cake_wallet/themes/extensions/qr_code_theme.dart';
20 +import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
21 +import 'package:cake_wallet/themes/extensions/seed_widget_theme.dart';
22 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
23 +import 'package:cake_wallet/themes/extensions/support_page_theme.dart';
24 +import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart';
25 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
26 +import 'package:cake_wallet/themes/extensions/wallet_list_theme.dart';
27 import 'package:cake_wallet/themes/theme_base.dart';
28 import 'package:cake_wallet/generated/i18n.dart';
29 import 'package:cake_wallet/palette.dart';
@@ -8,278 +34,194 @@ class DarkTheme extends ThemeBase {
34
35 @override
36 String get title => S.current.dark_theme;
11 -
37 @override
38 ThemeType get type => ThemeType.dark;
39 + @override
40 + Brightness get brightness => Brightness.dark;
41 + @override
42 + Color get backgroundColor => PaletteDark.backgroundColor;
43 + @override
44 + Color get primaryColor => Palette.blueCraiola;
45 + @override
46 + Color get primaryTextColor => Colors.white;
47 + @override
48 + Color get containerColor => PaletteDark.nightBlue;
49 + @override
50 + Color get dialogBackgroundColor => PaletteDark.darkNightBlue;
51 +
52 + @override
53 + CakeScrollbarTheme get scrollbarTheme => CakeScrollbarTheme(
54 + thumbColor: PaletteDark.wildBlueGrey, trackColor: PaletteDark.violetBlue);
55 +
56 + @override
57 + SyncIndicatorTheme get syncIndicatorStyle => SyncIndicatorTheme(
58 + textColor: PaletteDark.wildBlue,
59 + syncedBackgroundColor: PaletteDark.lightNightBlue,
60 + notSyncedIconColor: PaletteDark.orangeYellow,
61 + notSyncedBackgroundColor: PaletteDark.oceanBlue);
62 +
63 + @override
64 + KeyboardTheme get keyboardTheme =>
65 + KeyboardTheme(keyboardBarColor: PaletteDark.granite);
66 +
67 + @override
68 + PinCodeTheme get pinCodeTheme => PinCodeTheme(
69 + indicatorsColor: PaletteDark.indicatorVioletBlue,
70 + switchColor: PaletteDark.lightPurpleBlue);
71 +
72 + @override
73 + SupportPageTheme get supportPageTheme =>
74 + SupportPageTheme(iconColor: Colors.white);
75 +
76 + @override
77 + ExchangePageTheme get exchangePageTheme => ExchangePageTheme(
78 + hintTextColor: PaletteDark.lightBlueGrey,
79 + dividerCodeColor: PaletteDark.deepVioletBlue,
80 + qrCodeColor: primaryTextColor,
81 + buttonBackgroundColor: PaletteDark.deepVioletBlue,
82 + textFieldButtonColor: PaletteDark.moderateBlue,
83 + textFieldBorderBottomPanelColor: PaletteDark.moderateVioletBlue,
84 + textFieldBorderTopPanelColor: PaletteDark.blueGrey,
85 + secondGradientBottomPanelColor: PaletteDark.darkNightBlue,
86 + firstGradientBottomPanelColor: PaletteDark.darkNightBlue,
87 + secondGradientTopPanelColor: PaletteDark.wildVioletBlue,
88 + firstGradientTopPanelColor: PaletteDark.wildVioletBlue,
89 + receiveAmountColor: PaletteDark.darkCyanBlue);
90 +
91 + @override
92 + NewWalletTheme get newWalletTheme => NewWalletTheme(
93 + hintTextColor: PaletteDark.cyanBlue,
94 + underlineColor: PaletteDark.darkGrey);
95 +
96 + @override
97 + AddressTheme get addressTheme =>
98 + AddressTheme(actionButtonColor: PaletteDark.nightBlue);
99 +
100 + @override
101 + DashboardPageTheme get dashboardPageTheme =>
102 + super.dashboardPageTheme.copyWith(
103 + cardTextColor: super.dashboardPageTheme.textColor,
104 + indicatorDotTheme: IndicatorDotTheme(
105 + indicatorColor: PaletteDark.cyanBlue,
106 + activeIndicatorColor: Colors.white));
107 +
108 + @override
109 + BalancePageTheme get balancePageTheme => BalancePageTheme(
110 + textColor: dashboardPageTheme.textColor,
111 + labelTextColor: PaletteDark.cyanBlue);
112 +
113 + @override
114 + CakeMenuTheme get menuTheme => CakeMenuTheme(
115 + headerFirstGradientColor: PaletteDark.deepPurpleBlue,
116 + headerSecondGradientColor: PaletteDark.deepPurpleBlue,
117 + backgroundColor: PaletteDark.deepPurpleBlue,
118 + subnameTextColor: PaletteDark.darkCyanBlue,
119 + dividerColor: PaletteDark.darkOceanBlue,
120 + settingTitleColor: receivePageTheme.tilesTextColor,
121 + settingActionsIconColor: PaletteDark.pigeonBlue,
122 + iconColor: PaletteDark.darkCyanBlue);
123
15 - ThemeData theme = ThemeData(
16 - fontFamily: 'Lato',
17 - brightness: Brightness.dark,
18 - scaffoldBackgroundColor:
19 - PaletteDark.backgroundColor, // second gradient color
20 - primaryColor: PaletteDark.backgroundColor, // third gradient color
21 - indicatorColor: PaletteDark.cyanBlue, // page indicator
22 - hoverColor: PaletteDark.cyanBlue, // amount hint text (receive page)
124 + @override
125 + FilterTheme get filterTheme => FilterTheme(
126 + checkboxFirstGradientColor: PaletteDark.darkNightBlue,
127 + checkboxSecondGradientColor: PaletteDark.darkNightBlue,
128 + checkboxBoundsColor: PaletteDark.wildVioletBlue,
129 + checkboxBackgroundColor: PaletteDark.wildVioletBlue.withOpacity(0.3),
130 + titlesColor: Colors.white,
131 + buttonColor: PaletteDark.oceanBlue,
132 + iconColor: PaletteDark.wildBlue);
133 +
134 + @override
135 + WalletListTheme get walletListTheme => WalletListTheme(
136 + restoreWalletButtonTextColor: Palette.darkBlueCraiola,
137 + createNewWalletButtonBackgroundColor: Colors.white);
138 +
139 + @override
140 + InfoTheme get infoTheme => InfoTheme(textColor: Palette.darkLavender);
141 +
142 + @override
143 + PickerTheme get pickerTheme => PickerTheme(
144 dividerColor: PaletteDark.dividerColor,
24 - hintColor: PaletteDark.pigeonBlue, // menu
25 - textTheme: TextTheme(
26 - // title -> titleLarge
27 - titleLarge: TextStyle(
28 - color: PaletteDark.wildBlue, // sync_indicator text
29 - backgroundColor:
30 - PaletteDark.lightNightBlue, // synced sync_indicator
31 - decorationColor:
32 - PaletteDark.oceanBlue // not synced sync_indicator
33 - ),
34 - bodySmall: TextStyle(
35 - color: PaletteDark.orangeYellow, // not synced light
36 - decorationColor: PaletteDark.wildBlue, // filter icon
37 - ),
38 - labelSmall: TextStyle(
39 - color: PaletteDark.oceanBlue, // filter button
40 - backgroundColor: PaletteDark.darkCyanBlue, // date section row
41 - decorationColor: PaletteDark
42 - .wildNightBlue // icons (transaction and trade rows)
43 - ),
44 - // subhead -> titleMedium
45 - titleMedium: TextStyle(
46 - color: PaletteDark.nightBlue, // address button border
47 - decorationColor: PaletteDark.lightBlueGrey, // copy button (qr widget)
48 - ),
49 - // headline -> headlineSmall
50 - headlineSmall: TextStyle(
51 - color: PaletteDark.lightBlueGrey, // qr code
52 - decorationColor: PaletteDark.darkGrey, // bottom border of amount (receive page)
53 - ),
54 - // display1 -> headlineMedium
55 - headlineMedium: TextStyle(
56 - color: Colors.white, // icons color (receive page)
57 - decorationColor: PaletteDark.distantNightBlue, // icons background (receive page)
58 - ),
59 - // display2 -> displaySmall
60 - displaySmall: TextStyle(
61 - color: Colors.white, // text color of tiles (receive page)
62 - decorationColor:
63 - PaletteDark.nightBlue // background of tiles (receive page)
64 - ),
65 - // display3 -> displayMedium
66 - displayMedium: TextStyle(
67 - color: Palette
68 - .blueCraiola, // text color of current tile (receive page)
69 - decorationColor: PaletteDark
70 - .lightOceanBlue // background of current tile (receive page)
71 - ),
72 - // display4 -> displayLarge
73 - displayLarge: TextStyle(
74 - color: Colors.white, // text color of tiles (account list)
75 - decorationColor: PaletteDark
76 - .darkOceanBlue // background of tiles (account list)
77 - ),
78 - // subtitle -> titleSmall
79 - titleSmall: TextStyle(
80 - color: Palette
81 - .blueCraiola, // text color of current tile (account list)
82 - decorationColor: PaletteDark
83 - .darkNightBlue // background of current tile (account list)
84 - ),
85 - // body1 -> bodyMedium
86 - bodyMedium: TextStyle(
87 - color: PaletteDark.wildBlueGrey, // scrollbar thumb
88 - decorationColor: PaletteDark.violetBlue // scrollbar background
89 - ),
90 - // body2 -> bodyLarge
91 - bodyLarge: TextStyle(
92 - color: PaletteDark.deepPurpleBlue, // menu header
93 - decorationColor: PaletteDark.deepPurpleBlue, // menu background
94 - )
95 - ),
96 - scrollbarTheme: ScrollbarThemeData(
97 - thumbColor: MaterialStateProperty.all(PaletteDark.wildBlueGrey),
98 - trackColor: MaterialStateProperty.all(PaletteDark.violetBlue),
99 - radius: Radius.circular(3),
100 - thickness: MaterialStateProperty.all(6),
101 - thumbVisibility: MaterialStateProperty.all(true),
102 - crossAxisMargin: 6,
103 - ),
104 - primaryTextTheme: TextTheme(
105 - // title -> titleLarge
106 - titleLarge: TextStyle(
107 - color: Colors.white, // title color
108 - backgroundColor: PaletteDark.darkOceanBlue // textfield underline
109 - ),
110 - bodySmall: TextStyle(
111 - color: PaletteDark.darkCyanBlue, // secondary text
112 - decorationColor: PaletteDark.darkOceanBlue // menu divider
113 - ),
114 - labelSmall: TextStyle(
115 - color:
116 - PaletteDark.lightBlueGrey, // transaction/trade details titles
117 - decorationColor: Colors.grey, // placeholder
118 - ),
119 - // subhead -> titleMedium
120 - titleMedium: TextStyle(
121 - color:
122 - PaletteDark.darkNightBlue, // first gradient color (send page)
123 - decorationColor:
124 - PaletteDark.darkNightBlue // second gradient color (send page)
125 - ),
126 - // headline -> headlineSmall
127 - headlineSmall: TextStyle(
128 - color: PaletteDark
129 - .lightVioletBlue, // text field border color (send page)
130 - decorationColor:
131 - PaletteDark.darkCyanBlue, // text field hint color (send page)
132 - ),
133 - // display1 -> headlineMedium
134 - headlineMedium: TextStyle(
135 - color: PaletteDark
136 - .buttonNightBlue, // text field button color (send page)
137 - decorationColor:
138 - PaletteDark.gray // text field button icon color (send page)
139 - ),
140 - // display2 -> displaySmall
141 - displaySmall: TextStyle(
142 - color: Colors.white, // estimated fee (send page)
143 - backgroundColor:
144 - PaletteDark.cyanBlue, // dot color for indicator on send page
145 - decorationColor:
146 - PaletteDark.darkCyanBlue // template dotted border (send page)
147 - ),
148 - // display3 -> displayMedium
149 - displayMedium: TextStyle(
150 - color: PaletteDark.darkCyanBlue, // template new text (send page)
151 - backgroundColor:
152 - Colors.white, // active dot color for indicator on send page
153 - decorationColor: PaletteDark
154 - .darkVioletBlue // template background color (send page)
155 - ),
156 - // display4 -> displayLarge
157 - displayLarge: TextStyle(
158 - color: PaletteDark.cyanBlue, // template title (send page)
159 - backgroundColor:
160 - Colors.white, // icon color on order row (moonpay)
161 - decorationColor: PaletteDark
162 - .darkCyanBlue // receive amount text (exchange page)
163 - ),
164 - // subtitle -> titleSmall
165 - titleSmall: TextStyle(
166 - color: PaletteDark
167 - .wildVioletBlue, // first gradient color top panel (exchange page)
168 - decorationColor: PaletteDark
169 - .wildVioletBlue // second gradient color top panel (exchange page)
170 - ),
171 - // body1 -> bodyMedium
172 - bodyMedium: TextStyle(
173 - color: PaletteDark
174 - .darkNightBlue, // first gradient color bottom panel (exchange page)
175 - decorationColor: PaletteDark
176 - .darkNightBlue, // second gradient color bottom panel (exchange page)
177 - backgroundColor: Palette.blueCraiola // alert right button text
178 - ),
179 - // body2 -> bodyLarge
180 - bodyLarge: TextStyle(
181 - color: PaletteDark
182 - .blueGrey, // text field border on top panel (exchange page)
183 - decorationColor: PaletteDark
184 - .moderateVioletBlue, // text field border on bottom panel (exchange page)
185 - backgroundColor: Palette.alizarinRed // alert left button text
186 - )
187 - ),
188 - focusColor: PaletteDark.moderateBlue, // text field button (exchange page)
189 - accentTextTheme: TextTheme(
190 - // title -> titleLarge
191 - titleLarge: TextStyle(
192 - color: PaletteDark.nightBlue, // picker background
193 - backgroundColor: PaletteDark.dividerColor, // picker divider
194 - decorationColor: PaletteDark.darkNightBlue // dialog background
195 - ),
196 - bodySmall: TextStyle(
197 - color: PaletteDark.nightBlue, // container (confirm exchange)
198 - backgroundColor: PaletteDark.deepVioletBlue, // button background (confirm exchange)
199 - decorationColor: Palette.darkLavender, // text color (information page)
200 - ),
201 - // subtitle -> titleSmall
202 - titleSmall: TextStyle(
203 - //color: PaletteDark.lightBlueGrey, // QR code (exchange trade page)
204 - color: Colors.white, // QR code (exchange trade page)
205 - backgroundColor:
206 - PaletteDark.deepVioletBlue, // divider (exchange trade page)
207 - decorationColor: Colors
208 - .white // crete new wallet button background (wallet list page)
209 - ),
210 - // headline -> headlineSmall
211 - headlineSmall: TextStyle(
212 - color: PaletteDark
213 - .distantBlue, // first gradient color of wallet action buttons (wallet list page)
214 - backgroundColor: PaletteDark
215 - .distantNightBlue, // second gradient color of wallet action buttons (wallet list page)
216 - decorationColor: Palette
217 - .darkBlueCraiola // restore wallet button text color (wallet list page)
218 - ),
219 - // subhead -> titleMedium
220 - titleMedium: TextStyle(
221 - color: Colors.white, // titles color (filter widget)
222 - backgroundColor:
223 - PaletteDark.darkOceanBlue, // divider color (filter widget)
224 - decorationColor: PaletteDark.wildVioletBlue
225 - .withOpacity(0.3) // checkbox background (filter widget)
226 - ),
227 - labelSmall: TextStyle(
228 - color: PaletteDark.wildVioletBlue, // checkbox bounds (filter widget)
229 - decorationColor: PaletteDark.darkCyanBlue, // menu subname
230 - ),
231 - // display1 -> headlineMedium
232 - headlineMedium: TextStyle(
233 - color: PaletteDark
234 - .deepPurpleBlue, // first gradient color (menu header)
235 - decorationColor: PaletteDark
236 - .deepPurpleBlue, // second gradient color(menu header)
237 - backgroundColor: Colors.white // active dot color
238 - ),
239 - // display2 -> displaySmall
240 - displaySmall: TextStyle(
241 - color: PaletteDark
242 - .nightBlue, // action button color (address text field)
243 - decorationColor:
244 - PaletteDark.darkCyanBlue, // hint text (seed widget)
245 - backgroundColor: PaletteDark.cyanBlue // text on balance page
246 - ),
247 - // display3 -> displayMedium
248 - displayMedium: TextStyle(
249 - color: PaletteDark.cyanBlue, // hint text (new wallet page)
250 - decorationColor:
251 - PaletteDark.darkGrey, // underline (new wallet page)
252 - backgroundColor:
253 - Colors.white // menu, icons, balance (dashboard page)
254 - ),
255 - // display4 -> displayLarge
256 - displayLarge: TextStyle(
257 - color:
258 - PaletteDark.deepVioletBlue, // switch background (settings page)
259 - backgroundColor:
260 - Colors.white, // icon color on support page (moonpay, github)
261 - decorationColor:
262 - PaletteDark.lightBlueGrey // hint text (exchange page)
263 - ),
264 - // body1 -> bodyMedium
265 - bodyMedium: TextStyle(
266 - color: PaletteDark.indicatorVioletBlue, // indicators (PIN code)
267 - decorationColor: PaletteDark.lightPurpleBlue, // switch (PIN code)
268 - backgroundColor: PaletteDark.darkNightBlue // alert right button
269 - ),
270 - // body2 -> bodyLarge
271 - bodyLarge: TextStyle(
272 - color: Palette.blueCraiola, // primary buttons
273 - decorationColor: PaletteDark.darkNightBlue, // alert left button
274 - backgroundColor: PaletteDark.granite // keyboard bar color
275 - ),
276 - ),
277 - cardColor: PaletteDark.darkNightBlue // bottom button (action list)
278 - );
145 + searchTextColor: cakeTextTheme.textfieldUnderlineColor,
146 + searchBackgroundFillColor: addressTheme.actionButtonColor);
147 +
148 + @override
149 + AlertTheme get alertTheme => AlertTheme(
150 + backdropColor: PaletteDark.darkNightBlue.withOpacity(0.75),
151 + leftButtonTextColor: Palette.alizarinRed);
152 +
153 + @override
154 + OrderTheme get orderTheme => OrderTheme(iconColor: Colors.white);
155 +
156 + @override
157 + SendPageTheme get sendPageTheme => SendPageTheme(
158 + templateTitleColor: PaletteDark.cyanBlue,
159 + templateBackgroundColor: PaletteDark.darkVioletBlue,
160 + templateNewTextColor: PaletteDark.darkCyanBlue,
161 + templateDottedBorderColor: PaletteDark.darkCyanBlue,
162 + templateSelectedCurrencyBackgroundColor: primaryColor,
163 + templateSelectedCurrencyTitleColor: Colors.white,
164 + estimatedFeeColor: Colors.white,
165 + textFieldButtonIconColor: PaletteDark.gray,
166 + textFieldButtonColor: PaletteDark.buttonNightBlue,
167 + textFieldHintColor: PaletteDark.darkCyanBlue,
168 + textFieldBorderColor: PaletteDark.lightVioletBlue,
169 + secondGradientColor: PaletteDark.darkNightBlue,
170 + firstGradientColor: PaletteDark.darkNightBlue,
171 + indicatorDotColor: PaletteDark.cyanBlue);
172 +
173 + @override
174 + SeedWidgetTheme get seedWidgetTheme =>
175 + SeedWidgetTheme(hintTextColor: PaletteDark.darkCyanBlue);
176 +
177 + @override
178 + PlaceholderTheme get placeholderTheme => PlaceholderTheme(color: Colors.grey);
179 +
180 + @override
181 + TransactionTradeTheme get transactionTradeTheme => TransactionTradeTheme(
182 + detailsTitlesColor: PaletteDark.lightBlueGrey,
183 + rowsColor: PaletteDark.wildNightBlue);
184 +
185 + @override
186 + CakeTextTheme get cakeTextTheme => CakeTextTheme(
187 + secondaryTextColor: PaletteDark.darkCyanBlue,
188 + textfieldUnderlineColor: PaletteDark.darkOceanBlue,
189 + titleColor: Colors.white,
190 + addressButtonBorderColor: PaletteDark.nightBlue,
191 + dateSectionRowColor: PaletteDark.darkCyanBlue);
192
193 @override
281 - ThemeData get themeData => theme.copyWith(
282 - colorScheme: theme.colorScheme.copyWith(
283 - background: PaletteDark.backgroundColor,
284 - secondary: PaletteDark.backgroundColor));
194 + AccountListTheme get accountListTheme => AccountListTheme(
195 + currentAccountBackgroundColor: dialogBackgroundColor,
196 + currentAccountTextColor: primaryColor,
197 + currentAccountAmountColor: receivePageTheme.iconsColor,
198 + tilesAmountColor: receivePageTheme.iconsColor,
199 + tilesBackgroundColor: PaletteDark.darkOceanBlue,
200 + tilesTextColor: Colors.white);
201 +
202 + @override
203 + ReceivePageTheme get receivePageTheme => ReceivePageTheme(
204 + currentTileBackgroundColor: PaletteDark.lightOceanBlue,
205 + currentTileTextColor: Palette.blueCraiola,
206 + tilesBackgroundColor: PaletteDark.nightBlue,
207 + tilesTextColor: Colors.white,
208 + iconsBackgroundColor: PaletteDark.distantNightBlue,
209 + iconsColor: Colors.white,
210 + amountBottomBorderColor: PaletteDark.darkGrey,
211 + amountHintTextColor: PaletteDark.cyanBlue);
212 +
213 + @override
214 + QRCodeTheme get qrCodeTheme => QRCodeTheme(
215 + qrCodeColor: PaletteDark.lightBlueGrey,
216 + qrWidgetCopyButtonColor: PaletteDark.lightBlueGrey);
217 +
218 + @override
219 + ThemeData get themeData => super.themeData.copyWith(
220 + dividerColor: PaletteDark.dividerColor,
221 + hintColor: PaletteDark.pigeonBlue,
222 + disabledColor: PaletteDark.deepVioletBlue,
223 + dialogTheme: super
224 + .themeData
225 + .dialogTheme
226 + .copyWith(backgroundColor: PaletteDark.nightBlue));
227 }
lib/themes/extensions/account_list_theme.dart new
+58
@@ -0,0 +1,58 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class AccountListTheme extends ThemeExtension<AccountListTheme> {
4 + final Color tilesTextColor;
5 + final Color tilesAmountColor;
6 + final Color tilesBackgroundColor;
7 + final Color currentAccountBackgroundColor;
8 + final Color currentAccountTextColor;
9 + final Color currentAccountAmountColor;
10 +
11 + AccountListTheme(
12 + {required this.tilesTextColor,
13 + required this.tilesAmountColor,
14 + required this.tilesBackgroundColor,
15 + required this.currentAccountBackgroundColor,
16 + required this.currentAccountTextColor,
17 + required this.currentAccountAmountColor});
18 +
19 + @override
20 + AccountListTheme copyWith(
21 + {Color? tilesTextColor,
22 + Color? tilesAmountColor,
23 + Color? tilesBackgroundColor,
24 + Color? currentAccountBackgroundColor,
25 + Color? currentAccountTextColor,
26 + Color? currentAccountAmountColor}) =>
27 + AccountListTheme(
28 + tilesTextColor: tilesTextColor ?? this.tilesTextColor,
29 + tilesAmountColor: tilesAmountColor ?? this.tilesAmountColor,
30 + tilesBackgroundColor:
31 + tilesBackgroundColor ?? this.tilesBackgroundColor,
32 + currentAccountBackgroundColor: currentAccountBackgroundColor ??
33 + this.currentAccountBackgroundColor,
34 + currentAccountTextColor:
35 + currentAccountTextColor ?? this.currentAccountTextColor,
36 + currentAccountAmountColor:
37 + currentAccountAmountColor ?? this.currentAccountAmountColor);
38 +
39 + @override
40 + AccountListTheme lerp(ThemeExtension<AccountListTheme>? other, double t) {
41 + if (other is! AccountListTheme) {
42 + return this;
43 + }
44 +
45 + return AccountListTheme(
46 + tilesTextColor: Color.lerp(tilesTextColor, other.tilesTextColor, t)!,
47 + tilesAmountColor:
48 + Color.lerp(tilesAmountColor, other.tilesAmountColor, t)!,
49 + tilesBackgroundColor:
50 + Color.lerp(tilesBackgroundColor, other.tilesBackgroundColor, t)!,
51 + currentAccountBackgroundColor: Color.lerp(currentAccountBackgroundColor,
52 + other.currentAccountBackgroundColor, t)!,
53 + currentAccountTextColor: Color.lerp(
54 + currentAccountTextColor, other.currentAccountTextColor, t)!,
55 + currentAccountAmountColor: Color.lerp(
56 + currentAccountAmountColor, other.currentAccountAmountColor, t)!);
57 + }
58 +}
lib/themes/extensions/address_theme.dart new
+24
@@ -0,0 +1,24 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class AddressTheme extends ThemeExtension<AddressTheme> {
4 + final Color actionButtonColor;
5 +
6 + AddressTheme({required this.actionButtonColor});
7 +
8 + @override
9 + AddressTheme copyWith({Color? actionButtonColor}) => AddressTheme(
10 + actionButtonColor: actionButtonColor ?? this.actionButtonColor);
11 +
12 + @override
13 + AddressTheme lerp(ThemeExtension<AddressTheme>? other, double t) {
14 + if (other is! AddressTheme) {
15 + return this;
16 + }
17 +
18 + return AddressTheme(
19 + actionButtonColor:
20 + Color.lerp(actionButtonColor, other.actionButtonColor, t) ??
21 + actionButtonColor,
22 + );
23 + }
24 +}
lib/themes/extensions/alert_theme.dart new
+28
@@ -0,0 +1,28 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class AlertTheme extends ThemeExtension<AlertTheme> {
4 + final Color leftButtonTextColor;
5 + final Color backdropColor;
6 +
7 + AlertTheme({required this.leftButtonTextColor, required this.backdropColor});
8 +
9 + @override
10 + AlertTheme copyWith({Color? leftButtonTextColor, Color? backdropColor}) =>
11 + AlertTheme(
12 + leftButtonTextColor: leftButtonTextColor ?? this.leftButtonTextColor,
13 + backdropColor: backdropColor ?? this.backdropColor);
14 +
15 + @override
16 + AlertTheme lerp(ThemeExtension<AlertTheme>? other, double t) {
17 + if (other is! AlertTheme) {
18 + return this;
19 + }
20 +
21 + return AlertTheme(
22 + leftButtonTextColor:
23 + Color.lerp(leftButtonTextColor, other.leftButtonTextColor, t) ??
24 + leftButtonTextColor,
25 + backdropColor:
26 + Color.lerp(backdropColor, other.backdropColor, t) ?? backdropColor);
27 + }
28 +}
lib/themes/extensions/balance_page_theme.dart new
+53
@@ -0,0 +1,53 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class BalancePageTheme extends ThemeExtension<BalancePageTheme> {
4 + final Color textColor;
5 + final Color labelTextColor;
6 + final Color balanceAmountColor;
7 + final Color assetTitleColor;
8 + final Color cardBorderColor;
9 +
10 + BalancePageTheme(
11 + {required this.labelTextColor,
12 + required this.textColor,
13 + Color? balanceAmountColor,
14 + Color? assetTitleColor,
15 + this.cardBorderColor = Colors.transparent})
16 + : this.balanceAmountColor = balanceAmountColor ?? textColor,
17 + this.assetTitleColor = assetTitleColor ?? textColor;
18 +
19 + @override
20 + BalancePageTheme copyWith(
21 + {Color? textColor,
22 + Color? labelTextColor,
23 + Color? balanceAmountColor,
24 + Color? assetTitleColor,
25 + Color? cardBorderColor}) =>
26 + BalancePageTheme(
27 + textColor: textColor ?? this.textColor,
28 + labelTextColor: labelTextColor ?? this.labelTextColor,
29 + balanceAmountColor: balanceAmountColor ?? this.balanceAmountColor,
30 + assetTitleColor: assetTitleColor ?? this.assetTitleColor,
31 + cardBorderColor: cardBorderColor ?? this.cardBorderColor);
32 +
33 + @override
34 + BalancePageTheme lerp(ThemeExtension<BalancePageTheme>? other, double t) {
35 + if (other is! BalancePageTheme) {
36 + return this;
37 + }
38 +
39 + return BalancePageTheme(
40 + textColor: Color.lerp(textColor, other.textColor, t) ?? textColor,
41 + labelTextColor: Color.lerp(labelTextColor, other.labelTextColor, t) ??
42 + labelTextColor,
43 + balanceAmountColor:
44 + Color.lerp(balanceAmountColor, other.balanceAmountColor, t) ??
45 + balanceAmountColor,
46 + assetTitleColor:
47 + Color.lerp(assetTitleColor, other.assetTitleColor, t) ??
48 + assetTitleColor,
49 + cardBorderColor:
50 + Color.lerp(cardBorderColor, other.cardBorderColor, t) ??
51 + cardBorderColor);
52 + }
53 +}
lib/themes/extensions/cake_scrollbar_theme.dart new
+28
@@ -0,0 +1,28 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class CakeScrollbarTheme extends ThemeExtension<CakeScrollbarTheme> {
4 + final Color thumbColor;
5 + final Color trackColor;
6 +
7 + CakeScrollbarTheme({required this.thumbColor, required this.trackColor});
8 +
9 + @override
10 + Object get type => CakeScrollbarTheme;
11 +
12 + @override
13 + CakeScrollbarTheme copyWith({Color? thumbColor, Color? trackColor}) =>
14 + CakeScrollbarTheme(
15 + thumbColor: thumbColor ?? this.thumbColor,
16 + trackColor: trackColor ?? this.trackColor);
17 +
18 + @override
19 + CakeScrollbarTheme lerp(ThemeExtension<CakeScrollbarTheme>? other, double t) {
20 + if (other is! CakeScrollbarTheme) {
21 + return this;
22 + }
23 +
24 + return CakeScrollbarTheme(
25 + thumbColor: Color.lerp(thumbColor, other.thumbColor, t) ?? thumbColor,
26 + trackColor: Color.lerp(trackColor, other.trackColor, t) ?? trackColor);
27 + }
28 +}
lib/themes/extensions/cake_text_theme.dart new
+65
@@ -0,0 +1,65 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class CakeTextTheme extends ThemeExtension<CakeTextTheme> {
4 + final Color secondaryTextColor;
5 + final Color textfieldUnderlineColor;
6 + final Color titleColor;
7 + final Color addressButtonBorderColor;
8 + final Color dateSectionRowColor;
9 + final Color buttonTextColor;
10 + final Color buttonSecondaryTextColor;
11 +
12 + CakeTextTheme(
13 + {required this.secondaryTextColor,
14 + required this.textfieldUnderlineColor,
15 + required this.titleColor,
16 + required this.addressButtonBorderColor,
17 + required this.dateSectionRowColor,
18 + Color? buttonTextColor,
19 + Color? buttonSecondaryTextColor})
20 + : buttonTextColor = buttonTextColor ?? titleColor,
21 + buttonSecondaryTextColor =
22 + buttonSecondaryTextColor ?? secondaryTextColor;
23 +
24 + @override
25 + CakeTextTheme copyWith(
26 + {Color? secondaryTextColor,
27 + Color? textfieldUnderlineColor,
28 + Color? titleColor,
29 + Color? addressButtonBorderColor,
30 + Color? dateSectionRowColor,
31 + Color? buttonTextColor,
32 + Color? buttonSecondaryTextColor}) =>
33 + CakeTextTheme(
34 + secondaryTextColor: secondaryTextColor ?? this.secondaryTextColor,
35 + textfieldUnderlineColor:
36 + textfieldUnderlineColor ?? this.textfieldUnderlineColor,
37 + titleColor: titleColor ?? this.titleColor,
38 + addressButtonBorderColor:
39 + addressButtonBorderColor ?? this.addressButtonBorderColor,
40 + dateSectionRowColor: dateSectionRowColor ?? this.dateSectionRowColor,
41 + buttonTextColor: buttonTextColor ?? this.buttonTextColor,
42 + buttonSecondaryTextColor:
43 + buttonSecondaryTextColor ?? this.buttonSecondaryTextColor);
44 +
45 + @override
46 + CakeTextTheme lerp(ThemeExtension<CakeTextTheme>? other, double t) {
47 + if (other is! CakeTextTheme) {
48 + return this;
49 + }
50 +
51 + return CakeTextTheme(
52 + secondaryTextColor:
53 + Color.lerp(secondaryTextColor, other.secondaryTextColor, t)!,
54 + textfieldUnderlineColor: Color.lerp(
55 + textfieldUnderlineColor, other.textfieldUnderlineColor, t)!,
56 + titleColor: Color.lerp(titleColor, other.titleColor, t)!,
57 + addressButtonBorderColor: Color.lerp(
58 + addressButtonBorderColor, other.addressButtonBorderColor, t)!,
59 + dateSectionRowColor:
60 + Color.lerp(dateSectionRowColor, other.dateSectionRowColor, t)!,
61 + buttonTextColor: Color.lerp(buttonTextColor, other.buttonTextColor, t)!,
62 + buttonSecondaryTextColor: Color.lerp(
63 + buttonSecondaryTextColor, other.buttonSecondaryTextColor, t)!);
64 + }
65 +}
lib/themes/extensions/dashboard_page_theme.dart new
+79
@@ -0,0 +1,79 @@
1 +import 'package:cake_wallet/themes/extensions/indicator_dot_theme.dart';
2 +import 'package:flutter/material.dart';
3 +
4 +class DashboardPageTheme extends ThemeExtension<DashboardPageTheme> {
5 + final Color firstGradientBackgroundColor;
6 + final Color secondGradientBackgroundColor;
7 + final Color thirdGradientBackgroundColor;
8 + final Color textColor;
9 + final Color cardTextColor;
10 + final Color pageTitleTextColor;
11 + final Color mainActionsIconColor;
12 +
13 + final IndicatorDotTheme indicatorDotTheme;
14 +
15 + DashboardPageTheme(
16 + {required this.firstGradientBackgroundColor,
17 + required this.secondGradientBackgroundColor,
18 + required this.thirdGradientBackgroundColor,
19 + required this.textColor,
20 + required this.indicatorDotTheme,
21 + Color? mainActionsIconColor,
22 + Color? pageTitleTextColor,
23 + Color? cardTextColor})
24 + : pageTitleTextColor = pageTitleTextColor ?? textColor,
25 + mainActionsIconColor = mainActionsIconColor ?? textColor,
26 + cardTextColor = cardTextColor ?? textColor;
27 +
28 + @override
29 + DashboardPageTheme copyWith(
30 + {Color? firstGradientBackgroundColor,
31 + Color? secondGradientBackgroundColor,
32 + Color? thirdGradientBackgroundColor,
33 + Color? textColor,
34 + IndicatorDotTheme? indicatorDotTheme,
35 + Color? pageTitleTextColor,
36 + Color? mainActionsIconColor,
37 + Color? cardTextColor}) =>
38 + DashboardPageTheme(
39 + firstGradientBackgroundColor:
40 + firstGradientBackgroundColor ?? this.firstGradientBackgroundColor,
41 + secondGradientBackgroundColor: secondGradientBackgroundColor ??
42 + this.secondGradientBackgroundColor,
43 + thirdGradientBackgroundColor:
44 + thirdGradientBackgroundColor ?? this.thirdGradientBackgroundColor,
45 + textColor: textColor ?? this.textColor,
46 + indicatorDotTheme: indicatorDotTheme ?? this.indicatorDotTheme,
47 + pageTitleTextColor: pageTitleTextColor ?? this.pageTitleTextColor,
48 + mainActionsIconColor:
49 + mainActionsIconColor ?? this.mainActionsIconColor,
50 + cardTextColor: cardTextColor ?? this.cardTextColor);
51 +
52 + @override
53 + DashboardPageTheme lerp(ThemeExtension<DashboardPageTheme>? other, double t) {
54 + if (other is! DashboardPageTheme) {
55 + return this;
56 + }
57 +
58 + return DashboardPageTheme(
59 + firstGradientBackgroundColor: Color.lerp(firstGradientBackgroundColor,
60 + other.firstGradientBackgroundColor, t) ??
61 + firstGradientBackgroundColor,
62 + secondGradientBackgroundColor: Color.lerp(secondGradientBackgroundColor,
63 + other.secondGradientBackgroundColor, t) ??
64 + secondGradientBackgroundColor,
65 + thirdGradientBackgroundColor: Color.lerp(thirdGradientBackgroundColor,
66 + other.thirdGradientBackgroundColor, t) ??
67 + thirdGradientBackgroundColor,
68 + textColor: Color.lerp(textColor, other.textColor, t) ?? textColor,
69 + indicatorDotTheme: indicatorDotTheme.lerp(other.indicatorDotTheme, t),
70 + pageTitleTextColor:
71 + Color.lerp(pageTitleTextColor, other.pageTitleTextColor, t) ??
72 + pageTitleTextColor,
73 + mainActionsIconColor:
74 + Color.lerp(mainActionsIconColor, other.mainActionsIconColor, t) ??
75 + mainActionsIconColor,
76 + cardTextColor:
77 + Color.lerp(cardTextColor, other.cardTextColor, t) ?? cardTextColor);
78 + }
79 +}
lib/themes/extensions/exchange_page_theme.dart new
+88
@@ -0,0 +1,88 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class ExchangePageTheme extends ThemeExtension<ExchangePageTheme> {
4 + final Color hintTextColor;
5 + final Color receiveAmountColor;
6 + final Color firstGradientTopPanelColor;
7 + final Color secondGradientTopPanelColor;
8 + final Color firstGradientBottomPanelColor;
9 + final Color secondGradientBottomPanelColor;
10 + final Color textFieldBorderTopPanelColor;
11 + final Color textFieldBorderBottomPanelColor;
12 + final Color textFieldButtonColor;
13 + final Color buttonBackgroundColor;
14 + final Color qrCodeColor;
15 + final Color dividerCodeColor;
16 +
17 + ExchangePageTheme(
18 + {required this.hintTextColor,
19 + required this.receiveAmountColor,
20 + required this.firstGradientTopPanelColor,
21 + required this.secondGradientTopPanelColor,
22 + required this.firstGradientBottomPanelColor,
23 + required this.secondGradientBottomPanelColor,
24 + required this.textFieldBorderTopPanelColor,
25 + required this.textFieldBorderBottomPanelColor,
26 + required this.textFieldButtonColor,
27 + required this.buttonBackgroundColor,
28 + required this.qrCodeColor,
29 + required this.dividerCodeColor});
30 +
31 + @override
32 + ExchangePageTheme copyWith({
33 + Color? hintTextColor,
34 + Color? receiveAmountColor,
35 + Color? firstGradientTopPanelColor,
36 + Color? secondGradientTopPanelColor,
37 + Color? firstGradientBottomPanelColor,
38 + Color? secondGradientBottomPanelColor,
39 + Color? textFieldBorderTopPanelColor,
40 + Color? textFieldBorderBottomPanelColor,
41 + Color? textFieldButtonColor,
42 + Color? buttonBackgroundColor,
43 + Color? qrCodeColor,
44 + Color? dividerCodeColor,
45 + }) =>
46 + ExchangePageTheme(
47 + hintTextColor: hintTextColor ?? this.hintTextColor,
48 + receiveAmountColor: receiveAmountColor ?? this.receiveAmountColor,
49 + firstGradientTopPanelColor:
50 + firstGradientTopPanelColor ?? this.firstGradientTopPanelColor,
51 + secondGradientTopPanelColor:
52 + secondGradientTopPanelColor ?? this.secondGradientTopPanelColor,
53 + firstGradientBottomPanelColor: firstGradientBottomPanelColor ??
54 + this.firstGradientBottomPanelColor,
55 + secondGradientBottomPanelColor: secondGradientBottomPanelColor ??
56 + this.secondGradientBottomPanelColor,
57 + textFieldBorderTopPanelColor:
58 + textFieldBorderTopPanelColor ?? this.textFieldBorderTopPanelColor,
59 + textFieldBorderBottomPanelColor: textFieldBorderBottomPanelColor ??
60 + this.textFieldBorderBottomPanelColor,
61 + textFieldButtonColor:
62 + textFieldButtonColor ?? this.textFieldButtonColor,
63 + buttonBackgroundColor:
64 + buttonBackgroundColor ?? this.buttonBackgroundColor,
65 + qrCodeColor: qrCodeColor ?? this.qrCodeColor,
66 + dividerCodeColor: dividerCodeColor ?? this.dividerCodeColor);
67 +
68 + @override
69 + ExchangePageTheme lerp(ThemeExtension<ExchangePageTheme>? other, double t) {
70 + if (other is! ExchangePageTheme) {
71 + return this;
72 + }
73 +
74 + return ExchangePageTheme(
75 + hintTextColor: Color.lerp(hintTextColor, other.hintTextColor, t) ?? hintTextColor,
76 + receiveAmountColor: Color.lerp(receiveAmountColor, other.receiveAmountColor, t) ?? receiveAmountColor,
77 + firstGradientTopPanelColor: Color.lerp(firstGradientTopPanelColor, other.firstGradientTopPanelColor, t) ?? firstGradientTopPanelColor,
78 + secondGradientTopPanelColor: Color.lerp(secondGradientTopPanelColor, other.secondGradientTopPanelColor, t) ?? secondGradientTopPanelColor,
79 + firstGradientBottomPanelColor: Color.lerp(firstGradientBottomPanelColor, other.firstGradientBottomPanelColor, t) ?? firstGradientBottomPanelColor,
80 + secondGradientBottomPanelColor: Color.lerp(secondGradientBottomPanelColor, other.secondGradientBottomPanelColor, t) ?? secondGradientBottomPanelColor,
81 + textFieldBorderTopPanelColor: Color.lerp(textFieldBorderTopPanelColor, other.textFieldBorderTopPanelColor, t) ?? textFieldBorderTopPanelColor,
82 + textFieldBorderBottomPanelColor: Color.lerp(textFieldBorderBottomPanelColor, other.textFieldBorderBottomPanelColor, t) ?? textFieldBorderBottomPanelColor,
83 + textFieldButtonColor: Color.lerp(textFieldButtonColor, other.textFieldButtonColor, t) ?? textFieldButtonColor,
84 + buttonBackgroundColor: Color.lerp(buttonBackgroundColor, other.buttonBackgroundColor, t) ?? buttonBackgroundColor,
85 + qrCodeColor: Color.lerp(qrCodeColor, other.qrCodeColor, t) ?? qrCodeColor,
86 + dividerCodeColor: Color.lerp(dividerCodeColor, other.dividerCodeColor, t) ?? dividerCodeColor);
87 + }
88 +}
lib/themes/extensions/filter_theme.dart new
+68
@@ -0,0 +1,68 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class FilterTheme extends ThemeExtension<FilterTheme> {
4 + final Color checkboxFirstGradientColor;
5 + final Color checkboxSecondGradientColor;
6 + final Color checkboxBoundsColor;
7 + final Color checkboxBackgroundColor;
8 + final Color titlesColor;
9 + final Color buttonColor;
10 + final Color iconColor;
11 +
12 + FilterTheme(
13 + {required this.checkboxFirstGradientColor,
14 + required this.checkboxSecondGradientColor,
15 + required this.checkboxBoundsColor,
16 + required this.checkboxBackgroundColor,
17 + required this.titlesColor,
18 + required this.buttonColor,
19 + required this.iconColor});
20 +
21 + @override
22 + FilterTheme copyWith({
23 + Color? checkboxFirstGradientColor,
24 + Color? checkboxSecondGradientColor,
25 + Color? checkboxBoundsColor,
26 + Color? checkboxBackgroundColor,
27 + Color? titlesColor,
28 + Color? buttonColor,
29 + Color? iconColor,
30 + }) =>
31 + FilterTheme(
32 + checkboxFirstGradientColor:
33 + checkboxFirstGradientColor ?? this.checkboxFirstGradientColor,
34 + checkboxSecondGradientColor:
35 + checkboxSecondGradientColor ?? this.checkboxSecondGradientColor,
36 + checkboxBoundsColor: checkboxBoundsColor ?? this.checkboxBoundsColor,
37 + checkboxBackgroundColor:
38 + checkboxBackgroundColor ?? this.checkboxBackgroundColor,
39 + titlesColor: titlesColor ?? this.titlesColor,
40 + buttonColor: buttonColor ?? this.buttonColor,
41 + iconColor: iconColor ?? this.iconColor);
42 +
43 + @override
44 + FilterTheme lerp(ThemeExtension<FilterTheme>? other, double t) {
45 + if (other is! FilterTheme) {
46 + return this;
47 + }
48 +
49 + return FilterTheme(
50 + checkboxFirstGradientColor: Color.lerp(checkboxFirstGradientColor,
51 + other.checkboxFirstGradientColor, t) ??
52 + this.checkboxFirstGradientColor,
53 + checkboxSecondGradientColor: Color.lerp(checkboxSecondGradientColor,
54 + other.checkboxSecondGradientColor, t) ??
55 + this.checkboxSecondGradientColor,
56 + checkboxBoundsColor:
57 + Color.lerp(checkboxBoundsColor, other.checkboxBoundsColor, t) ??
58 + this.checkboxBoundsColor,
59 + checkboxBackgroundColor: Color.lerp(
60 + checkboxBackgroundColor, other.checkboxBackgroundColor, t) ??
61 + this.checkboxBackgroundColor,
62 + titlesColor:
63 + Color.lerp(titlesColor, other.titlesColor, t) ?? this.titlesColor,
64 + buttonColor:
65 + Color.lerp(buttonColor, other.buttonColor, t) ?? this.buttonColor,
66 + iconColor: Color.lerp(iconColor, other.iconColor, t) ?? this.iconColor);
67 + }
68 +}
lib/themes/extensions/indicator_dot_theme.dart new
+30
@@ -0,0 +1,30 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class IndicatorDotTheme extends ThemeExtension<IndicatorDotTheme> {
4 + final Color indicatorColor;
5 + final Color activeIndicatorColor;
6 +
7 + IndicatorDotTheme(
8 + {required this.indicatorColor, required this.activeIndicatorColor});
9 +
10 + @override
11 + IndicatorDotTheme copyWith(
12 + {Color? indicatorColor, Color? actionButtonColor}) =>
13 + IndicatorDotTheme(
14 + indicatorColor: indicatorColor ?? this.indicatorColor,
15 + activeIndicatorColor: actionButtonColor ?? this.activeIndicatorColor);
16 +
17 + @override
18 + IndicatorDotTheme lerp(ThemeExtension<IndicatorDotTheme>? other, double t) {
19 + if (other is! IndicatorDotTheme) {
20 + return this;
21 + }
22 +
23 + return IndicatorDotTheme(
24 + indicatorColor: Color.lerp(indicatorColor, other.indicatorColor, t) ??
25 + indicatorColor,
26 + activeIndicatorColor:
27 + Color.lerp(activeIndicatorColor, other.activeIndicatorColor, t) ??
28 + activeIndicatorColor);
29 + }
30 +}
lib/themes/extensions/info_theme.dart new
+21
@@ -0,0 +1,21 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class InfoTheme extends ThemeExtension<InfoTheme> {
4 + final Color textColor;
5 +
6 + InfoTheme({required this.textColor});
7 +
8 + @override
9 + InfoTheme copyWith({Color? textColor}) =>
10 + InfoTheme(textColor: textColor ?? this.textColor);
11 +
12 + @override
13 + InfoTheme lerp(ThemeExtension<InfoTheme>? other, double t) {
14 + if (other is! InfoTheme) {
15 + return this;
16 + }
17 +
18 + return InfoTheme(
19 + textColor: Color.lerp(textColor, other.textColor, t) ?? textColor);
20 + }
21 +}
lib/themes/extensions/keyboard_theme.dart new
+26
@@ -0,0 +1,26 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class KeyboardTheme extends ThemeExtension<KeyboardTheme> {
4 + final Color keyboardBarColor;
5 +
6 + KeyboardTheme({required this.keyboardBarColor});
7 +
8 + @override
9 + Object get type => KeyboardTheme;
10 +
11 + @override
12 + KeyboardTheme copyWith({Color? keyboardBarColor}) => KeyboardTheme(
13 + keyboardBarColor: keyboardBarColor ?? this.keyboardBarColor);
14 +
15 + @override
16 + KeyboardTheme lerp(ThemeExtension<KeyboardTheme>? other, double t) {
17 + if (other is! KeyboardTheme) {
18 + return this;
19 + }
20 +
21 + return KeyboardTheme(
22 + keyboardBarColor:
23 + Color.lerp(keyboardBarColor, other.keyboardBarColor, t) ??
24 + keyboardBarColor);
25 + }
26 +}
lib/themes/extensions/menu_theme.dart new
+75
@@ -0,0 +1,75 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class CakeMenuTheme extends ThemeExtension<CakeMenuTheme> {
4 + final Color headerFirstGradientColor;
5 + final Color headerSecondGradientColor;
6 + final Color subnameTextColor;
7 + final Color dividerColor;
8 + final Color backgroundColor;
9 + final Color iconColor;
10 + final Color settingActionsIconColor;
11 + final Color settingTitleColor;
12 +
13 + CakeMenuTheme(
14 + {required this.headerFirstGradientColor,
15 + required this.headerSecondGradientColor,
16 + required this.backgroundColor,
17 + required this.subnameTextColor,
18 + required this.dividerColor,
19 + required this.iconColor,
20 + required this.settingActionsIconColor,
21 + required this.settingTitleColor});
22 +
23 + @override
24 + CakeMenuTheme copyWith(
25 + {Color? headerFirstGradientColor,
26 + Color? headerSecondGradientColor,
27 + Color? backgroundColor,
28 + Color? subnameTextColor,
29 + Color? dividerColor,
30 + Color? iconColor,
31 + Color? settingActionsIconColor,
32 + Color? settingTitleColor}) =>
33 + CakeMenuTheme(
34 + headerFirstGradientColor:
35 + headerFirstGradientColor ?? this.headerFirstGradientColor,
36 + headerSecondGradientColor:
37 + headerSecondGradientColor ?? this.headerSecondGradientColor,
38 + backgroundColor: backgroundColor ?? this.backgroundColor,
39 + subnameTextColor: subnameTextColor ?? this.subnameTextColor,
40 + dividerColor: dividerColor ?? this.dividerColor,
41 + iconColor: iconColor ?? this.iconColor,
42 + settingActionsIconColor:
43 + settingActionsIconColor ?? this.settingActionsIconColor,
44 + settingTitleColor: settingTitleColor ?? this.settingTitleColor);
45 +
46 + @override
47 + CakeMenuTheme lerp(ThemeExtension<CakeMenuTheme>? other, double t) {
48 + if (other is! CakeMenuTheme) {
49 + return this;
50 + }
51 +
52 + return CakeMenuTheme(
53 + headerFirstGradientColor: Color.lerp(
54 + headerFirstGradientColor, other.headerFirstGradientColor, t) ??
55 + headerFirstGradientColor,
56 + headerSecondGradientColor: Color.lerp(headerSecondGradientColor,
57 + other.headerSecondGradientColor, t) ??
58 + headerSecondGradientColor,
59 + backgroundColor:
60 + Color.lerp(backgroundColor, other.backgroundColor, t) ??
61 + backgroundColor,
62 + subnameTextColor:
63 + Color.lerp(subnameTextColor, other.subnameTextColor, t) ??
64 + subnameTextColor,
65 + dividerColor:
66 + Color.lerp(dividerColor, other.dividerColor, t) ?? dividerColor,
67 + iconColor: Color.lerp(iconColor, other.iconColor, t) ?? iconColor,
68 + settingActionsIconColor: Color.lerp(
69 + settingActionsIconColor, other.settingActionsIconColor, t) ??
70 + settingActionsIconColor,
71 + settingTitleColor: Color.lerp(
72 + settingTitleColor, other.settingTitleColor, t) ??
73 + settingTitleColor);
74 + }
75 +}
lib/themes/extensions/new_wallet_theme.dart new
+30
@@ -0,0 +1,30 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class NewWalletTheme extends ThemeExtension<NewWalletTheme> {
4 + final Color hintTextColor;
5 + final Color underlineColor;
6 +
7 + NewWalletTheme({required this.hintTextColor, required this.underlineColor});
8 +
9 + @override
10 + Object get type => NewWalletTheme;
11 +
12 + @override
13 + NewWalletTheme copyWith({Color? hintTextColor, Color? underlineColor}) =>
14 + NewWalletTheme(
15 + hintTextColor: hintTextColor ?? this.hintTextColor,
16 + underlineColor: underlineColor ?? this.underlineColor);
17 +
18 + @override
19 + NewWalletTheme lerp(ThemeExtension<NewWalletTheme>? other, double t) {
20 + if (other is! NewWalletTheme) {
21 + return this;
22 + }
23 +
24 + return NewWalletTheme(
25 + hintTextColor:
26 + Color.lerp(hintTextColor, other.hintTextColor, t) ?? hintTextColor,
27 + underlineColor: Color.lerp(underlineColor, other.underlineColor, t) ??
28 + underlineColor);
29 + }
30 +}
lib/themes/extensions/order_theme.dart new
+21
@@ -0,0 +1,21 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class OrderTheme extends ThemeExtension<OrderTheme> {
4 + final Color iconColor;
5 +
6 + OrderTheme({required this.iconColor});
7 +
8 + @override
9 + OrderTheme copyWith({Color? iconColor}) =>
10 + OrderTheme(iconColor: iconColor ?? this.iconColor);
11 +
12 + @override
13 + OrderTheme lerp(ThemeExtension<OrderTheme>? other, double t) {
14 + if (other is! OrderTheme) {
15 + return this;
16 + }
17 +
18 + return OrderTheme(
19 + iconColor: Color.lerp(iconColor, other.iconColor, t) ?? iconColor);
20 + }
21 +}
lib/themes/extensions/picker_theme.dart new
+54
@@ -0,0 +1,54 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class PickerTheme extends ThemeExtension<PickerTheme> {
4 + final Color dividerColor;
5 + final Color? searchIconColor;
6 + final Color searchBackgroundFillColor;
7 + final Color searchTextColor;
8 + final Color? searchHintColor;
9 +
10 + PickerTheme(
11 + {required this.dividerColor,
12 + this.searchIconColor,
13 + required this.searchBackgroundFillColor,
14 + required this.searchTextColor,
15 + this.searchHintColor});
16 +
17 + @override
18 + PickerTheme copyWith(
19 + {Color? dividerColor,
20 + Color? searchIconColor,
21 + Color? searchBackgroundFillColor,
22 + Color? searchTextColor,
23 + Color? searchHintColor}) =>
24 + PickerTheme(
25 + dividerColor: dividerColor ?? this.dividerColor,
26 + searchIconColor: searchIconColor ?? this.searchIconColor,
27 + searchBackgroundFillColor:
28 + searchBackgroundFillColor ?? this.searchBackgroundFillColor,
29 + searchTextColor: searchTextColor ?? this.searchTextColor,
30 + searchHintColor: searchHintColor ?? this.searchHintColor);
31 +
32 + @override
33 + PickerTheme lerp(ThemeExtension<PickerTheme>? other, double t) {
34 + if (other is! PickerTheme) {
35 + return this;
36 + }
37 +
38 + return PickerTheme(
39 + dividerColor:
40 + Color.lerp(dividerColor, other.dividerColor, t) ?? dividerColor,
41 + searchIconColor:
42 + Color.lerp(searchIconColor, other.searchIconColor, t) ??
43 + searchIconColor,
44 + searchBackgroundFillColor: Color.lerp(searchBackgroundFillColor,
45 + other.searchBackgroundFillColor, t) ??
46 + searchBackgroundFillColor,
47 + searchTextColor:
48 + Color.lerp(searchTextColor, other.searchTextColor, t) ??
49 + searchTextColor,
50 + searchHintColor:
51 + Color.lerp(searchHintColor, other.searchHintColor, t) ??
52 + searchHintColor);
53 + }
54 +}
lib/themes/extensions/pin_code_theme.dart new
+28
@@ -0,0 +1,28 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class PinCodeTheme extends ThemeExtension<PinCodeTheme> {
4 + final Color indicatorsColor;
5 + final Color switchColor;
6 +
7 + PinCodeTheme({required this.indicatorsColor, required this.switchColor});
8 +
9 + @override
10 + PinCodeTheme copyWith({Color? indicatorsColor, Color? switchColor}) =>
11 + PinCodeTheme(
12 + indicatorsColor: indicatorsColor ?? this.indicatorsColor,
13 + switchColor: switchColor ?? this.switchColor);
14 +
15 + @override
16 + PinCodeTheme lerp(ThemeExtension<PinCodeTheme>? other, double t) {
17 + if (other is! PinCodeTheme) {
18 + return this;
19 + }
20 +
21 + return PinCodeTheme(
22 + indicatorsColor:
23 + Color.lerp(indicatorsColor, other.indicatorsColor, t) ??
24 + indicatorsColor,
25 + switchColor:
26 + Color.lerp(switchColor, other.switchColor, t) ?? switchColor);
27 + }
28 +}
lib/themes/extensions/placeholder_theme.dart new
+20
@@ -0,0 +1,20 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class PlaceholderTheme extends ThemeExtension<PlaceholderTheme> {
4 + final Color color;
5 +
6 + PlaceholderTheme({required this.color});
7 +
8 + @override
9 + PlaceholderTheme copyWith({Color? color}) =>
10 + PlaceholderTheme(color: color ?? this.color);
11 +
12 + @override
13 + PlaceholderTheme lerp(ThemeExtension<PlaceholderTheme>? other, double t) {
14 + if (other is! PlaceholderTheme) {
15 + return this;
16 + }
17 +
18 + return PlaceholderTheme(color: Color.lerp(color, other.color, t) ?? color);
19 + }
20 +}
lib/themes/extensions/qr_code_theme.dart new
+28
@@ -0,0 +1,28 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class QRCodeTheme extends ThemeExtension<QRCodeTheme> {
4 + final Color qrCodeColor;
5 + final Color qrWidgetCopyButtonColor;
6 +
7 + QRCodeTheme(
8 + {required this.qrCodeColor, required this.qrWidgetCopyButtonColor});
9 +
10 + @override
11 + QRCodeTheme copyWith({Color? qrCodeColor, Color? qrWidgetCopyButtonColor}) =>
12 + QRCodeTheme(
13 + qrCodeColor: qrCodeColor ?? this.qrCodeColor,
14 + qrWidgetCopyButtonColor:
15 + qrWidgetCopyButtonColor ?? this.qrWidgetCopyButtonColor);
16 +
17 + @override
18 + QRCodeTheme lerp(ThemeExtension<QRCodeTheme>? other, double t) {
19 + if (other is! QRCodeTheme) {
20 + return this;
21 + }
22 +
23 + return QRCodeTheme(
24 + qrCodeColor: Color.lerp(qrCodeColor, other.qrCodeColor, t)!,
25 + qrWidgetCopyButtonColor: Color.lerp(
26 + qrWidgetCopyButtonColor, other.qrWidgetCopyButtonColor, t)!);
27 + }
28 +}
lib/themes/extensions/receive_page_theme.dart new
+70
@@ -0,0 +1,70 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class ReceivePageTheme extends ThemeExtension<ReceivePageTheme> {
4 + final Color currentTileBackgroundColor;
5 + final Color currentTileTextColor;
6 + final Color tilesBackgroundColor;
7 + final Color tilesTextColor;
8 + final Color iconsBackgroundColor;
9 + final Color iconsColor;
10 + final Color amountBottomBorderColor;
11 + final Color amountHintTextColor;
12 +
13 + ReceivePageTheme(
14 + {required this.currentTileBackgroundColor,
15 + required this.currentTileTextColor,
16 + required this.tilesBackgroundColor,
17 + required this.tilesTextColor,
18 + required this.iconsBackgroundColor,
19 + required this.iconsColor,
20 + required this.amountBottomBorderColor,
21 + required this.amountHintTextColor});
22 +
23 + @override
24 + ReceivePageTheme copyWith(
25 + {Color? currentTileBackgroundColor,
26 + Color? currentTileTextColor,
27 + Color? tilesBackgroundColor,
28 + Color? tilesTextColor,
29 + Color? iconsBackgroundColor,
30 + Color? iconsColor,
31 + Color? amountBottomBorderColor,
32 + Color? amountHintTextColor}) =>
33 + ReceivePageTheme(
34 + currentTileBackgroundColor:
35 + currentTileBackgroundColor ?? this.currentTileBackgroundColor,
36 + currentTileTextColor:
37 + currentTileTextColor ?? this.currentTileTextColor,
38 + tilesBackgroundColor:
39 + tilesBackgroundColor ?? this.tilesBackgroundColor,
40 + tilesTextColor: tilesTextColor ?? this.tilesTextColor,
41 + iconsBackgroundColor:
42 + iconsBackgroundColor ?? this.iconsBackgroundColor,
43 + iconsColor: iconsColor ?? this.iconsColor,
44 + amountBottomBorderColor:
45 + amountBottomBorderColor ?? this.amountBottomBorderColor,
46 + amountHintTextColor: amountHintTextColor ?? this.amountHintTextColor);
47 +
48 + @override
49 + ReceivePageTheme lerp(ThemeExtension<ReceivePageTheme>? other, double t) {
50 + if (other is! ReceivePageTheme) {
51 + return this;
52 + }
53 +
54 + return ReceivePageTheme(
55 + currentTileBackgroundColor: Color.lerp(
56 + currentTileBackgroundColor, other.currentTileBackgroundColor, t)!,
57 + currentTileTextColor:
58 + Color.lerp(currentTileTextColor, other.currentTileTextColor, t)!,
59 + tilesBackgroundColor:
60 + Color.lerp(tilesBackgroundColor, other.tilesBackgroundColor, t)!,
61 + tilesTextColor: Color.lerp(tilesTextColor, other.tilesTextColor, t)!,
62 + iconsBackgroundColor:
63 + Color.lerp(iconsBackgroundColor, other.iconsBackgroundColor, t)!,
64 + iconsColor: Color.lerp(iconsColor, other.iconsColor, t)!,
65 + amountBottomBorderColor: Color.lerp(
66 + amountBottomBorderColor, other.amountBottomBorderColor, t)!,
67 + amountHintTextColor:
68 + Color.lerp(amountHintTextColor, other.amountHintTextColor, t)!);
69 + }
70 +}
lib/themes/extensions/seed_widget_theme.dart new
+22
@@ -0,0 +1,22 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class SeedWidgetTheme extends ThemeExtension<SeedWidgetTheme> {
4 + final Color hintTextColor;
5 +
6 + SeedWidgetTheme({required this.hintTextColor});
7 +
8 + @override
9 + SeedWidgetTheme copyWith({Color? hintTextColor}) =>
10 + SeedWidgetTheme(hintTextColor: hintTextColor ?? this.hintTextColor);
11 +
12 + @override
13 + SeedWidgetTheme lerp(ThemeExtension<SeedWidgetTheme>? other, double t) {
14 + if (other is! SeedWidgetTheme) {
15 + return this;
16 + }
17 +
18 + return SeedWidgetTheme(
19 + hintTextColor:
20 + Color.lerp(hintTextColor, other.hintTextColor, t) ?? hintTextColor);
21 + }
22 +}
lib/themes/extensions/send_page_theme.dart new
+117
@@ -0,0 +1,117 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class SendPageTheme extends ThemeExtension<SendPageTheme> {
4 + final Color templateTitleColor;
5 + final Color templateBackgroundColor;
6 + final Color templateNewTextColor;
7 + final Color templateSelectedCurrencyBackgroundColor;
8 + final Color templateSelectedCurrencyTitleColor;
9 + final Color templateDottedBorderColor;
10 + final Color estimatedFeeColor;
11 + final Color textFieldButtonIconColor;
12 + final Color textFieldButtonColor;
13 + final Color textFieldHintColor;
14 + final Color textFieldBorderColor;
15 + final Color firstGradientColor;
16 + final Color secondGradientColor;
17 + final Color indicatorDotColor;
18 +
19 + SendPageTheme(
20 + {required this.templateTitleColor,
21 + required this.templateBackgroundColor,
22 + required this.templateNewTextColor,
23 + required this.templateSelectedCurrencyBackgroundColor,
24 + required this.templateSelectedCurrencyTitleColor,
25 + required this.templateDottedBorderColor,
26 + required this.estimatedFeeColor,
27 + required this.textFieldButtonIconColor,
28 + required this.textFieldButtonColor,
29 + required this.textFieldHintColor,
30 + required this.textFieldBorderColor,
31 + required this.firstGradientColor,
32 + required this.secondGradientColor,
33 + required this.indicatorDotColor});
34 +
35 + @override
36 + SendPageTheme copyWith(
37 + {Color? templateTitleColor,
38 + Color? templateBackgroundColor,
39 + Color? templateNewTextColor,
40 + Color? templateSelectedCurrencyBackgroundColor,
41 + Color? templateSelectedCurrencyTitleColor,
42 + Color? templateDottedBorderColor,
43 + Color? estimatedFeeColor,
44 + Color? textFieldButtonIconColor,
45 + Color? textFieldButtonColor,
46 + Color? textFieldHintColor,
47 + Color? textFieldBorderColor,
48 + Color? firstGradientColor,
49 + Color? secondGradientColor,
50 + Color? indicatorDotColor}) =>
51 + SendPageTheme(
52 + templateTitleColor: templateTitleColor ?? this.templateTitleColor,
53 + templateBackgroundColor:
54 + templateBackgroundColor ?? this.templateBackgroundColor,
55 + templateNewTextColor:
56 + templateNewTextColor ?? this.templateNewTextColor,
57 + templateSelectedCurrencyBackgroundColor:
58 + templateSelectedCurrencyBackgroundColor ??
59 + this.templateSelectedCurrencyBackgroundColor,
60 + templateSelectedCurrencyTitleColor:
61 + templateSelectedCurrencyTitleColor ??
62 + this.templateSelectedCurrencyTitleColor,
63 + templateDottedBorderColor:
64 + templateDottedBorderColor ?? this.templateDottedBorderColor,
65 + estimatedFeeColor: estimatedFeeColor ?? this.estimatedFeeColor,
66 + textFieldButtonIconColor:
67 + textFieldButtonIconColor ?? this.textFieldButtonIconColor,
68 + textFieldButtonColor:
69 + textFieldButtonColor ?? this.textFieldButtonColor,
70 + textFieldHintColor: textFieldHintColor ?? this.textFieldHintColor,
71 + textFieldBorderColor:
72 + textFieldBorderColor ?? this.textFieldBorderColor,
73 + firstGradientColor: firstGradientColor ?? this.firstGradientColor,
74 + secondGradientColor: secondGradientColor ?? this.secondGradientColor,
75 + indicatorDotColor: indicatorDotColor ?? this.indicatorDotColor);
76 +
77 + @override
78 + SendPageTheme lerp(ThemeExtension<SendPageTheme>? other, double t) {
79 + if (other is! SendPageTheme) {
80 + return this;
81 + }
82 +
83 + return SendPageTheme(
84 + templateTitleColor:
85 + Color.lerp(templateTitleColor, other.templateTitleColor, t)!,
86 + templateBackgroundColor: Color.lerp(
87 + templateBackgroundColor, other.templateBackgroundColor, t)!,
88 + templateNewTextColor:
89 + Color.lerp(templateNewTextColor, other.templateNewTextColor, t)!,
90 + templateSelectedCurrencyBackgroundColor: Color.lerp(
91 + templateSelectedCurrencyBackgroundColor,
92 + other.templateSelectedCurrencyBackgroundColor,
93 + t)!,
94 + templateSelectedCurrencyTitleColor: Color.lerp(
95 + templateSelectedCurrencyTitleColor,
96 + other.templateSelectedCurrencyTitleColor,
97 + t)!,
98 + templateDottedBorderColor: Color.lerp(
99 + templateDottedBorderColor, other.templateDottedBorderColor, t)!,
100 + estimatedFeeColor:
101 + Color.lerp(estimatedFeeColor, other.estimatedFeeColor, t)!,
102 + textFieldButtonIconColor: Color.lerp(
103 + textFieldButtonIconColor, other.textFieldButtonIconColor, t)!,
104 + textFieldButtonColor:
105 + Color.lerp(textFieldButtonColor, other.textFieldButtonColor, t)!,
106 + textFieldHintColor:
107 + Color.lerp(textFieldHintColor, other.textFieldHintColor, t)!,
108 + textFieldBorderColor:
109 + Color.lerp(textFieldBorderColor, other.textFieldBorderColor, t)!,
110 + firstGradientColor:
111 + Color.lerp(firstGradientColor, other.firstGradientColor, t)!,
112 + secondGradientColor:
113 + Color.lerp(secondGradientColor, other.secondGradientColor, t)!,
114 + indicatorDotColor:
115 + Color.lerp(indicatorDotColor, other.indicatorDotColor, t)!);
116 + }
117 +}
lib/themes/extensions/support_page_theme.dart new
+21
@@ -0,0 +1,21 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class SupportPageTheme extends ThemeExtension<SupportPageTheme> {
4 + final Color iconColor;
5 +
6 + SupportPageTheme({required this.iconColor});
7 +
8 + @override
9 + SupportPageTheme copyWith({Color? iconColor}) =>
10 + SupportPageTheme(iconColor: iconColor ?? this.iconColor);
11 +
12 + @override
13 + SupportPageTheme lerp(ThemeExtension<SupportPageTheme>? other, double t) {
14 + if (other is! SupportPageTheme) {
15 + return this;
16 + }
17 +
18 + return SupportPageTheme(
19 + iconColor: Color.lerp(iconColor, other.iconColor, t) ?? iconColor);
20 + }
21 +}
lib/themes/extensions/sync_indicator_theme.dart new
+48
@@ -0,0 +1,48 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class SyncIndicatorTheme extends ThemeExtension<SyncIndicatorTheme> {
4 + final Color textColor;
5 + final Color syncedBackgroundColor;
6 + final Color notSyncedIconColor;
7 + final Color notSyncedBackgroundColor;
8 +
9 + SyncIndicatorTheme(
10 + {required this.textColor,
11 + required this.syncedBackgroundColor,
12 + required this.notSyncedIconColor,
13 + required this.notSyncedBackgroundColor});
14 +
15 + @override
16 + SyncIndicatorTheme copyWith({
17 + Color? textColor,
18 + Color? syncedBackgroundColor,
19 + Color? notSyncedIconColor,
20 + Color? notSyncedBackgroundColor,
21 + }) =>
22 + SyncIndicatorTheme(
23 + textColor: textColor ?? this.textColor,
24 + syncedBackgroundColor:
25 + syncedBackgroundColor ?? this.syncedBackgroundColor,
26 + notSyncedIconColor: notSyncedIconColor ?? this.notSyncedIconColor,
27 + notSyncedBackgroundColor:
28 + notSyncedBackgroundColor ?? this.notSyncedBackgroundColor);
29 +
30 + @override
31 + SyncIndicatorTheme lerp(ThemeExtension<SyncIndicatorTheme>? other, double t) {
32 + if (other is! SyncIndicatorTheme) {
33 + return this;
34 + }
35 +
36 + return SyncIndicatorTheme(
37 + textColor: Color.lerp(textColor, other.textColor, t) ?? textColor,
38 + syncedBackgroundColor:
39 + Color.lerp(syncedBackgroundColor, other.syncedBackgroundColor, t) ??
40 + syncedBackgroundColor,
41 + notSyncedIconColor:
42 + Color.lerp(notSyncedIconColor, other.notSyncedIconColor, t) ??
43 + notSyncedIconColor,
44 + notSyncedBackgroundColor: Color.lerp(
45 + notSyncedBackgroundColor, other.notSyncedBackgroundColor, t) ??
46 + notSyncedBackgroundColor);
47 + }
48 +}
lib/themes/extensions/transaction_trade_theme.dart new
+29
@@ -0,0 +1,29 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class TransactionTradeTheme extends ThemeExtension<TransactionTradeTheme> {
4 + final Color detailsTitlesColor;
5 + final Color rowsColor;
6 +
7 + TransactionTradeTheme(
8 + {required this.detailsTitlesColor, required this.rowsColor});
9 +
10 + @override
11 + TransactionTradeTheme copyWith(
12 + {Color? detailsTitlesColor, Color? rowsColor}) =>
13 + TransactionTradeTheme(
14 + detailsTitlesColor: detailsTitlesColor ?? this.detailsTitlesColor,
15 + rowsColor: rowsColor ?? this.rowsColor);
16 +
17 + @override
18 + TransactionTradeTheme lerp(
19 + ThemeExtension<TransactionTradeTheme>? other, double t) {
20 + if (other is! TransactionTradeTheme) {
21 + return this;
22 + }
23 +
24 + return TransactionTradeTheme(
25 + detailsTitlesColor:
26 + Color.lerp(detailsTitlesColor, other.detailsTitlesColor, t)!,
27 + rowsColor: Color.lerp(rowsColor, other.rowsColor, t)!);
28 + }
29 +}
lib/themes/extensions/wallet_list_theme.dart new
+38
@@ -0,0 +1,38 @@
1 +import 'package:flutter/material.dart';
2 +
3 +class WalletListTheme extends ThemeExtension<WalletListTheme> {
4 + final Color restoreWalletButtonTextColor;
5 + final Color createNewWalletButtonBackgroundColor;
6 +
7 + WalletListTheme(
8 + {required this.restoreWalletButtonTextColor,
9 + required this.createNewWalletButtonBackgroundColor});
10 +
11 + @override
12 + WalletListTheme copyWith(
13 + {Color? restoreWalletButtonTextColor,
14 + Color? createNewWalletButtonBackgroundColor}) =>
15 + WalletListTheme(
16 + restoreWalletButtonTextColor:
17 + restoreWalletButtonTextColor ?? this.restoreWalletButtonTextColor,
18 + createNewWalletButtonBackgroundColor:
19 + createNewWalletButtonBackgroundColor ??
20 + this.createNewWalletButtonBackgroundColor);
21 +
22 + @override
23 + WalletListTheme lerp(ThemeExtension<WalletListTheme>? other, double t) {
24 + if (other is! WalletListTheme) {
25 + return this;
26 + }
27 +
28 + return WalletListTheme(
29 + restoreWalletButtonTextColor: Color.lerp(restoreWalletButtonTextColor,
30 + other.restoreWalletButtonTextColor, t) ??
31 + restoreWalletButtonTextColor,
32 + createNewWalletButtonBackgroundColor: Color.lerp(
33 + createNewWalletButtonBackgroundColor,
34 + other.createNewWalletButtonBackgroundColor,
35 + t) ??
36 + createNewWalletButtonBackgroundColor);
37 + }
38 +}
lib/themes/high_contrast_theme.dart new
+118
@@ -0,0 +1,118 @@
1 +import 'package:cake_wallet/generated/i18n.dart';
2 +import 'package:cake_wallet/palette.dart';
3 +import 'package:cake_wallet/themes/extensions/account_list_theme.dart';
4 +import 'package:cake_wallet/themes/extensions/address_theme.dart';
5 +import 'package:cake_wallet/themes/extensions/balance_page_theme.dart';
6 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
7 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
8 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
9 +import 'package:cake_wallet/themes/extensions/filter_theme.dart';
10 +import 'package:cake_wallet/themes/extensions/indicator_dot_theme.dart';
11 +import 'package:cake_wallet/themes/extensions/menu_theme.dart';
12 +import 'package:cake_wallet/themes/extensions/picker_theme.dart';
13 +import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
14 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
15 +import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart';
16 +import 'package:cake_wallet/themes/monero_light_theme.dart';
17 +import 'package:flutter/material.dart';
18 +
19 +class HighContrastTheme extends MoneroLightTheme {
20 + HighContrastTheme({required int raw}) : super(raw: raw) {
21 + colorScheme = ColorScheme.fromSwatch(
22 + primarySwatch: Colors.grey,
23 + accentColor: primaryColor,
24 + backgroundColor: Colors.white,
25 + cardColor: containerColor,
26 + brightness: Brightness.light);
27 + }
28 +
29 + @override
30 + String get title => S.current.high_contrast_theme;
31 + @override
32 + Color get primaryColor => Colors.black;
33 + @override
34 + Color get containerColor => Palette.highContrastGray;
35 + @override
36 + Color get primaryTextColor => colorScheme.onBackground;
37 + @override
38 + Color get dialogBackgroundColor => Colors.white;
39 +
40 + @override
41 + CakeTextTheme get cakeTextTheme => super.cakeTextTheme.copyWith(
42 + buttonTextColor: Colors.white,
43 + buttonSecondaryTextColor: Colors.white.withOpacity(0.5));
44 +
45 + @override
46 + SyncIndicatorTheme get syncIndicatorStyle =>
47 + super.syncIndicatorStyle.copyWith(
48 + textColor: colorScheme.background,
49 + syncedBackgroundColor: containerColor);
50 +
51 + @override
52 + BalancePageTheme get balancePageTheme => super.balancePageTheme.copyWith(
53 + textColor: Colors.white,
54 + labelTextColor: Colors.grey,
55 + assetTitleColor: Colors.white,
56 + balanceAmountColor: Colors.white);
57 +
58 + @override
59 + DashboardPageTheme get dashboardPageTheme =>
60 + super.dashboardPageTheme.copyWith(
61 + textColor: Colors.black,
62 + cardTextColor: Colors.white,
63 + mainActionsIconColor: Colors.white,
64 + indicatorDotTheme: IndicatorDotTheme(
65 + indicatorColor: Colors.grey, activeIndicatorColor: Colors.black));
66 +
67 + @override
68 + ExchangePageTheme get exchangePageTheme => super
69 + .exchangePageTheme
70 + .copyWith(firstGradientTopPanelColor: containerColor);
71 +
72 + @override
73 + SendPageTheme get sendPageTheme => super.sendPageTheme.copyWith(
74 + templateTitleColor: Colors.white,
75 + templateBackgroundColor: Colors.black,
76 + firstGradientColor: containerColor);
77 +
78 + @override
79 + AddressTheme get addressTheme =>
80 + super.addressTheme.copyWith(actionButtonColor: Colors.grey);
81 +
82 + @override
83 + FilterTheme get filterTheme =>
84 + super.filterTheme.copyWith(iconColor: Colors.white);
85 +
86 + @override
87 + CakeMenuTheme get menuTheme => super.menuTheme.copyWith(
88 + settingTitleColor: Colors.black,
89 + headerFirstGradientColor: containerColor,
90 + iconColor: Colors.white);
91 +
92 + @override
93 + PickerTheme get pickerTheme => super.pickerTheme.copyWith(
94 + searchIconColor: Colors.white,
95 + searchHintColor: Colors.white,
96 + searchTextColor: Colors.white,
97 + searchBackgroundFillColor: Colors.grey);
98 +
99 + @override
100 + AccountListTheme get accountListTheme => super.accountListTheme.copyWith(
101 + tilesTextColor: Colors.black,
102 + tilesBackgroundColor: Colors.white,
103 + currentAccountBackgroundColor: containerColor,
104 + currentAccountTextColor: Colors.white,
105 + currentAccountAmountColor: Colors.white);
106 +
107 + @override
108 + ReceivePageTheme get receivePageTheme => super.receivePageTheme.copyWith(
109 + tilesTextColor: Colors.white,
110 + iconsBackgroundColor: Colors.grey,
111 + iconsColor: Colors.black);
112 +
113 + @override
114 + ThemeData get themeData => super.themeData.copyWith(
115 + disabledColor: Colors.grey,
116 + dialogTheme:
117 + super.themeData.dialogTheme.copyWith(backgroundColor: Colors.white));
118 +}
lib/themes/light_theme.dart
+209 -259
@@ -1,3 +1,29 @@
1 +import 'package:cake_wallet/themes/extensions/account_list_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/address_theme.dart';
3 +import 'package:cake_wallet/themes/extensions/alert_theme.dart';
4 +import 'package:cake_wallet/themes/extensions/balance_page_theme.dart';
5 +import 'package:cake_wallet/themes/extensions/cake_scrollbar_theme.dart';
6 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
7 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
8 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
9 +import 'package:cake_wallet/themes/extensions/filter_theme.dart';
10 +import 'package:cake_wallet/themes/extensions/indicator_dot_theme.dart';
11 +import 'package:cake_wallet/themes/extensions/info_theme.dart';
12 +import 'package:cake_wallet/themes/extensions/keyboard_theme.dart';
13 +import 'package:cake_wallet/themes/extensions/menu_theme.dart';
14 +import 'package:cake_wallet/themes/extensions/new_wallet_theme.dart';
15 +import 'package:cake_wallet/themes/extensions/order_theme.dart';
16 +import 'package:cake_wallet/themes/extensions/picker_theme.dart';
17 +import 'package:cake_wallet/themes/extensions/pin_code_theme.dart';
18 +import 'package:cake_wallet/themes/extensions/placeholder_theme.dart';
19 +import 'package:cake_wallet/themes/extensions/qr_code_theme.dart';
20 +import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
21 +import 'package:cake_wallet/themes/extensions/seed_widget_theme.dart';
22 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
23 +import 'package:cake_wallet/themes/extensions/support_page_theme.dart';
24 +import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart';
25 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
26 +import 'package:cake_wallet/themes/extensions/wallet_list_theme.dart';
27 import 'package:cake_wallet/themes/theme_base.dart';
28 import 'package:cake_wallet/generated/i18n.dart';
29 import 'package:cake_wallet/palette.dart';
@@ -8,268 +34,192 @@ class LightTheme extends ThemeBase {
34
35 @override
36 String get title => S.current.light_theme;
11 -
37 @override
38 ThemeType get type => ThemeType.light;
39 + @override
40 + Brightness get brightness => Brightness.light;
41 + @override
42 + Color get backgroundColor => Colors.white;
43 + @override
44 + Color get primaryColor => Palette.protectiveBlue;
45 + @override
46 + Color get primaryTextColor => Palette.darkBlueCraiola;
47 + @override
48 + Color get containerColor => Palette.blueAlice;
49 + @override
50 + Color get dialogBackgroundColor => Colors.white;
51
15 - ThemeData theme = ThemeData(
16 - fontFamily: 'Lato',
17 - brightness: Brightness.light,
18 - scaffoldBackgroundColor: Colors.white, // second gradient color
19 - primaryColor: Colors.white, // third gradient color
20 - indicatorColor:
21 - PaletteDark.darkCyanBlue.withOpacity(0.67), // page indicator
22 - hoverColor: Palette.darkBlueCraiola, // amount hint text (receive page)
23 - dividerColor: Palette.paleBlue,
24 - hintColor: Palette.gray,
25 - textTheme: TextTheme(
26 - // title -> titleLarge
27 - titleLarge: TextStyle(
28 - color: Palette.darkBlueCraiola, // sync_indicator text
29 - backgroundColor: Palette.blueAlice, // synced sync_indicator
30 - decorationColor: Palette.blueAlice.withOpacity(0.75), // not synced sync_indicator
31 - ),
32 - bodySmall: TextStyle(
33 - color: Palette.shineOrange, // not synced light
34 - decorationColor: PaletteDark.wildBlue, // filter icon
35 - ),
36 - labelSmall: TextStyle(
37 - color: Palette.blueAlice, // filter button
38 - backgroundColor: PaletteDark.darkCyanBlue, // date section row
39 - decorationColor:
40 - Palette.blueAlice // icons (transaction and trade rows)
41 - ),
42 - // subhead -> titleMedium
43 - titleMedium: TextStyle(
44 - color: Palette.blueAlice, // address button border
45 - decorationColor: PaletteDark.lightBlueGrey, // copy button (qr widget)
46 - ),
47 - // headline -> headlineSmall
48 - headlineSmall: TextStyle(
49 - color: Colors.white, // qr code
50 - decorationColor: Palette.darkBlueCraiola, // bottom border of amount (receive page)
51 - ),
52 - // display1 -> headlineMedium
53 - headlineMedium: TextStyle(
54 - color: PaletteDark.lightBlueGrey, // icons color (receive page)
55 - decorationColor: Palette.moderateLavender, // icons background (receive page)
56 - ),
57 - // display2 -> headldisplaySmalline3
58 - displaySmall: TextStyle(
59 - color:
60 - Palette.darkBlueCraiola, // text color of tiles (receive page)
61 - decorationColor:
62 - Palette.blueAlice // background of tiles (receive page)
63 - ),
64 - // display3 -> displayMedium
65 - displayMedium: TextStyle(
66 - color: Colors.white, // text color of current tile (receive page),
67 - //decorationColor: Palette.blueCraiola // background of current tile (receive page)
68 - decorationColor: Palette
69 - .blueCraiola // background of current tile (receive page)
70 - ),
71 - // display4 -> displayLarge
72 - displayLarge: TextStyle(
73 - color: Palette.violetBlue, // text color of tiles (account list)
74 - decorationColor:
75 - Colors.white // background of tiles (account list)
76 - ),
77 - // subtitle -> titleSmall
78 - titleSmall: TextStyle(
79 - color: Palette
80 - .protectiveBlue, // text color of current tile (account list)
81 - decorationColor:
82 - Colors.white // background of current tile (account list)
83 - ),
84 - // body -> bodyMedium
85 - bodyMedium: TextStyle(
86 - color: Palette.moderatePurpleBlue, // scrollbar thumb
87 - decorationColor: Palette.periwinkleCraiola // scrollbar background
88 - ),
89 - // body2 -> bodyLarge
90 - bodyLarge: TextStyle(
91 - color: Palette.moderateLavender, // menu header
92 - decorationColor: Colors.white, // menu background
93 - )
94 - ),
95 - scrollbarTheme: ScrollbarThemeData(
96 - thumbColor: MaterialStateProperty.all(Palette.moderatePurpleBlue),
97 - trackColor: MaterialStateProperty.all(Palette.periwinkleCraiola),
98 - radius: Radius.circular(3),
99 - thickness: MaterialStateProperty.all(6),
100 - thumbVisibility: MaterialStateProperty.all(true),
101 - crossAxisMargin: 6,
102 - ),
103 - primaryTextTheme: TextTheme(
104 - // title -> titleLarge
105 - titleLarge: TextStyle(
106 - color: Palette.darkBlueCraiola, // title color
107 - backgroundColor: Palette.wildPeriwinkle // textfield underline
108 - ),
109 - bodySmall: TextStyle(
110 - color: PaletteDark.pigeonBlue, // secondary text
111 - decorationColor: Palette.wildLavender // menu divider
112 - ),
113 - labelSmall: TextStyle(
114 - color: Palette.darkGray, // transaction/trade details titles
115 - decorationColor: PaletteDark.darkCyanBlue, // placeholder
116 - ),
117 - // subhead -> titleMedium
118 - titleMedium: TextStyle(
119 - color: Palette.blueCraiola, // first gradient color (send page)
120 - decorationColor:
121 - Palette.blueGreyCraiola // second gradient color (send page)
122 - ),
123 - // headline -> headlineSmall
124 - headlineSmall: TextStyle(
125 - color: Colors.white
126 - .withOpacity(0.5), // text field border color (send page)
127 - decorationColor: Colors.white
128 - .withOpacity(0.5), // text field hint color (send page)
129 - ),
130 - // display1 -> headlineMedium
131 - headlineMedium: TextStyle(
132 - color: Colors.white
133 - .withOpacity(0.2), // text field button color (send page)
134 - decorationColor:
135 - Colors.white // text field button icon color (send page)
136 - ),
137 - // display2 -> displaySmall
138 - displaySmall: TextStyle(
139 - color: Colors.white.withOpacity(0.5), // estimated fee (send page)
140 - backgroundColor: PaletteDark.darkCyanBlue
141 - .withOpacity(0.67), // dot color for indicator on send page
142 - decorationColor:
143 - Palette.moderateLavender // template dotted border (send page)
144 - ),
145 - // display3 -> displayMedium
146 - displayMedium: TextStyle(
147 - color: Palette.darkBlueCraiola, // template new text (send page)
148 - backgroundColor: PaletteDark
149 - .darkNightBlue, // active dot color for indicator on send page
150 - decorationColor:
151 - Palette.blueAlice // template background color (send page)
152 - ),
153 - // display4 -> displayLarge
154 - displayLarge: TextStyle(
155 - color: Palette.darkBlueCraiola, // template title (send page)
156 - backgroundColor:
157 - Colors.black, // icon color on order row (moonpay)
158 - decorationColor:
159 - Palette.niagara // receive amount text (exchange page)
160 - ),
161 - // subtitle -> titleSmall
162 - titleSmall: TextStyle(
163 - color: Palette
164 - .blueCraiola, // first gradient color top panel (exchange page)
165 - decorationColor: Palette
166 - .blueGreyCraiola // second gradient color top panel (exchange page)
167 - ),
168 - // body -> bodyMedium
169 - bodyMedium: TextStyle(
170 - color: Palette.blueCraiola.withOpacity(
171 - 0.7), // first gradient color bottom panel (exchange page)
172 - decorationColor: Palette.blueGreyCraiola.withOpacity(
173 - 0.7), // second gradient color bottom panel (exchange page)
174 - backgroundColor: Palette.protectiveBlue // alert right button text
175 - ),
176 - // body2 -> bodyLarge
177 - bodyLarge: TextStyle(
178 - color: Colors.white.withOpacity(
179 - 0.5), // text field border on top panel (exchange page)
180 - decorationColor: Colors.white.withOpacity(
181 - 0.5), // text field border on bottom panel (exchange page)
182 - backgroundColor: Palette.brightOrange // alert left button text
183 - )
184 - ),
185 - focusColor: Colors.white.withOpacity(0.2), // text field button (exchange page)
186 - accentTextTheme: TextTheme(
187 - // title -> headlititleLargene6
188 - titleLarge: TextStyle(
189 - color: Colors.white, // picker background
190 - backgroundColor: Palette.periwinkleCraiola, // picker divider
191 - decorationColor: Colors.white // dialog background
192 - ),
193 - bodySmall: TextStyle(
194 - color: Palette.blueAlice, // container (confirm exchange)
195 - backgroundColor: Palette.blueAlice, // button background (confirm exchange)
196 - decorationColor: Palette.darkBlueCraiola, // text color (information page)
197 - ),
198 - // subtitle -> titleSmall
199 - titleSmall: TextStyle(
200 - color: Palette.darkBlueCraiola, // QR code (exchange trade page)
201 - backgroundColor:
202 - Palette.wildPeriwinkle, // divider (exchange trade page)
203 - decorationColor: Palette
204 - .protectiveBlue // crete new wallet button background (wallet list page)
205 - ),
206 - // headline -> headlineSmall
207 - headlineSmall: TextStyle(
208 - color: Palette
209 - .moderateLavender, // first gradient color of wallet action buttons (wallet list page)
210 - backgroundColor: Palette
211 - .moderateLavender, // second gradient color of wallet action buttons (wallet list page)
212 - decorationColor: Colors
213 - .white // restore wallet button text color (wallet list page)
214 - ),
215 - // subhead -> titleMedium
216 - titleMedium: TextStyle(
217 - color: Palette.darkGray, // titles color (filter widget)
218 - backgroundColor: Palette.periwinkle, // divider color (filter widget)
219 - decorationColor: Colors.white // checkbox background (filter widget)
220 - ),
221 - labelSmall: TextStyle(
222 - color: Palette.wildPeriwinkle, // checkbox bounds (filter widget)
223 - decorationColor: Colors.white, // menu subname
224 - ),
225 - // display1 -> headlineMedium
226 - headlineMedium: TextStyle(
227 - color: Palette.blueCraiola, // first gradient color (menu header)
228 - decorationColor: Palette.blueGreyCraiola, // second gradient color(menu header)
229 - backgroundColor: PaletteDark.darkNightBlue // active dot color
230 - ),
231 - // display2 -> displaySmall
232 - displaySmall: TextStyle(
233 - color:
234 - Palette.shadowWhite, // action button color (address text field)
235 - decorationColor: Palette.darkGray, // hint text (seed widget)
236 - backgroundColor: Palette.darkBlueCraiola
237 - .withOpacity(0.67) // text on balance page
238 - ),
239 - // display3 -> displayMedium
240 - displayMedium: TextStyle(
241 - color: Palette.darkGray, // hint text (new wallet page)
242 - decorationColor:
243 - Palette.periwinkleCraiola, // underline (new wallet page)
244 - backgroundColor:
245 - Palette.darkBlueCraiola // menu, icons, balance (dashboard page)
246 - ),
247 - // display4 -> displayLarge
248 - displayLarge: TextStyle(
249 - color: Palette.darkGray, // switch background (settings page)
250 - backgroundColor:
251 - Colors.black, // icon color on support page (moonpay, github)
252 - decorationColor:
253 - Colors.white.withOpacity(0.4) // hint text (exchange page)
254 - ),
255 - // body -> bodyMedium
256 - bodyMedium: TextStyle(
257 - color: Palette.darkGray, // indicators (PIN code)
258 - decorationColor: Palette.darkGray, // switch (PIN code)
259 - backgroundColor: Colors.white // alert right button
260 - ),
261 - // body2 -> bodyLarge
262 - bodyLarge: TextStyle(
263 - color: Palette.protectiveBlue, // primary buttons
264 - decorationColor: Colors.white, // alert left button,
265 - backgroundColor: Palette.dullGray // keyboard bar color
266 - ),
267 - ),
268 - cardColor: Palette.protectiveBlue // bottom button (action list)
269 - );
52 + @override
53 + CakeScrollbarTheme get scrollbarTheme => CakeScrollbarTheme(
54 + thumbColor: Palette.moderatePurpleBlue,
55 + trackColor: Palette.periwinkleCraiola);
56 +
57 + @override
58 + SyncIndicatorTheme get syncIndicatorStyle => SyncIndicatorTheme(
59 + textColor: Palette.darkBlueCraiola,
60 + syncedBackgroundColor: Palette.blueAlice,
61 + notSyncedIconColor: Palette.shineOrange,
62 + notSyncedBackgroundColor: Palette.blueAlice.withOpacity(0.75));
63 +
64 + @override
65 + KeyboardTheme get keyboardTheme =>
66 + KeyboardTheme(keyboardBarColor: Palette.dullGray);
67 +
68 + @override
69 + PinCodeTheme get pinCodeTheme => PinCodeTheme(
70 + indicatorsColor: Palette.darkGray, switchColor: Palette.darkGray);
71 +
72 + @override
73 + SupportPageTheme get supportPageTheme =>
74 + SupportPageTheme(iconColor: Colors.black);
75 +
76 + @override
77 + ExchangePageTheme get exchangePageTheme => ExchangePageTheme(
78 + hintTextColor: Colors.white.withOpacity(0.4),
79 + dividerCodeColor: Palette.wildPeriwinkle,
80 + qrCodeColor: primaryTextColor,
81 + buttonBackgroundColor: containerColor,
82 + textFieldButtonColor: Colors.white.withOpacity(0.2),
83 + textFieldBorderBottomPanelColor: Colors.white.withOpacity(0.5),
84 + textFieldBorderTopPanelColor: Colors.white.withOpacity(0.5),
85 + secondGradientBottomPanelColor: Palette.blueGreyCraiola.withOpacity(0.7),
86 + firstGradientBottomPanelColor: Palette.blueCraiola.withOpacity(0.7),
87 + secondGradientTopPanelColor: Palette.blueGreyCraiola,
88 + firstGradientTopPanelColor: Palette.blueCraiola,
89 + receiveAmountColor: Palette.niagara);
90 +
91 + @override
92 + NewWalletTheme get newWalletTheme => NewWalletTheme(
93 + hintTextColor: Palette.darkGray,
94 + underlineColor: Palette.periwinkleCraiola);
95 +
96 + @override
97 + AddressTheme get addressTheme =>
98 + AddressTheme(actionButtonColor: Palette.shadowWhite);
99 +
100 + @override
101 + DashboardPageTheme get dashboardPageTheme =>
102 + super.dashboardPageTheme.copyWith(
103 + cardTextColor: super.dashboardPageTheme.textColor,
104 + indicatorDotTheme: IndicatorDotTheme(
105 + indicatorColor: PaletteDark.darkCyanBlue.withOpacity(0.67),
106 + activeIndicatorColor: PaletteDark.darkNightBlue));
107 +
108 + @override
109 + BalancePageTheme get balancePageTheme => BalancePageTheme(
110 + textColor: dashboardPageTheme.textColor,
111 + labelTextColor: Palette.darkBlueCraiola.withOpacity(0.67));
112 +
113 + @override
114 + CakeMenuTheme get menuTheme => CakeMenuTheme(
115 + headerFirstGradientColor: Palette.blueCraiola,
116 + headerSecondGradientColor: Palette.blueGreyCraiola,
117 + backgroundColor: Colors.white,
118 + subnameTextColor: Colors.white,
119 + dividerColor: Palette.wildLavender,
120 + iconColor: Colors.white,
121 + settingTitleColor: receivePageTheme.tilesTextColor,
122 + settingActionsIconColor: Palette.gray);
123
124 @override
272 - ThemeData get themeData => theme.copyWith(
273 - colorScheme: theme.colorScheme
274 - .copyWith(background: Colors.white, secondary: Colors.white));
125 + FilterTheme get filterTheme => FilterTheme(
126 + checkboxFirstGradientColor: Palette.blueCraiola,
127 + checkboxSecondGradientColor: Palette.blueGreyCraiola,
128 + checkboxBoundsColor: Palette.wildPeriwinkle,
129 + checkboxBackgroundColor: Colors.white,
130 + titlesColor: Palette.darkGray,
131 + buttonColor: Palette.blueAlice,
132 + iconColor: PaletteDark.wildBlue);
133 +
134 + @override
135 + WalletListTheme get walletListTheme => WalletListTheme(
136 + restoreWalletButtonTextColor: Colors.white,
137 + createNewWalletButtonBackgroundColor: Palette.protectiveBlue);
138 +
139 + @override
140 + InfoTheme get infoTheme => InfoTheme(textColor: Palette.darkBlueCraiola);
141 +
142 + @override
143 + PickerTheme get pickerTheme => PickerTheme(
144 + dividerColor: Palette.periwinkleCraiola,
145 + searchTextColor: cakeTextTheme.textfieldUnderlineColor,
146 + searchBackgroundFillColor: addressTheme.actionButtonColor);
147 +
148 + @override
149 + AlertTheme get alertTheme => AlertTheme(
150 + backdropColor: PaletteDark.darkNightBlue.withOpacity(0.75),
151 + leftButtonTextColor: Palette.brightOrange);
152 +
153 + @override
154 + OrderTheme get orderTheme => OrderTheme(iconColor: Colors.black);
155 +
156 + @override
157 + SendPageTheme get sendPageTheme => SendPageTheme(
158 + templateTitleColor: Palette.darkBlueCraiola,
159 + templateBackgroundColor: Palette.blueAlice,
160 + templateNewTextColor: Palette.darkBlueCraiola,
161 + templateDottedBorderColor: Palette.moderateLavender,
162 + templateSelectedCurrencyBackgroundColor: Colors.white,
163 + templateSelectedCurrencyTitleColor: primaryColor,
164 + estimatedFeeColor: Colors.white.withOpacity(0.5),
165 + textFieldButtonIconColor: Colors.white,
166 + textFieldButtonColor: Colors.white.withOpacity(0.2),
167 + textFieldHintColor: Colors.white.withOpacity(0.5),
168 + textFieldBorderColor: Colors.white.withOpacity(0.5),
169 + secondGradientColor: Palette.blueGreyCraiola,
170 + firstGradientColor: Palette.blueCraiola,
171 + indicatorDotColor: PaletteDark.darkCyanBlue.withOpacity(0.67));
172 +
173 + @override
174 + SeedWidgetTheme get seedWidgetTheme =>
175 + SeedWidgetTheme(hintTextColor: Palette.darkGray);
176 +
177 + @override
178 + PlaceholderTheme get placeholderTheme =>
179 + PlaceholderTheme(color: PaletteDark.darkCyanBlue);
180 +
181 + @override
182 + TransactionTradeTheme get transactionTradeTheme => TransactionTradeTheme(
183 + detailsTitlesColor: Palette.darkGray, rowsColor: Palette.blueAlice);
184 +
185 + @override
186 + CakeTextTheme get cakeTextTheme => CakeTextTheme(
187 + secondaryTextColor: PaletteDark.pigeonBlue,
188 + textfieldUnderlineColor: Palette.wildPeriwinkle,
189 + titleColor: Palette.violetBlue,
190 + addressButtonBorderColor: Palette.blueAlice,
191 + dateSectionRowColor: PaletteDark.darkCyanBlue);
192 +
193 + @override
194 + AccountListTheme get accountListTheme => AccountListTheme(
195 + currentAccountBackgroundColor: dialogBackgroundColor,
196 + currentAccountTextColor: primaryColor,
197 + currentAccountAmountColor: receivePageTheme.iconsColor,
198 + tilesBackgroundColor: Colors.white,
199 + tilesAmountColor: receivePageTheme.iconsColor,
200 + tilesTextColor: Palette.violetBlue);
201 +
202 + @override
203 + ReceivePageTheme get receivePageTheme => ReceivePageTheme(
204 + currentTileBackgroundColor: Palette.blueCraiola,
205 + currentTileTextColor: Colors.white,
206 + tilesBackgroundColor: Palette.blueAlice,
207 + tilesTextColor: Palette.darkBlueCraiola,
208 + iconsBackgroundColor: Palette.moderateLavender,
209 + iconsColor: PaletteDark.lightBlueGrey,
210 + amountBottomBorderColor: Palette.darkBlueCraiola,
211 + amountHintTextColor: Palette.darkBlueCraiola);
212 +
213 + @override
214 + QRCodeTheme get qrCodeTheme => QRCodeTheme(
215 + qrCodeColor: Colors.white,
216 + qrWidgetCopyButtonColor: PaletteDark.lightBlueGrey);
217 +
218 + @override
219 + ThemeData get themeData => super.themeData.copyWith(
220 + dividerColor: Palette.paleBlue,
221 + hintColor: Palette.gray,
222 + disabledColor: Palette.darkGray,
223 + dialogTheme:
224 + super.themeData.dialogTheme.copyWith(backgroundColor: Colors.white));
225 }
lib/themes/matrix_green_theme.dart new
+14
@@ -0,0 +1,14 @@
1 +import 'package:cake_wallet/generated/i18n.dart';
2 +import 'package:cake_wallet/palette.dart';
3 +import 'package:cake_wallet/themes/monero_dark_theme.dart';
4 +import 'package:flutter/material.dart';
5 +
6 +class MatrixGreenTheme extends MoneroDarkTheme {
7 + MatrixGreenTheme({required int raw}) : super(raw: raw);
8 +
9 + @override
10 + String get title => S.current.matrix_green_dark_theme;
11 + @override
12 + Color get primaryColor => PaletteDark.matrixGreen;
13 +}
14 +
lib/themes/monero_dark_theme.dart new
+194
@@ -0,0 +1,194 @@
1 +import 'package:cake_wallet/themes/dark_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/account_list_theme.dart';
3 +import 'package:cake_wallet/themes/extensions/address_theme.dart';
4 +import 'package:cake_wallet/themes/extensions/alert_theme.dart';
5 +import 'package:cake_wallet/themes/extensions/balance_page_theme.dart';
6 +import 'package:cake_wallet/themes/extensions/cake_scrollbar_theme.dart';
7 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
8 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
9 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
10 +import 'package:cake_wallet/themes/extensions/filter_theme.dart';
11 +import 'package:cake_wallet/themes/extensions/indicator_dot_theme.dart';
12 +import 'package:cake_wallet/themes/extensions/info_theme.dart';
13 +import 'package:cake_wallet/themes/extensions/menu_theme.dart';
14 +import 'package:cake_wallet/themes/extensions/new_wallet_theme.dart';
15 +import 'package:cake_wallet/themes/extensions/picker_theme.dart';
16 +import 'package:cake_wallet/themes/extensions/pin_code_theme.dart';
17 +import 'package:cake_wallet/themes/extensions/qr_code_theme.dart';
18 +import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
19 +import 'package:cake_wallet/themes/extensions/seed_widget_theme.dart';
20 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
21 +import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart';
22 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
23 +import 'package:cake_wallet/themes/extensions/wallet_list_theme.dart';
24 +import 'package:cake_wallet/generated/i18n.dart';
25 +import 'package:cake_wallet/palette.dart';
26 +import 'package:flutter/material.dart';
27 +
28 +class MoneroDarkTheme extends DarkTheme {
29 + MoneroDarkTheme({required int raw}) : super(raw: raw);
30 +
31 + @override
32 + String get title => S.current.monero_dark_theme;
33 + @override
34 + Color get backgroundColor => Colors.black;
35 + @override
36 + Color get primaryColor => PaletteDark.moneroOrange;
37 + @override
38 + Color get containerColor => PaletteDark.moneroCard;
39 + @override
40 + Color get dialogBackgroundColor => containerColor;
41 +
42 + @override
43 + CakeScrollbarTheme get scrollbarTheme =>
44 + super.scrollbarTheme.copyWith(thumbColor: Colors.grey);
45 +
46 + @override
47 + SyncIndicatorTheme get syncIndicatorStyle =>
48 + super.syncIndicatorStyle.copyWith(
49 + textColor: Colors.white,
50 + notSyncedBackgroundColor: Colors.grey.withOpacity(0.2),
51 + syncedBackgroundColor: containerColor);
52 +
53 + @override
54 + PinCodeTheme get pinCodeTheme => super
55 + .pinCodeTheme
56 + .copyWith(indicatorsColor: primaryColor, switchColor: Colors.grey);
57 +
58 + @override
59 + ExchangePageTheme get exchangePageTheme => super.exchangePageTheme.copyWith(
60 + hintTextColor: Colors.grey,
61 + qrCodeColor: primaryTextColor,
62 + buttonBackgroundColor: colorScheme.surfaceVariant,
63 + textFieldButtonColor: colorScheme.onInverseSurface,
64 + textFieldBorderBottomPanelColor: colorScheme.surfaceVariant,
65 + textFieldBorderTopPanelColor: colorScheme.surfaceVariant,
66 + secondGradientBottomPanelColor: containerColor,
67 + firstGradientBottomPanelColor: containerColor,
68 + secondGradientTopPanelColor: colorScheme.surface,
69 + firstGradientTopPanelColor: colorScheme.surface,
70 + receiveAmountColor: colorScheme.surfaceVariant);
71 +
72 + @override
73 + NewWalletTheme get newWalletTheme => super
74 + .newWalletTheme
75 + .copyWith(hintTextColor: Colors.grey, underlineColor: Colors.grey);
76 +
77 + @override
78 + AddressTheme get addressTheme =>
79 + super.addressTheme.copyWith(actionButtonColor: containerColor);
80 +
81 + @override
82 + DashboardPageTheme get dashboardPageTheme =>
83 + super.dashboardPageTheme.copyWith(
84 + pageTitleTextColor: primaryColor,
85 + mainActionsIconColor: primaryColor,
86 + indicatorDotTheme: IndicatorDotTheme(
87 + indicatorColor: colorScheme.secondaryContainer,
88 + activeIndicatorColor: colorScheme.inversePrimary));
89 + @override
90 + BalancePageTheme get balancePageTheme => super.balancePageTheme.copyWith(
91 + cardBorderColor: primaryColor.withOpacity(0.2),
92 + labelTextColor: Colors.grey,
93 + balanceAmountColor: primaryColor,
94 + assetTitleColor: primaryColor);
95 +
96 + @override
97 + CakeMenuTheme get menuTheme => super.menuTheme.copyWith(
98 + headerFirstGradientColor: containerColor,
99 + headerSecondGradientColor: containerColor,
100 + backgroundColor: containerColor,
101 + subnameTextColor: Colors.grey,
102 + dividerColor: colorScheme.secondaryContainer,
103 + iconColor: colorScheme.secondaryContainer,
104 + settingActionsIconColor: colorScheme.secondaryContainer);
105 +
106 + @override
107 + FilterTheme get filterTheme => super.filterTheme.copyWith(
108 + checkboxFirstGradientColor: colorScheme.secondaryContainer,
109 + checkboxSecondGradientColor: colorScheme.inversePrimary,
110 + checkboxBoundsColor: PaletteDark.wildVioletBlue,
111 + checkboxBackgroundColor: PaletteDark.wildVioletBlue.withOpacity(0.3),
112 + buttonColor: containerColor,
113 + iconColor: Colors.grey);
114 +
115 + @override
116 + WalletListTheme get walletListTheme => super.walletListTheme.copyWith(
117 + restoreWalletButtonTextColor: Colors.white,
118 + createNewWalletButtonBackgroundColor: primaryColor);
119 +
120 + @override
121 + InfoTheme get infoTheme => super.infoTheme.copyWith(textColor: Colors.grey);
122 +
123 + @override
124 + PickerTheme get pickerTheme =>
125 + super.pickerTheme.copyWith(dividerColor: Colors.grey.withOpacity(0.5));
126 +
127 + @override
128 + SendPageTheme get sendPageTheme => super.sendPageTheme.copyWith(
129 + templateNewTextColor:
130 + dashboardPageTheme.indicatorDotTheme.activeIndicatorColor,
131 + templateTitleColor: primaryTextColor,
132 + templateBackgroundColor: containerColor,
133 + templateDottedBorderColor: colorScheme.primaryContainer,
134 + templateSelectedCurrencyTitleColor: Colors.black,
135 + textFieldButtonIconColor: colorScheme.inverseSurface,
136 + textFieldButtonColor: colorScheme.onInverseSurface,
137 + textFieldHintColor: Colors.grey.withOpacity(0.5),
138 + textFieldBorderColor: Colors.grey.withOpacity(0.5),
139 + secondGradientColor: containerColor,
140 + firstGradientColor: containerColor,
141 + indicatorDotColor: dashboardPageTheme.indicatorDotTheme.indicatorColor);
142 +
143 + @override
144 + SeedWidgetTheme get seedWidgetTheme =>
145 + super.seedWidgetTheme.copyWith(hintTextColor: Colors.grey);
146 +
147 + @override
148 + TransactionTradeTheme get transactionTradeTheme => super
149 + .transactionTradeTheme
150 + .copyWith(detailsTitlesColor: Colors.grey, rowsColor: containerColor);
151 +
152 + @override
153 + CakeTextTheme get cakeTextTheme => super.cakeTextTheme.copyWith(
154 + secondaryTextColor: Colors.grey,
155 + addressButtonBorderColor: primaryColor.withOpacity(0.2),
156 + dateSectionRowColor: Colors.grey,
157 + textfieldUnderlineColor: Colors.grey.withOpacity(0.5));
158 +
159 + @override
160 + AccountListTheme get accountListTheme =>
161 + super.accountListTheme.copyWith(tilesBackgroundColor: containerColor);
162 +
163 + @override
164 + ReceivePageTheme get receivePageTheme => super.receivePageTheme.copyWith(
165 + currentTileBackgroundColor: primaryColor,
166 + currentTileTextColor: Colors.white,
167 + tilesBackgroundColor: containerColor,
168 + iconsBackgroundColor: colorScheme.onInverseSurface,
169 + iconsColor: colorScheme.inverseSurface,
170 + amountBottomBorderColor: Colors.grey,
171 + amountHintTextColor: Colors.grey);
172 +
173 + @override
174 + QRCodeTheme get qrCodeTheme => QRCodeTheme(
175 + qrCodeColor: Colors.grey, qrWidgetCopyButtonColor: Colors.grey);
176 +
177 + @override
178 + AlertTheme get alertTheme => super
179 + .alertTheme
180 + .copyWith(backdropColor: colorScheme.surface.withOpacity(0.75));
181 +
182 + @override
183 + ThemeData get themeData => super.themeData.copyWith(
184 + dividerColor: pickerTheme.dividerColor,
185 + hintColor: Colors.grey,
186 + dialogTheme:
187 + super.themeData.dialogTheme.copyWith(backgroundColor: containerColor),
188 + appBarTheme: super.themeData.appBarTheme.copyWith(
189 + titleTextStyle: super
190 + .themeData
191 + .appBarTheme
192 + .titleTextStyle!
193 + .copyWith(color: primaryColor)));
194 +}
lib/themes/monero_light_theme.dart new
+159
@@ -0,0 +1,159 @@
1 +import 'package:cake_wallet/themes/extensions/account_list_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/address_theme.dart';
3 +import 'package:cake_wallet/themes/extensions/alert_theme.dart';
4 +import 'package:cake_wallet/themes/extensions/balance_page_theme.dart';
5 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
6 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
7 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
8 +import 'package:cake_wallet/themes/extensions/filter_theme.dart';
9 +import 'package:cake_wallet/themes/extensions/indicator_dot_theme.dart';
10 +import 'package:cake_wallet/themes/extensions/menu_theme.dart';
11 +import 'package:cake_wallet/themes/extensions/new_wallet_theme.dart';
12 +import 'package:cake_wallet/themes/extensions/qr_code_theme.dart';
13 +import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
14 +import 'package:cake_wallet/themes/extensions/seed_widget_theme.dart';
15 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
16 +import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart';
17 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
18 +import 'package:cake_wallet/themes/extensions/wallet_list_theme.dart';
19 +import 'package:cake_wallet/themes/light_theme.dart';
20 +import 'package:cake_wallet/palette.dart';
21 +import 'package:cake_wallet/generated/i18n.dart';
22 +import 'package:flutter/material.dart';
23 +
24 +class MoneroLightTheme extends LightTheme {
25 + MoneroLightTheme({required int raw}) : super(raw: raw);
26 +
27 + @override
28 + String get title => S.current.monero_light_theme;
29 + @override
30 + Color get primaryColor => Palette.moneroOrange;
31 + @override
32 + Color get containerColor => Palette.moneroLightOrange;
33 + @override
34 + Color get primaryTextColor => colorScheme.onPrimaryContainer;
35 + @override
36 + Color get dialogBackgroundColor => containerColor;
37 +
38 + @override
39 + SyncIndicatorTheme get syncIndicatorStyle =>
40 + super.syncIndicatorStyle.copyWith(
41 + textColor: primaryTextColor,
42 + syncedBackgroundColor: colorScheme.primaryContainer,
43 + notSyncedBackgroundColor: containerColor.withOpacity(0.75));
44 +
45 + @override
46 + ExchangePageTheme get exchangePageTheme => super.exchangePageTheme.copyWith(
47 + qrCodeColor: primaryTextColor,
48 + buttonBackgroundColor: containerColor,
49 + secondGradientBottomPanelColor: primaryColor.withOpacity(0.7),
50 + firstGradientBottomPanelColor: colorScheme.primary.withOpacity(0.7),
51 + secondGradientTopPanelColor: primaryColor,
52 + firstGradientTopPanelColor: colorScheme.primary,
53 + textFieldBorderBottomPanelColor: colorScheme.surfaceVariant,
54 + textFieldBorderTopPanelColor: colorScheme.surfaceVariant,
55 + receiveAmountColor: colorScheme.surfaceVariant);
56 +
57 + @override
58 + NewWalletTheme get newWalletTheme => super.newWalletTheme.copyWith(
59 + hintTextColor: colorScheme.secondary,
60 + underlineColor: colorScheme.secondary);
61 +
62 + @override
63 + AddressTheme get addressTheme =>
64 + super.addressTheme.copyWith(actionButtonColor: containerColor);
65 +
66 + @override
67 + DashboardPageTheme get dashboardPageTheme =>
68 + super.dashboardPageTheme.copyWith(
69 + indicatorDotTheme: IndicatorDotTheme(
70 + indicatorColor: colorScheme.secondaryContainer,
71 + activeIndicatorColor: colorScheme.inversePrimary));
72 + @override
73 + BalancePageTheme get balancePageTheme => super.balancePageTheme.copyWith(
74 + textColor: primaryTextColor.withOpacity(0.67),
75 + labelTextColor: colorScheme.secondary);
76 +
77 + @override
78 + CakeMenuTheme get menuTheme => super.menuTheme.copyWith(
79 + headerFirstGradientColor: colorScheme.primary,
80 + headerSecondGradientColor: primaryColor,
81 + dividerColor: colorScheme.secondaryContainer,
82 + iconColor: colorScheme.secondaryContainer,
83 + settingActionsIconColor: colorScheme.secondary);
84 +
85 + @override
86 + FilterTheme get filterTheme => super.filterTheme.copyWith(
87 + checkboxFirstGradientColor: colorScheme.secondaryContainer,
88 + checkboxSecondGradientColor: colorScheme.inversePrimary,
89 + checkboxBoundsColor: PaletteDark.wildVioletBlue,
90 + checkboxBackgroundColor: PaletteDark.wildVioletBlue.withOpacity(0.3),
91 + buttonColor: containerColor,
92 + iconColor: colorScheme.secondary);
93 +
94 + @override
95 + WalletListTheme get walletListTheme => super.walletListTheme.copyWith(
96 + restoreWalletButtonTextColor: Colors.white,
97 + createNewWalletButtonBackgroundColor: primaryColor);
98 +
99 + @override
100 + SendPageTheme get sendPageTheme => super.sendPageTheme.copyWith(
101 + templateTitleColor: primaryTextColor,
102 + templateBackgroundColor: containerColor,
103 + templateNewTextColor: primaryTextColor,
104 + templateDottedBorderColor: colorScheme.primaryContainer,
105 + secondGradientColor: primaryColor,
106 + firstGradientColor: colorScheme.primary,
107 + indicatorDotColor: dashboardPageTheme.indicatorDotTheme.indicatorColor);
108 +
109 + @override
110 + SeedWidgetTheme get seedWidgetTheme =>
111 + super.seedWidgetTheme.copyWith(hintTextColor: colorScheme.secondary);
112 +
113 + @override
114 + TransactionTradeTheme get transactionTradeTheme =>
115 + super.transactionTradeTheme.copyWith(
116 + detailsTitlesColor: colorScheme.secondary, rowsColor: containerColor);
117 +
118 + @override
119 + CakeTextTheme get cakeTextTheme => super.cakeTextTheme.copyWith(
120 + titleColor: primaryTextColor,
121 + secondaryTextColor: colorScheme.secondary,
122 + addressButtonBorderColor: primaryColor.withOpacity(0.2),
123 + dateSectionRowColor: colorScheme.secondary,
124 + textfieldUnderlineColor: colorScheme.secondary.withOpacity(0.5));
125 +
126 + @override
127 + AccountListTheme get accountListTheme =>
128 + super.accountListTheme.copyWith(tilesBackgroundColor: containerColor);
129 +
130 + @override
131 + ReceivePageTheme get receivePageTheme => super.receivePageTheme.copyWith(
132 + currentTileBackgroundColor: primaryColor,
133 + tilesBackgroundColor: containerColor,
134 + tilesTextColor: primaryTextColor,
135 + iconsBackgroundColor: colorScheme.surfaceVariant,
136 + iconsColor: colorScheme.onSurfaceVariant,
137 + amountBottomBorderColor: primaryTextColor,
138 + amountHintTextColor: primaryTextColor,
139 + currentTileTextColor: Colors.white);
140 +
141 + @override
142 + QRCodeTheme get qrCodeTheme => super
143 + .qrCodeTheme
144 + .copyWith(qrWidgetCopyButtonColor: colorScheme.secondary);
145 +
146 + @override
147 + AlertTheme get alertTheme => super
148 + .alertTheme
149 + .copyWith(backdropColor: colorScheme.inverseSurface.withOpacity(0.75));
150 +
151 + @override
152 + ThemeData get themeData => super.themeData.copyWith(
153 + dividerColor: pickerTheme.dividerColor,
154 + hintColor: colorScheme.secondary,
155 + dialogTheme: super
156 + .themeData
157 + .dialogTheme
158 + .copyWith(backgroundColor: containerColor));
159 +}
lib/themes/theme_base.dart
+144 -4
@@ -1,17 +1,157 @@
1 +import 'package:cake_wallet/themes/extensions/account_list_theme.dart';
2 +import 'package:cake_wallet/themes/extensions/address_theme.dart';
3 +import 'package:cake_wallet/themes/extensions/alert_theme.dart';
4 +import 'package:cake_wallet/themes/extensions/balance_page_theme.dart';
5 +import 'package:cake_wallet/themes/extensions/cake_scrollbar_theme.dart';
6 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
7 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
8 +import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
9 +import 'package:cake_wallet/themes/extensions/filter_theme.dart';
10 +import 'package:cake_wallet/themes/extensions/indicator_dot_theme.dart';
11 +import 'package:cake_wallet/themes/extensions/info_theme.dart';
12 +import 'package:cake_wallet/themes/extensions/keyboard_theme.dart';
13 +import 'package:cake_wallet/themes/extensions/menu_theme.dart';
14 +import 'package:cake_wallet/themes/extensions/new_wallet_theme.dart';
15 +import 'package:cake_wallet/themes/extensions/order_theme.dart';
16 +import 'package:cake_wallet/themes/extensions/picker_theme.dart';
17 +import 'package:cake_wallet/themes/extensions/pin_code_theme.dart';
18 +import 'package:cake_wallet/themes/extensions/placeholder_theme.dart';
19 +import 'package:cake_wallet/themes/extensions/qr_code_theme.dart';
20 +import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
21 +import 'package:cake_wallet/themes/extensions/seed_widget_theme.dart';
22 +import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
23 +import 'package:cake_wallet/themes/extensions/support_page_theme.dart';
24 +import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart';
25 +import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
26 +import 'package:cake_wallet/themes/extensions/wallet_list_theme.dart';
27 import 'package:flutter/material.dart';
28
3 -enum ThemeType {light, bright, dark}
29 +enum ThemeType { bright, light, dark }
30
31 abstract class ThemeBase {
6 - ThemeBase({required this.raw});
32 + ThemeBase({required this.raw}) {
33 + colorScheme = ColorScheme.fromSeed(
34 + brightness: brightness,
35 + seedColor: primaryColor,
36 + background: backgroundColor);
37 + }
38
39 final int raw;
40 String get title;
10 - ThemeData get themeData;
41 ThemeType get type;
42
43 @override
44 String toString() {
45 return title;
46 }
17 -}
\ No newline at end of file
47 +
48 + Brightness get brightness;
49 + Color get backgroundColor;
50 + Color get primaryColor;
51 + Color get primaryTextColor;
52 + Color get containerColor;
53 + Color get dialogBackgroundColor;
54 +
55 + ColorScheme colorScheme = ColorScheme.light();
56 +
57 + ThemeData get generatedThemeData => ThemeData.from(
58 + colorScheme: colorScheme,
59 + textTheme: TextTheme().apply(fontFamily: 'Lato'));
60 +
61 + DashboardPageTheme get dashboardPageTheme => DashboardPageTheme(
62 + firstGradientBackgroundColor: backgroundColor,
63 + secondGradientBackgroundColor: backgroundColor,
64 + thirdGradientBackgroundColor: backgroundColor,
65 + textColor: primaryTextColor,
66 + indicatorDotTheme: IndicatorDotTheme(
67 + indicatorColor: primaryColor, activeIndicatorColor: backgroundColor));
68 +
69 + CakeScrollbarTheme get scrollbarTheme;
70 +
71 + SyncIndicatorTheme get syncIndicatorStyle;
72 +
73 + KeyboardTheme get keyboardTheme;
74 +
75 + PinCodeTheme get pinCodeTheme;
76 +
77 + SupportPageTheme get supportPageTheme;
78 +
79 + ExchangePageTheme get exchangePageTheme;
80 +
81 + NewWalletTheme get newWalletTheme;
82 +
83 + BalancePageTheme get balancePageTheme;
84 +
85 + AddressTheme get addressTheme;
86 +
87 + CakeMenuTheme get menuTheme;
88 +
89 + FilterTheme get filterTheme;
90 +
91 + WalletListTheme get walletListTheme;
92 +
93 + InfoTheme get infoTheme;
94 +
95 + PickerTheme get pickerTheme;
96 +
97 + AlertTheme get alertTheme;
98 +
99 + OrderTheme get orderTheme;
100 +
101 + SendPageTheme get sendPageTheme;
102 +
103 + SeedWidgetTheme get seedWidgetTheme;
104 +
105 + PlaceholderTheme get placeholderTheme;
106 +
107 + TransactionTradeTheme get transactionTradeTheme;
108 +
109 + CakeTextTheme get cakeTextTheme;
110 +
111 + AccountListTheme get accountListTheme;
112 +
113 + ReceivePageTheme get receivePageTheme;
114 +
115 + QRCodeTheme get qrCodeTheme;
116 +
117 + ThemeData get themeData => generatedThemeData.copyWith(
118 + primaryColor: primaryColor,
119 + cardColor: containerColor,
120 + dialogBackgroundColor: dialogBackgroundColor,
121 + extensions: [
122 + dashboardPageTheme,
123 + scrollbarTheme,
124 + syncIndicatorStyle,
125 + keyboardTheme,
126 + pinCodeTheme,
127 + supportPageTheme,
128 + exchangePageTheme,
129 + newWalletTheme,
130 + balancePageTheme,
131 + addressTheme,
132 + menuTheme,
133 + filterTheme,
134 + walletListTheme,
135 + infoTheme,
136 + pickerTheme,
137 + alertTheme,
138 + orderTheme,
139 + sendPageTheme,
140 + seedWidgetTheme,
141 + placeholderTheme,
142 + transactionTradeTheme,
143 + cakeTextTheme,
144 + accountListTheme,
145 + receivePageTheme,
146 + qrCodeTheme,
147 + ],
148 + scrollbarTheme: generatedThemeData.scrollbarTheme.copyWith(
149 + thumbColor: MaterialStateProperty.all(scrollbarTheme.thumbColor),
150 + trackColor: MaterialStateProperty.all(scrollbarTheme.trackColor),
151 + radius: Radius.circular(3),
152 + thickness: MaterialStateProperty.all(6),
153 + thumbVisibility: MaterialStateProperty.all(true),
154 + crossAxisMargin: 6),
155 + appBarTheme: generatedThemeData.appBarTheme.copyWith(
156 + titleTextStyle: TextStyle(color: cakeTextTheme.titleColor)));
157 +}
lib/themes/theme_list.dart
+37 -2
@@ -1,14 +1,36 @@
1 import 'package:cake_wallet/themes/bright_theme.dart';
2 import 'package:cake_wallet/themes/dark_theme.dart';
3 import 'package:cake_wallet/themes/light_theme.dart';
4 +import 'package:cake_wallet/themes/monero_light_theme.dart';
5 +import 'package:cake_wallet/themes/monero_dark_theme.dart';
6 +import 'package:cake_wallet/themes/matrix_green_theme.dart';
7 +import 'package:cake_wallet/themes/bitcoin_dark_theme.dart';
8 +import 'package:cake_wallet/themes/bitcoin_light_theme.dart';
9 +import 'package:cake_wallet/themes/high_contrast_theme.dart';
10 import 'package:cake_wallet/themes/theme_base.dart';
11
12 class ThemeList {
7 - static final all = [brightTheme, lightTheme, darkTheme];
13 + static final all = [
14 + brightTheme,
15 + lightTheme,
16 + darkTheme,
17 + moneroDarkTheme,
18 + moneroLightTheme,
19 + matrixGreenTheme,
20 + bitcoinDarkTheme,
21 + bitcoinLightTheme,
22 + highContrastTheme
23 + ];
24
25 static final lightTheme = LightTheme(raw: 0);
26 static final brightTheme = BrightTheme(raw: 1);
27 static final darkTheme = DarkTheme(raw: 2);
28 + static final moneroDarkTheme = MoneroDarkTheme(raw: 3);
29 + static final moneroLightTheme = MoneroLightTheme(raw: 4);
30 + static final matrixGreenTheme = MatrixGreenTheme(raw: 5);
31 + static final bitcoinDarkTheme = BitcoinDarkTheme(raw: 6);
32 + static final bitcoinLightTheme = BitcoinLightTheme(raw: 7);
33 + static final highContrastTheme = HighContrastTheme(raw: 8);
34
35 static ThemeBase deserialize({required int raw}) {
36 switch (raw) {
@@ -18,8 +40,21 @@ class ThemeList {
40 return brightTheme;
41 case 2:
42 return darkTheme;
43 + case 3:
44 + return moneroDarkTheme;
45 + case 4:
46 + return moneroLightTheme;
47 + case 5:
48 + return matrixGreenTheme;
49 + case 6:
50 + return bitcoinDarkTheme;
51 + case 7:
52 + return bitcoinLightTheme;
53 + case 8:
54 + return highContrastTheme;
55 default:
22 - throw Exception('Unexpected token raw: $raw for deserialization of ThemeBase');
56 + throw Exception(
57 + 'Unexpected token raw: $raw for deserialization of ThemeBase');
58 }
59 }
60 }
\ No newline at end of file
res/values/strings_ar.arb
+7 -1
@@ -666,6 +666,12 @@
666 "balance_page": "صفحة التوازن",
667 "share": "يشارك",
668 "slidable": "قابل للانزلاق",
669 + "monero_dark_theme": "موضوع مونيرو الظلام",
670 + "bitcoin_dark_theme": "موضوع البيتكوين الظلام",
671 + "bitcoin_light_theme": "موضوع البيتكوين الخفيفة",
672 + "high_contrast_theme": "موضوع عالي التباين",
673 + "matrix_green_dark_theme": "موضوع ماتريكس الأخضر الداكن",
674 + "monero_light_theme": " ضوء مونيرو",
675 "etherscan_history": "Etherscan تاريخ",
676 "manage_nodes": "ﺪﻘﻌﻟﺍ ﺓﺭﺍﺩﺇ",
677 "template_name": "اسم القالب",
@@ -675,4 +681,4 @@
681 "support_description_guides": "توثيق ودعم القضايا المشتركة",
682 "support_title_other_links": "روابط دعم أخرى",
683 "support_description_other_links": "انضم إلى مجتمعاتنا أو تصل إلينا شركائنا من خلال أساليب أخرى"
678 -}
\ No newline at end of file
684 +}
res/values/strings_bg.arb
+6
@@ -662,6 +662,12 @@
662 "balance_page": "Страница за баланс",
663 "share": "Дял",
664 "slidable": "Плъзгащ се",
665 + "monero_dark_theme": "Тъмна тема Monero",
666 + "bitcoin_dark_theme": "Тъмна тема за биткойн",
667 + "bitcoin_light_theme": "Лека биткойн тема",
668 + "high_contrast_theme": "Тема с висок контраст",
669 + "matrix_green_dark_theme": "Зелена тъмна тема Matrix",
670 + "monero_light_theme": "Лека тема Monero",
671 "etherscan_history": "История на Etherscan",
672 "manage_nodes": "Управление на възли",
673 "template_name": "Име на шаблон",
res/values/strings_cs.arb
+6
@@ -662,6 +662,12 @@
662 "balance_page": "Stránka zůstatku",
663 "share": "Podíl",
664 "slidable": "Posuvné",
665 + "monero_dark_theme": "Tmavé téma Monero",
666 + "bitcoin_dark_theme": "Tmavé téma bitcoinů",
667 + "bitcoin_light_theme": "Světlé téma bitcoinů",
668 + "high_contrast_theme": "Téma s vysokým kontrastem",
669 + "matrix_green_dark_theme": "Tmavé téma Matrix Green",
670 + "monero_light_theme": "Světlé téma Monero",
671 "manage_nodes": "Spravovat uzly",
672 "etherscan_history": "Historie Etherscanu",
673 "template_name": "Název šablony",
res/values/strings_de.arb
+6
@@ -634,6 +634,12 @@
634 "setup_totp_recommended": "TOTP einrichten (empfohlen)",
635 "disable_buy": "Kaufaktion deaktivieren",
636 "disable_sell": "Verkaufsaktion deaktivieren",
637 + "monero_dark_theme": "Dunkles Monero-Thema",
638 + "bitcoin_dark_theme": "Dunkles Bitcoin-Thema",
639 + "bitcoin_light_theme": "Bitcoin Light-Thema",
640 + "high_contrast_theme": "Kontrastreiches Thema",
641 + "matrix_green_dark_theme": "Matrix Green Dark Theme",
642 + "monero_light_theme": "Monero Light-Thema",
643 "cake_2fa_preset" : "Kuchen 2FA-Voreinstellung",
644 "narrow": "Eng",
645 "normal": "Normal",
res/values/strings_en.arb
+6
@@ -634,6 +634,12 @@
634 "setup_totp_recommended": "Set up TOTP (Recommended)",
635 "disable_buy": "Disable buy action",
636 "disable_sell": "Disable sell action",
637 + "monero_dark_theme": "Monero Dark Theme",
638 + "bitcoin_dark_theme": "Bitcoin Dark Theme",
639 + "bitcoin_light_theme": "Bitcoin Light Theme",
640 + "high_contrast_theme": "High Contrast Theme",
641 + "matrix_green_dark_theme": "Matrix Green Dark Theme",
642 + "monero_light_theme": "Monero Light Theme",
643 "cake_2fa_preset" : "Cake 2FA Preset",
644 "narrow": "Narrow",
645 "normal": "Normal",
res/values/strings_es.arb
+6
@@ -634,6 +634,12 @@
634 "setup_totp_recommended": "Configurar TOTP (Recomendado)",
635 "disable_buy": "Desactivar acción de compra",
636 "disable_sell": "Desactivar acción de venta",
637 + "monero_dark_theme": "Tema oscuro de Monero",
638 + "bitcoin_dark_theme": "Tema oscuro de Bitcoin",
639 + "bitcoin_light_theme": "Tema de la luz de Bitcoin",
640 + "high_contrast_theme": "Tema de alto contraste",
641 + "matrix_green_dark_theme": "Matrix verde oscuro tema",
642 + "monero_light_theme": "Tema ligero de Monero",
643 "cake_2fa_preset" : "Pastel 2FA preestablecido",
644 "narrow": "Angosto",
645 "normal": "Normal",
res/values/strings_fr.arb
+6
@@ -634,6 +634,12 @@
634 "setup_totp_recommended": "Configurer TOTP (recommandé)",
635 "disable_buy": "Désactiver l'action d'achat",
636 "disable_sell": "Désactiver l'action de vente",
637 + "monero_dark_theme": "Thème sombre Monero",
638 + "bitcoin_dark_theme": "Thème sombre Bitcoin",
639 + "bitcoin_light_theme": "Thème léger Bitcoin",
640 + "high_contrast_theme": "Thème à contraste élevé",
641 + "matrix_green_dark_theme": "Thème Matrix Green Dark",
642 + "monero_light_theme": "Thème de lumière Monero",
643 "cake_2fa_preset" : "Gâteau 2FA prédéfini",
644 "narrow": "Étroit",
645 "normal": "Normal",
res/values/strings_ha.arb
+6
@@ -612,6 +612,12 @@
612 "prevent_screenshots": "Fada lambobi da jarrabobi na kayan lambobi",
613 "disable_buy": "Kashe alama",
614 "disable_sell": "Kashe karbuwa",
615 + "monero_dark_theme": "Monero Dark Jigo",
616 + "bitcoin_dark_theme": "Bitcoin Dark Jigo",
617 + "bitcoin_light_theme": "Jigon Hasken Bitcoin",
618 + "high_contrast_theme": "Babban Jigon Kwatance",
619 + "matrix_green_dark_theme": "Matrix Green Dark Jigo",
620 + "monero_light_theme": "Jigon Hasken Monero",
621 "cake_2fa_preset" : "Cake 2FA saiti",
622 "narrow": "kunkuntar",
623 "normal": "Na al'ada",
res/values/strings_hi.arb
+6
@@ -634,6 +634,12 @@
634 "setup_totp_recommended": "टीओटीपी सेट अप करें (अनुशंसित)",
635 "disable_buy": "खरीद कार्रवाई अक्षम करें",
636 "disable_sell": "बेचने की कार्रवाई अक्षम करें",
637 + "monero_dark_theme": "मोनेरो डार्क थीम",
638 + "bitcoin_dark_theme": "बिटकॉइन डार्क थीम",
639 + "bitcoin_light_theme": "बिटकॉइन लाइट थीम",
640 + "high_contrast_theme": "उच्च कंट्रास्ट थीम",
641 + "matrix_green_dark_theme": "मैट्रिक्स ग्रीन डार्क थीम",
642 + "monero_light_theme": "मोनेरो लाइट थीम",
643 "cake_2fa_preset" : "केक 2एफए प्रीसेट",
644 "narrow": "सँकरा",
645 "normal": "सामान्य",
res/values/strings_hr.arb
+6
@@ -634,6 +634,12 @@
634 "setup_totp_recommended": "Postavite TOTP (preporučeno)",
635 "disable_buy": "Onemogući kupnju",
636 "disable_sell": "Onemogući akciju prodaje",
637 + "monero_dark_theme": "Monero tamna tema",
638 + "bitcoin_dark_theme": "Bitcoin Tamna tema",
639 + "bitcoin_light_theme": "Bitcoin Light Theme",
640 + "high_contrast_theme": "Tema visokog kontrasta",
641 + "matrix_green_dark_theme": "Matrix Green Dark Theme",
642 + "monero_light_theme": "Monero lagana tema",
643 "cake_2fa_preset" : "Cake 2FA Preset",
644 "narrow": "Usko",
645 "normal": "Normalno",
res/values/strings_id.arb
+6
@@ -658,6 +658,12 @@
658 "balance_page": "Halaman Saldo",
659 "share": "Membagikan",
660 "slidable": "Dapat digeser",
661 + "monero_dark_theme": "Tema Gelap Monero",
662 + "bitcoin_dark_theme": "Tema Gelap Bitcoin",
663 + "bitcoin_light_theme": "Tema Cahaya Bitcoin",
664 + "high_contrast_theme": "Tema Kontras Tinggi",
665 + "matrix_green_dark_theme": "Tema Matrix Green Dark",
666 + "monero_light_theme": "Tema Cahaya Monero",
667 "manage_nodes": "Kelola node",
668 "etherscan_history": "Sejarah Etherscan",
669 "template_name": "Nama Templat",
res/values/strings_it.arb
+6
@@ -670,6 +670,12 @@
670 "balance_page": "Pagina di equilibrio",
671 "share": "Condividere",
672 "slidable": "Scorrevole",
673 + "monero_dark_theme": "Tema scuro di Monero",
674 + "bitcoin_dark_theme": "Tema oscuro di Bitcoin",
675 + "bitcoin_light_theme": "Tema luce Bitcoin",
676 + "high_contrast_theme": "Tema ad alto contrasto",
677 + "matrix_green_dark_theme": "Tema Matrix verde scuro",
678 + "monero_light_theme": "Tema leggero Monero",
679 "manage_nodes": "Gestisci i nodi",
680 "etherscan_history": "Storia Etherscan",
681 "template_name": "Nome modello",
res/values/strings_ja.arb
+7 -1
@@ -670,6 +670,12 @@
670 "balance_page": "残高ページ",
671 "share": "共有",
672 "slidable": "スライド可能",
673 + "monero_dark_theme": "モネロダークテーマ",
674 + "bitcoin_dark_theme": "ビットコインダークテーマ",
675 + "bitcoin_light_theme": "ビットコインライトテーマ",
676 + "high_contrast_theme": "ハイコントラストテーマ",
677 + "matrix_green_dark_theme": "マトリックスグリーンダークテーマ",
678 + "monero_light_theme": "モネロ ライト テーマ",
679 "manage_nodes": "ノードの管理",
680 "etherscan_history": "イーサスキャンの歴史",
681 "template_name": "テンプレート名",
@@ -679,4 +685,4 @@
685 "support_description_guides": "一般的な問題のドキュメントとサポート",
686 "support_title_other_links": "その他のサポートリンク",
687 "support_description_other_links": "私たちのコミュニティに参加するか、他の方法を通して私たちのパートナーに連絡してください"
682 -}
\ No newline at end of file
688 +}
res/values/strings_ko.arb
+7 -1
@@ -670,6 +670,12 @@
670 "balance_page": "잔액 페이지",
671 "share": "공유하다",
672 "slidable": "슬라이딩 가능",
673 + "monero_dark_theme": "모네로 다크 테마",
674 + "bitcoin_dark_theme": "비트코인 다크 테마",
675 + "bitcoin_light_theme": "비트코인 라이트 테마",
676 + "high_contrast_theme": "고대비 테마",
677 + "matrix_green_dark_theme": "매트릭스 그린 다크 테마",
678 + "monero_light_theme": "모네로 라이트 테마",
679 "manage_nodes": "노드 관리",
680 "etherscan_history": "이더스캔 역사",
681 "template_name": "템플릿 이름",
@@ -679,4 +685,4 @@
685 "support_description_guides": "일반적인 문제에 대한 문서화 및 지원",
686 "support_title_other_links": "다른 지원 링크",
687 "support_description_other_links": "다른 방법을 통해 커뮤니티에 가입하거나 파트너에게 연락하십시오."
682 -}
\ No newline at end of file
688 +}
res/values/strings_my.arb
+7 -1
@@ -668,6 +668,12 @@
668 "balance_page": "လက်ကျန်စာမျက်နှာ",
669 "share": "မျှဝေပါ။",
670 "slidable": "လျှောချနိုင်သည်။",
671 + "monero_dark_theme": "Monero Dark အပြင်အဆင်",
672 + "bitcoin_dark_theme": "Bitcoin Dark Theme",
673 + "bitcoin_light_theme": "Bitcoin Light အပြင်အဆင်",
674 + "high_contrast_theme": "အလင်းအမှောင် မြင့်မားသော အပြင်အဆင်",
675 + "matrix_green_dark_theme": "Matrix Green Dark အပြင်အဆင်",
676 + "monero_light_theme": "Monero Light အပြင်အဆင်",
677 "manage_nodes": "ဆုံမှတ်များကို စီမံပါ။",
678 "etherscan_history": "Etherscan သမိုင်း",
679 "template_name": "နမူနာပုံစံ",
@@ -677,4 +683,4 @@
683 "support_description_guides": "ဘုံပြ issues နာများအတွက်စာရွက်စာတမ်းများနှင့်ထောက်ခံမှု",
684 "support_title_other_links": "အခြားအထောက်အပံ့လင့်များ",
685 "support_description_other_links": "ကျွန်ုပ်တို့၏လူမှုအသိုင်းအဝိုင်းများသို့ 0 င်ရောက်ပါ"
680 -}
\ No newline at end of file
686 +}
res/values/strings_nl.arb
+6
@@ -670,6 +670,12 @@
670 "balance_page": "Saldo pagina",
671 "share": "Deel",
672 "slidable": "Verschuifbaar",
673 + "monero_dark_theme": "Monero donker thema",
674 + "bitcoin_dark_theme": "Bitcoin donker thema",
675 + "bitcoin_light_theme": "Bitcoin Light-thema",
676 + "high_contrast_theme": "Thema met hoog contrast",
677 + "matrix_green_dark_theme": "Matrix groen donker thema",
678 + "monero_light_theme": "Monero Light-thema",
679 "manage_nodes": "Beheer knooppunten",
680 "etherscan_history": "Etherscan-geschiedenis",
681 "template_name": "Sjabloonnaam",
res/values/strings_pl.arb
+6
@@ -670,6 +670,12 @@
670 "balance_page": "Strona salda",
671 "share": "Udział",
672 "slidable": "Przesuwne",
673 + "monero_dark_theme": "Ciemny motyw Monero",
674 + "bitcoin_dark_theme": "Ciemny motyw Bitcoina",
675 + "bitcoin_light_theme": "Lekki motyw Bitcoin",
676 + "high_contrast_theme": "Motyw o wysokim kontraście",
677 + "matrix_green_dark_theme": "Matrix Zielony ciemny motyw",
678 + "monero_light_theme": "Lekki motyw Monero",
679 "manage_nodes": "Zarządzaj węzłami",
680 "etherscan_history": "Historia Etherscanu",
681 "template_name": "Nazwa szablonu",
res/values/strings_pt.arb
+6
@@ -669,6 +669,12 @@
669 "balance_page": "Página de saldo",
670 "share": "Compartilhar",
671 "slidable": "Deslizável",
672 + "monero_dark_theme": "Monero Tema Escuro",
673 + "bitcoin_dark_theme": "Tema escuro Bitcoin",
674 + "bitcoin_light_theme": "Tema claro de bitcoin",
675 + "high_contrast_theme": "Tema de alto contraste",
676 + "matrix_green_dark_theme": "Tema escuro verde matrix",
677 + "monero_light_theme": "Monero Light Theme",
678 "manage_nodes": "Gerenciar nós",
679 "etherscan_history": "história Etherscan",
680 "template_name": "Nome do modelo",
res/values/strings_ru.arb
+7 -1
@@ -670,6 +670,12 @@
670 "balance_page": "Страница баланса",
671 "share": "Делиться",
672 "slidable": "Скользящий",
673 + "monero_dark_theme": "Темная тема Monero",
674 + "bitcoin_dark_theme": "Биткойн Темная тема",
675 + "bitcoin_light_theme": "Легкая биткойн-тема",
676 + "high_contrast_theme": "Высококонтрастная тема",
677 + "matrix_green_dark_theme": "Матрица Зеленая Темная Тема",
678 + "monero_light_theme": "Светлая тема Monero",
679 "manage_nodes": "Управление узлами",
680 "etherscan_history": "История Эфириума",
681 "template_name": "Имя Шаблона",
@@ -679,4 +685,4 @@
685 "support_description_guides": "Документация и поддержка общих вопросов",
686 "support_title_other_links": "Другие ссылки на поддержку",
687 "support_description_other_links": "Присоединяйтесь к нашим сообществам или охватите нас наших партнеров с помощью других методов"
682 -}
\ No newline at end of file
688 +}
res/values/strings_th.arb
+7 -1
@@ -668,6 +668,12 @@
668 "balance_page": "หน้ายอดคงเหลือ",
669 "share": "แบ่งปัน",
670 "slidable": "เลื่อนได้",
671 + "monero_dark_theme": "ธีมมืด Monero",
672 + "bitcoin_dark_theme": "ธีมมืด Bitcoin",
673 + "bitcoin_light_theme": "ธีมแสง Bitcoin",
674 + "high_contrast_theme": "ธีมความคมชัดสูง",
675 + "matrix_green_dark_theme": "ธีมเมทริกซ์สีเขียวเข้ม",
676 + "monero_light_theme": "ธีมแสง Monero",
677 "manage_nodes": "จัดการโหนด",
678 "etherscan_history": "ประวัติอีเธอร์สแกน",
679 "template_name": "ชื่อแม่แบบ",
@@ -677,4 +683,4 @@
683 "support_description_guides": "เอกสารและการสนับสนุนสำหรับปัญหาทั่วไป",
684 "support_title_other_links": "ลิงค์สนับสนุนอื่น ๆ",
685 "support_description_other_links": "เข้าร่วมชุมชนของเราหรือเข้าถึงเราพันธมิตรของเราผ่านวิธีการอื่น ๆ"
680 -}
\ No newline at end of file
686 +}
res/values/strings_tr.arb
+6
@@ -669,6 +669,12 @@
669 "balance_page": "Bakiye Sayfası",
670 "share": "Paylaşmak",
671 "slidable": "kaydırılabilir",
672 + "monero_dark_theme": "Monero Koyu Tema",
673 + "bitcoin_dark_theme": "Bitcoin Karanlık Teması",
674 + "bitcoin_light_theme": "Bitcoin Hafif Tema",
675 + "high_contrast_theme": "Yüksek Kontrastlı Tema",
676 + "matrix_green_dark_theme": "Matrix Yeşil Koyu Tema",
677 + "monero_light_theme": "Monero Hafif Tema",
678 "manage_nodes": "Düğümleri yönet",
679 "etherscan_history": "Etherscan geçmişi",
680 "template_name": "şablon adı",
res/values/strings_uk.arb
+6
@@ -670,6 +670,12 @@
670 "balance_page": "Сторінка балансу",
671 "share": "Поділіться",
672 "slidable": "Розсувний",
673 + "monero_dark_theme": "Темна тема Monero",
674 + "bitcoin_dark_theme": "Темна тема Bitcoin",
675 + "bitcoin_light_theme": "Світла тема Bitcoin",
676 + "high_contrast_theme": "Тема високої контрастності",
677 + "matrix_green_dark_theme": "Зелена темна тема Matrix",
678 + "monero_light_theme": "Легка тема Monero",
679 "manage_nodes": "Керуйте вузлами",
680 "etherscan_history": "Історія Etherscan",
681 "template_name": "Назва шаблону",
res/values/strings_ur.arb
+7 -1
@@ -662,6 +662,12 @@
662 "balance_page": "بیلنس صفحہ",
663 "share": "بانٹیں",
664 "slidable": "سلائیڈ ایبل",
665 + "monero_dark_theme": "مونیرو ڈارک تھیم",
666 + "bitcoin_dark_theme": "بٹ کوائن ڈارک تھیم",
667 + "bitcoin_light_theme": "بٹ کوائن لائٹ تھیم",
668 + "high_contrast_theme": "ہائی کنٹراسٹ تھیم",
669 + "matrix_green_dark_theme": "میٹرکس گرین ڈارک تھیم",
670 + "monero_light_theme": "مونیرو لائٹ تھیم",
671 "manage_nodes": "۔ﮟﯾﺮﮐ ﻢﻈﻧ ﺎﮐ ﺱﮈﻮﻧ",
672 "etherscan_history": "ﺦﯾﺭﺎﺗ ﯽﮐ ﻦﯿﮑﺳﺍ ﺮﮭﺘﯾﺍ",
673 "template_name": "ٹیمپلیٹ کا نام",
@@ -671,4 +677,4 @@
677 "support_description_guides": "عام مسائل کے لئے دستاویزات اور مدد",
678 "support_title_other_links": "دوسرے سپورٹ لنکس",
679 "support_description_other_links": "ہماری برادریوں میں شامل ہوں یا دوسرے طریقوں سے ہمارے شراکت داروں تک پہنچیں"
674 -}
\ No newline at end of file
680 +}
res/values/strings_yo.arb
+8 -2
@@ -672,5 +672,11 @@
672 "support_title_guides": "Akara oyinbo Awọn Itọsọna Awọki oyinbo",
673 "support_description_guides": "Iwe ati atilẹyin fun awọn ọran ti o wọpọ",
674 "support_title_other_links": "Awọn ọna asopọ atilẹyin miiran",
675 - "support_description_other_links": "Darapọ mọ awọn agbegbe wa tabi de wa awọn alabaṣepọ wa nipasẹ awọn ọna miiran"
676 -}
\ No newline at end of file
675 + "support_description_other_links": "Darapọ mọ awọn agbegbe wa tabi de wa awọn alabaṣepọ wa nipasẹ awọn ọna miiran",
676 + "monero_dark_theme": "Monero Dudu Akori",
677 + "bitcoin_dark_theme": "Bitcoin Dark Akori",
678 + "bitcoin_light_theme": "Bitcoin Light Akori",
679 + "high_contrast_theme": "Akori Iyatọ giga",
680 + "matrix_green_dark_theme": "Matrix Green Dark Akori",
681 + "monero_light_theme": "Monero Light Akori"
682 +}
res/values/strings_zh.arb
+8 -2
@@ -677,5 +677,11 @@
677 "support_title_guides": "蛋糕钱包指南",
678 "support_description_guides": "对常见问题的文档和支持",
679 "support_title_other_links": "其他支持链接",
680 - "support_description_other_links": "加入我们的社区或通过其他方法与我们联系我们的合作伙伴"
681 -}
\ No newline at end of file
680 + "support_description_other_links": "加入我们的社区或通过其他方法与我们联系我们的合作伙伴",
681 + "monero_dark_theme": "门罗币深色主题",
682 + "bitcoin_dark_theme": "比特币黑暗主题",
683 + "bitcoin_light_theme": "比特币浅色主题",
684 + "high_contrast_theme": "高对比度主题",
685 + "matrix_green_dark_theme": "矩阵绿暗主题",
686 + "monero_light_theme": "门罗币浅色主题"
687 +}