diff --git a/google_fonts/static/Inter-Black.ttf b/google_fonts/Inter-Black.ttf similarity index 93% rename from google_fonts/static/Inter-Black.ttf rename to google_fonts/Inter-Black.ttf index 6bb38b6f7..5aecf7dc4 100644 Binary files a/google_fonts/static/Inter-Black.ttf and b/google_fonts/Inter-Black.ttf differ diff --git a/google_fonts/static/Inter-Bold.ttf b/google_fonts/Inter-Bold.ttf similarity index 93% rename from google_fonts/static/Inter-Bold.ttf rename to google_fonts/Inter-Bold.ttf index 906232896..8e82c70d1 100644 Binary files a/google_fonts/static/Inter-Bold.ttf and b/google_fonts/Inter-Bold.ttf differ diff --git a/google_fonts/static/Inter-ExtraBold.ttf b/google_fonts/Inter-ExtraBold.ttf similarity index 93% rename from google_fonts/static/Inter-ExtraBold.ttf rename to google_fonts/Inter-ExtraBold.ttf index c746904e2..cb4b8217f 100644 Binary files a/google_fonts/static/Inter-ExtraBold.ttf and b/google_fonts/Inter-ExtraBold.ttf differ diff --git a/google_fonts/static/Inter-ExtraLight.ttf b/google_fonts/Inter-ExtraLight.ttf similarity index 77% rename from google_fonts/static/Inter-ExtraLight.ttf rename to google_fonts/Inter-ExtraLight.ttf index 1c92afea1..64aee30a4 100644 Binary files a/google_fonts/static/Inter-ExtraLight.ttf and b/google_fonts/Inter-ExtraLight.ttf differ diff --git a/google_fonts/static/Inter-Light.ttf b/google_fonts/Inter-Light.ttf similarity index 77% rename from google_fonts/static/Inter-Light.ttf rename to google_fonts/Inter-Light.ttf index 3e1cd3242..9e265d890 100644 Binary files a/google_fonts/static/Inter-Light.ttf and b/google_fonts/Inter-Light.ttf differ diff --git a/google_fonts/static/Inter-Medium.ttf b/google_fonts/Inter-Medium.ttf similarity index 93% rename from google_fonts/static/Inter-Medium.ttf rename to google_fonts/Inter-Medium.ttf index 49b53ab34..b53fb1c4a 100644 Binary files a/google_fonts/static/Inter-Medium.ttf and b/google_fonts/Inter-Medium.ttf differ diff --git a/google_fonts/static/Inter-Regular.ttf b/google_fonts/Inter-Regular.ttf similarity index 77% rename from google_fonts/static/Inter-Regular.ttf rename to google_fonts/Inter-Regular.ttf index f17b596c9..8d4eebf20 100644 Binary files a/google_fonts/static/Inter-Regular.ttf and b/google_fonts/Inter-Regular.ttf differ diff --git a/google_fonts/static/Inter-SemiBold.ttf b/google_fonts/Inter-SemiBold.ttf similarity index 93% rename from google_fonts/static/Inter-SemiBold.ttf rename to google_fonts/Inter-SemiBold.ttf index 01523b222..c6aeeb16a 100644 Binary files a/google_fonts/static/Inter-SemiBold.ttf and b/google_fonts/Inter-SemiBold.ttf differ diff --git a/google_fonts/static/Inter-Thin.ttf b/google_fonts/Inter-Thin.ttf similarity index 77% rename from google_fonts/static/Inter-Thin.ttf rename to google_fonts/Inter-Thin.ttf index 089857e46..7aed55d56 100644 Binary files a/google_fonts/static/Inter-Thin.ttf and b/google_fonts/Inter-Thin.ttf differ diff --git a/google_fonts/Inter-VariableFont_slnt,wght.ttf b/google_fonts/Inter-VariableFont_slnt,wght.ttf deleted file mode 100644 index 969a990fb..000000000 Binary files a/google_fonts/Inter-VariableFont_slnt,wght.ttf and /dev/null differ diff --git a/google_fonts/LICENSE.txt b/google_fonts/LICENSE.txt new file mode 100644 index 000000000..75b52484e --- /dev/null +++ b/google_fonts/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/google_fonts/Roboto-Black.ttf b/google_fonts/Roboto-Black.ttf new file mode 100644 index 000000000..0112e7da6 Binary files /dev/null and b/google_fonts/Roboto-Black.ttf differ diff --git a/google_fonts/Roboto-BlackItalic.ttf b/google_fonts/Roboto-BlackItalic.ttf new file mode 100644 index 000000000..b2c6aca57 Binary files /dev/null and b/google_fonts/Roboto-BlackItalic.ttf differ diff --git a/google_fonts/Roboto-Bold.ttf b/google_fonts/Roboto-Bold.ttf new file mode 100644 index 000000000..43da14d84 Binary files /dev/null and b/google_fonts/Roboto-Bold.ttf differ diff --git a/google_fonts/Roboto-BoldItalic.ttf b/google_fonts/Roboto-BoldItalic.ttf new file mode 100644 index 000000000..bcfdab431 Binary files /dev/null and b/google_fonts/Roboto-BoldItalic.ttf differ diff --git a/google_fonts/Roboto-Italic.ttf b/google_fonts/Roboto-Italic.ttf new file mode 100644 index 000000000..1b5eaa361 Binary files /dev/null and b/google_fonts/Roboto-Italic.ttf differ diff --git a/google_fonts/Roboto-Light.ttf b/google_fonts/Roboto-Light.ttf new file mode 100644 index 000000000..e7307e72c Binary files /dev/null and b/google_fonts/Roboto-Light.ttf differ diff --git a/google_fonts/Roboto-LightItalic.ttf b/google_fonts/Roboto-LightItalic.ttf new file mode 100644 index 000000000..2d277afb2 Binary files /dev/null and b/google_fonts/Roboto-LightItalic.ttf differ diff --git a/google_fonts/Roboto-Medium.ttf b/google_fonts/Roboto-Medium.ttf new file mode 100644 index 000000000..ac0f908b9 Binary files /dev/null and b/google_fonts/Roboto-Medium.ttf differ diff --git a/google_fonts/Roboto-MediumItalic.ttf b/google_fonts/Roboto-MediumItalic.ttf new file mode 100644 index 000000000..fc36a4785 Binary files /dev/null and b/google_fonts/Roboto-MediumItalic.ttf differ diff --git a/google_fonts/Roboto-Regular.ttf b/google_fonts/Roboto-Regular.ttf new file mode 100644 index 000000000..ddf4bfacb Binary files /dev/null and b/google_fonts/Roboto-Regular.ttf differ diff --git a/google_fonts/Roboto-Thin.ttf b/google_fonts/Roboto-Thin.ttf new file mode 100644 index 000000000..2e0dee6a8 Binary files /dev/null and b/google_fonts/Roboto-Thin.ttf differ diff --git a/google_fonts/Roboto-ThinItalic.ttf b/google_fonts/Roboto-ThinItalic.ttf new file mode 100644 index 000000000..084f9c0f5 Binary files /dev/null and b/google_fonts/Roboto-ThinItalic.ttf differ diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index f4931c674..1bfb53e8d 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -449,7 +449,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 61; + CURRENT_PROJECT_VERSION = 63; DEVELOPMENT_TEAM = 4DQKUWSG6C; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -503,7 +503,7 @@ "$(PROJECT_DIR)/../crypto_plugins/flutter_libmonero/cw_shared_external/ios/External/ios/**", "$(PROJECT_DIR)/../crypto_plugins/flutter_libepiccash/ios/libs", ); - MARKETING_VERSION = 1.4.46; + MARKETING_VERSION = 1.4.48; ONLY_ACTIVE_ARCH = NO; PRODUCT_BUNDLE_IDENTIFIER = com.cypherstack.stackwallet; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -633,7 +633,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 61; + CURRENT_PROJECT_VERSION = 63; DEVELOPMENT_TEAM = 4DQKUWSG6C; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -687,7 +687,7 @@ "$(PROJECT_DIR)/../crypto_plugins/flutter_libmonero/cw_shared_external/ios/External/ios/**", "$(PROJECT_DIR)/../crypto_plugins/flutter_libepiccash/ios/libs", ); - MARKETING_VERSION = 1.4.46; + MARKETING_VERSION = 1.4.48; ONLY_ACTIVE_ARCH = NO; PRODUCT_BUNDLE_IDENTIFIER = com.cypherstack.stackwallet; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -709,7 +709,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 61; + CURRENT_PROJECT_VERSION = 63; DEVELOPMENT_TEAM = 4DQKUWSG6C; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -763,7 +763,7 @@ "$(PROJECT_DIR)/../crypto_plugins/flutter_libmonero/cw_shared_external/ios/External/ios/**", "$(PROJECT_DIR)/../crypto_plugins/flutter_libepiccash/ios/libs", ); - MARKETING_VERSION = 1.4.46; + MARKETING_VERSION = 1.4.48; ONLY_ACTIVE_ARCH = NO; PRODUCT_BUNDLE_IDENTIFIER = com.cypherstack.stackwallet; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/lib/main.dart b/lib/main.dart index 914fe59c2..be1d11d0c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -71,6 +71,7 @@ final openedFromSWBFileStringStateProvider = // miscellaneous box for later use void main() async { WidgetsBinding widgetsBinding = WidgetsFlutterBinding.ensureInitialized(); + GoogleFonts.config.allowRuntimeFetching = false; if (Util.isDesktop) { setWindowTitle('Stack Wallet'); diff --git a/lib/pages/add_wallet_views/add_wallet_view/sub_widgets/coin_select_item.dart b/lib/pages/add_wallet_views/add_wallet_view/sub_widgets/coin_select_item.dart index 0821b8aae..87ba95e64 100644 --- a/lib/pages/add_wallet_views/add_wallet_view/sub_widgets/coin_select_item.dart +++ b/lib/pages/add_wallet_views/add_wallet_view/sub_widgets/coin_select_item.dart @@ -62,8 +62,7 @@ class CoinSelectItem extends ConsumerWidget { coin.prettyName, style: isDesktop ? STextStyles.desktopTextMedium(context) - : STextStyles.subtitle(context).copyWith( - fontWeight: FontWeight.w600, + : STextStyles.subtitle600(context).copyWith( fontSize: 14, ), ), diff --git a/lib/pages/add_wallet_views/restore_wallet_view/restore_options_view/restore_options_view.dart b/lib/pages/add_wallet_views/restore_wallet_view/restore_options_view/restore_options_view.dart index 5df7fd81d..ffa10afc4 100644 --- a/lib/pages/add_wallet_views/restore_wallet_view/restore_options_view/restore_options_view.dart +++ b/lib/pages/add_wallet_views/restore_wallet_view/restore_options_view/restore_options_view.dart @@ -73,43 +73,62 @@ class _RestoreOptionsViewState extends ConsumerState { super.dispose(); } - TextStyle get _datePickerTextStyleBase => GoogleFonts.inter( - color: baseColor, - fontSize: 12, - fontWeight: FontWeight.w400, - letterSpacing: 0.5, - ); MaterialRoundedDatePickerStyle _buildDatePickerStyle() { return MaterialRoundedDatePickerStyle( paddingMonthHeader: const EdgeInsets.only(top: 11), colorArrowNext: Theme.of(context).extension()!.textSubtitle1, colorArrowPrevious: Theme.of(context).extension()!.textSubtitle1, - textStyleButtonNegative: _datePickerTextStyleBase.copyWith( - fontSize: 16, fontWeight: FontWeight.w600), - textStyleButtonPositive: _datePickerTextStyleBase.copyWith( - fontSize: 16, fontWeight: FontWeight.w600), - textStyleCurrentDayOnCalendar: _datePickerTextStyleBase.copyWith( + textStyleButtonNegative: GoogleFonts.inter( + color: baseColor, + letterSpacing: 0.5, + fontSize: 16, + fontWeight: FontWeight.w600, + ), + textStyleButtonPositive: GoogleFonts.inter( + color: baseColor, + letterSpacing: 0.5, + fontSize: 16, + fontWeight: FontWeight.w600, + ), + textStyleCurrentDayOnCalendar: GoogleFonts.inter( + fontSize: 12, + fontWeight: FontWeight.w400, + letterSpacing: 0.5, color: Theme.of(context).extension()!.accentColorDark, ), - textStyleDayHeader: _datePickerTextStyleBase.copyWith( + textStyleDayHeader: GoogleFonts.inter( + letterSpacing: 0.5, color: Theme.of(context).extension()!.accentColorDark, fontSize: 16, fontWeight: FontWeight.w600, ), - textStyleDayOnCalendar: _datePickerTextStyleBase, - textStyleDayOnCalendarDisabled: _datePickerTextStyleBase.copyWith( + textStyleDayOnCalendar: GoogleFonts.inter( + color: baseColor, + fontSize: 12, + fontWeight: FontWeight.w400, + letterSpacing: 0.5, + ), + textStyleDayOnCalendarDisabled: GoogleFonts.inter( + fontSize: 12, + fontWeight: FontWeight.w400, + letterSpacing: 0.5, color: Theme.of(context).extension()!.textSubtitle3, ), - textStyleDayOnCalendarSelected: _datePickerTextStyleBase.copyWith( + textStyleDayOnCalendarSelected: GoogleFonts.inter( + fontSize: 12, + fontWeight: FontWeight.w400, + letterSpacing: 0.5, color: Theme.of(context).extension()!.popupBG, ), - textStyleMonthYearHeader: _datePickerTextStyleBase.copyWith( + textStyleMonthYearHeader: GoogleFonts.inter( + letterSpacing: 0.5, color: Theme.of(context).extension()!.textSubtitle1, fontSize: 16, fontWeight: FontWeight.w600, ), - textStyleYearButton: _datePickerTextStyleBase.copyWith( + textStyleYearButton: GoogleFonts.inter( + letterSpacing: 0.5, color: Theme.of(context).extension()!.textWhite, fontSize: 16, fontWeight: FontWeight.w600, @@ -120,12 +139,14 @@ class _RestoreOptionsViewState extends ConsumerState { MaterialRoundedYearPickerStyle _buildYearPickerStyle() { return MaterialRoundedYearPickerStyle( - textStyleYear: _datePickerTextStyleBase.copyWith( + textStyleYear: GoogleFonts.inter( + letterSpacing: 0.5, color: Theme.of(context).extension()!.textSubtitle2, fontWeight: FontWeight.w600, fontSize: 16, ), - textStyleYearSelected: _datePickerTextStyleBase.copyWith( + textStyleYearSelected: GoogleFonts.inter( + letterSpacing: 0.5, color: Theme.of(context).extension()!.accentColorDark, fontWeight: FontWeight.w600, fontSize: 18, diff --git a/lib/pages/add_wallet_views/verify_recovery_phrase_view/verify_recovery_phrase_view.dart b/lib/pages/add_wallet_views/verify_recovery_phrase_view/verify_recovery_phrase_view.dart index cdfff73ca..5745c6b65 100644 --- a/lib/pages/add_wallet_views/verify_recovery_phrase_view/verify_recovery_phrase_view.dart +++ b/lib/pages/add_wallet_views/verify_recovery_phrase_view/verify_recovery_phrase_view.dart @@ -277,8 +277,7 @@ class _VerifyRecoveryPhraseViewState child: Text( "${correctIndex + 1}", textAlign: TextAlign.center, - style: STextStyles.subtitle(context).copyWith( - fontWeight: FontWeight.w600, + style: STextStyles.subtitle600(context).copyWith( fontSize: 32, letterSpacing: 0.25, ), diff --git a/lib/pages/address_book_views/subviews/add_address_book_entry_view.dart b/lib/pages/address_book_views/subviews/add_address_book_entry_view.dart index a28997e0f..4fa89908c 100644 --- a/lib/pages/address_book_views/subviews/add_address_book_entry_view.dart +++ b/lib/pages/address_book_views/subviews/add_address_book_entry_view.dart @@ -16,6 +16,7 @@ import 'package:stackwallet/utilities/constants.dart'; import 'package:stackwallet/utilities/text_styles.dart'; import 'package:stackwallet/utilities/theme/stack_colors.dart'; import 'package:stackwallet/widgets/custom_buttons/app_bar_icon_button.dart'; +import 'package:stackwallet/widgets/custom_buttons/blue_text_button.dart'; import 'package:stackwallet/widgets/emoji_select_sheet.dart'; import 'package:stackwallet/widgets/icon_widgets/x_icon.dart'; import 'package:stackwallet/widgets/stack_text_field.dart'; @@ -73,10 +74,23 @@ class _AddAddressBookEntryViewState } List forms = []; - int _formCount = 0; + final Set _formIds = {}; + + void _removeForm(int id) { + forms.retainWhere((e) => e.id != id); + _formIds.remove(id); + ref.refresh(addressEntryDataProvider(id)); + setState(() {}); + } void _addForm() { - int id = ++_formCount; + int id = 0; + // ensure unique form id while allowing reuse of removed form ids + while (_formIds.contains(id)) { + id++; + } + _formIds.add(id); + forms.add( NewContactAddressEntryForm( key: Key("contactAddressEntryForm_$id"), @@ -303,22 +317,34 @@ class _AddAddressBookEntryViewState }, ), ), - if (_formCount <= 1) + if (forms.length <= 1) const SizedBox( height: 8, ), - if (_formCount <= 1) forms[0], - if (_formCount > 1) - for (int i = 0; i < _formCount; i++) + if (forms.length <= 1) forms[0], + if (forms.length > 1) + for (int i = 0; i < forms.length; i++) Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const SizedBox( height: 12, ), - Text( - "Address ${i + 1}", - style: STextStyles.smallMed12(context), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text( + "Address ${i + 1}", + style: STextStyles.smallMed12(context), + ), + BlueTextButton( + onTap: () { + _removeForm(forms[i].id); + }, + text: "Remove", + ), + ], ), const SizedBox( height: 8, @@ -329,7 +355,7 @@ class _AddAddressBookEntryViewState const SizedBox( height: 16, ), - GestureDetector( + BlueTextButton( onTap: () { _addForm(); scrollController.animateTo( @@ -338,11 +364,15 @@ class _AddAddressBookEntryViewState curve: Curves.easeInOut, ); }, - child: Text( - "+ Add another address", - style: STextStyles.largeMedium14(context), - ), + text: "+ Add another address", ), + // GestureDetector( + // + // child: Text( + // "+ Add another address", + // style: STextStyles.largeMedium14(context), + // ), + // ), const SizedBox( height: 16, ), @@ -411,10 +441,12 @@ class _AddAddressBookEntryViewState } List entries = []; - for (int i = 0; i < _formCount; i++) { + for (int i = 0; + i < forms.length; + i++) { entries.add(ref .read(addressEntryDataProvider( - i + 1)) + forms[i].id)) .buildAddressEntry()); } Contact contact = Contact( @@ -438,7 +470,15 @@ class _AddAddressBookEntryViewState : null, child: Text( "Save", - style: STextStyles.button(context), + style: STextStyles.button(context).copyWith( + color: shouldEnableSave + ? Theme.of(context) + .extension()! + .buttonTextPrimary + : Theme.of(context) + .extension()! + .buttonTextPrimaryDisabled, + ), ), ); }, diff --git a/lib/pages/exchange_view/exchange_step_views/step_4_view.dart b/lib/pages/exchange_view/exchange_step_views/step_4_view.dart index 4a228baab..222ccfc08 100644 --- a/lib/pages/exchange_view/exchange_step_views/step_4_view.dart +++ b/lib/pages/exchange_view/exchange_step_views/step_4_view.dart @@ -178,11 +178,10 @@ class _Step4ViewState extends ConsumerState { text: TextSpan( text: "You must send at least ${model.sendAmount.toString()} ${model.sendTicker}. ", - style: STextStyles.label(context).copyWith( + style: STextStyles.label700(context).copyWith( color: Theme.of(context) .extension()! .warningForeground, - fontWeight: FontWeight.w700, ), children: [ TextSpan( @@ -192,7 +191,6 @@ class _Step4ViewState extends ConsumerState { color: Theme.of(context) .extension()! .warningForeground, - fontWeight: FontWeight.w500, ), ), ], diff --git a/lib/pages/exchange_view/exchange_view.dart b/lib/pages/exchange_view/exchange_view.dart index 2f0bfe194..1487f5f6a 100644 --- a/lib/pages/exchange_view/exchange_view.dart +++ b/lib/pages/exchange_view/exchange_view.dart @@ -379,6 +379,11 @@ class _ExchangeViewState extends ConsumerState { height: 4, ), TextFormField( + style: STextStyles.smallMed14(context).copyWith( + color: Theme.of(context) + .extension()! + .textDark, + ), focusNode: _sendFocusNode, controller: _sendController, textAlign: TextAlign.right, @@ -720,6 +725,11 @@ class _ExchangeViewState extends ConsumerState { height: 4, ), TextFormField( + style: STextStyles.smallMed14(context).copyWith( + color: Theme.of(context) + .extension()! + .textDark, + ), focusNode: _receiveFocusNode, controller: _receiveController, readOnly: ref diff --git a/lib/pages/exchange_view/trade_details_view.dart b/lib/pages/exchange_view/trade_details_view.dart index 439b0f659..6c299ed24 100644 --- a/lib/pages/exchange_view/trade_details_view.dart +++ b/lib/pages/exchange_view/trade_details_view.dart @@ -249,11 +249,10 @@ class _TradeDetailsViewState extends ConsumerState { "You must send at least ${sendAmount.toStringAsFixed( trade.fromCurrency.toLowerCase() == "xmr" ? 12 : 8, )} ${trade.fromCurrency.toUpperCase()}. ", - style: STextStyles.label(context).copyWith( + style: STextStyles.label700(context).copyWith( color: Theme.of(context) .extension()! .warningForeground, - fontWeight: FontWeight.w700, ), children: [ TextSpan( @@ -267,7 +266,6 @@ class _TradeDetailsViewState extends ConsumerState { color: Theme.of(context) .extension()! .warningForeground, - fontWeight: FontWeight.w500, ), ), ]), diff --git a/lib/pages/exchange_view/wallet_initiated_exchange_view.dart b/lib/pages/exchange_view/wallet_initiated_exchange_view.dart index 2be98f002..179555ba6 100644 --- a/lib/pages/exchange_view/wallet_initiated_exchange_view.dart +++ b/lib/pages/exchange_view/wallet_initiated_exchange_view.dart @@ -424,6 +424,11 @@ class _WalletInitiatedExchangeViewState height: 4, ), TextFormField( + style: STextStyles.smallMed14(context).copyWith( + color: Theme.of(context) + .extension()! + .textDark, + ), focusNode: _sendFocusNode, controller: _sendController, textAlign: TextAlign.right, @@ -762,6 +767,9 @@ class _WalletInitiatedExchangeViewState Assets.svg.swap, width: 20, height: 20, + color: Theme.of(context) + .extension()! + .accentColorDark, ), ), ), @@ -788,6 +796,11 @@ class _WalletInitiatedExchangeViewState height: 4, ), TextFormField( + style: STextStyles.smallMed14(context).copyWith( + color: Theme.of(context) + .extension()! + .textDark, + ), focusNode: _receiveFocusNode, controller: _receiveController, readOnly: ref diff --git a/lib/pages/send_view/confirm_transaction_view.dart b/lib/pages/send_view/confirm_transaction_view.dart index fff346ee7..65537f20e 100644 --- a/lib/pages/send_view/confirm_transaction_view.dart +++ b/lib/pages/send_view/confirm_transaction_view.dart @@ -144,6 +144,7 @@ class _ConfirmTransactionViewState final managerProvider = ref.watch(walletsChangeNotifierProvider .select((value) => value.getManagerProvider(walletId))); return Scaffold( + backgroundColor: Theme.of(context).extension()!.background, appBar: AppBar( backgroundColor: Theme.of(context).extension()!.background, leading: AppBarBackButton( @@ -294,7 +295,12 @@ class _ConfirmTransactionViewState children: [ Text( "Total amount", - style: STextStyles.titleBold12(context), + style: + STextStyles.titleBold12(context).copyWith( + color: Theme.of(context) + .extension()! + .textConfirmTotalAmount, + ), ), Text( "${Format.satoshiAmountToPrettyString( @@ -308,7 +314,12 @@ class _ConfirmTransactionViewState managerProvider .select((value) => value.coin), ).ticker}", - style: STextStyles.itemSubtitle12(context), + style: STextStyles.itemSubtitle12(context) + .copyWith( + color: Theme.of(context) + .extension()! + .textConfirmTotalAmount, + ), textAlign: TextAlign.right, ), ], diff --git a/lib/pages/send_view/send_view.dart b/lib/pages/send_view/send_view.dart index ee9644c2a..25264e19c 100644 --- a/lib/pages/send_view/send_view.dart +++ b/lib/pages/send_view/send_view.dart @@ -523,11 +523,11 @@ class _SendViewState extends ConsumerState { locale: locale, decimalPlaces: 2, )} ${ref.watch(prefsChangeNotifierProvider.select((value) => value.currency))}", - style: STextStyles.titleBold12( - context) - .copyWith( + style: + STextStyles.titleBold12_400( + context) + .copyWith( fontSize: 8, - fontWeight: FontWeight.w400, ), textAlign: TextAlign.right, ) @@ -1060,6 +1060,11 @@ class _SendViewState extends ConsumerState { height: 8, ), TextField( + style: STextStyles.smallMed14(context).copyWith( + color: Theme.of(context) + .extension()! + .textDark, + ), key: const Key("amountInputFieldCryptoTextFieldKey"), controller: cryptoAmountController, focusNode: _cryptoFocus, @@ -1106,6 +1111,11 @@ class _SendViewState extends ConsumerState { height: 8, ), TextField( + style: STextStyles.smallMed14(context).copyWith( + color: Theme.of(context) + .extension()! + .textDark, + ), key: const Key("amountInputFieldFiatTextFieldKey"), controller: baseAmountController, focusNode: _baseFocus, diff --git a/lib/pages/wallet_view/sub_widgets/wallet_navigation_bar.dart b/lib/pages/wallet_view/sub_widgets/wallet_navigation_bar.dart index b82992673..04147c883 100644 --- a/lib/pages/wallet_view/sub_widgets/wallet_navigation_bar.dart +++ b/lib/pages/wallet_view/sub_widgets/wallet_navigation_bar.dart @@ -27,7 +27,7 @@ class WalletNavigationBar extends StatelessWidget { return Container( height: height, decoration: BoxDecoration( - color: Theme.of(context).extension()!.popupBG, + color: Theme.of(context).extension()!.bottomNavBack, boxShadow: [ Theme.of(context).extension()!.standardBoxShadow ], diff --git a/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart b/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart index 9b4c384b5..853e4dd9b 100644 --- a/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart +++ b/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart @@ -128,8 +128,8 @@ class _WalletSummaryInfoState extends State { if (coin == Coin.firo || coin == Coin.firoTestNet) Text( "${_showAvailable ? "Private" : "Public"} Balance", - style: STextStyles.subtitle(context).copyWith( - fontWeight: FontWeight.w500, + style: + STextStyles.subtitle500(context).copyWith( color: Theme.of(context) .extension()! .textFavoriteCard, @@ -138,8 +138,8 @@ class _WalletSummaryInfoState extends State { if (coin != Coin.firo && coin != Coin.firoTestNet) Text( "${_showAvailable ? "Available" : "Full"} Balance", - style: STextStyles.subtitle(context).copyWith( - fontWeight: FontWeight.w500, + style: + STextStyles.subtitle500(context).copyWith( color: Theme.of(context) .extension()! .textFavoriteCard, @@ -182,8 +182,7 @@ class _WalletSummaryInfoState extends State { locale: locale, decimalPlaces: 2, )} $baseCurrency", - style: STextStyles.subtitle(context).copyWith( - fontWeight: FontWeight.w500, + style: STextStyles.subtitle500(context).copyWith( color: Theme.of(context) .extension()! .textFavoriteCard, @@ -202,8 +201,8 @@ class _WalletSummaryInfoState extends State { if (coin == Coin.firo || coin == Coin.firoTestNet) Text( "${_showAvailable ? "Private" : "Public"} Balance", - style: STextStyles.subtitle(context).copyWith( - fontWeight: FontWeight.w500, + style: + STextStyles.subtitle500(context).copyWith( color: Theme.of(context) .extension()! .textFavoriteCard, @@ -212,8 +211,8 @@ class _WalletSummaryInfoState extends State { if (coin != Coin.firo && coin != Coin.firoTestNet) Text( "${_showAvailable ? "Available" : "Full"} Balance", - style: STextStyles.subtitle(context).copyWith( - fontWeight: FontWeight.w500, + style: + STextStyles.subtitle500(context).copyWith( color: Theme.of(context) .extension()! .textFavoriteCard, @@ -255,8 +254,7 @@ class _WalletSummaryInfoState extends State { "Loading balance..", "Loading balance..." ], - style: STextStyles.subtitle(context).copyWith( - fontWeight: FontWeight.w500, + style: STextStyles.subtitle500(context).copyWith( color: Theme.of(context) .extension()! .textFavoriteCard, diff --git a/lib/pages/wallet_view/transaction_views/transaction_search_filter_view.dart b/lib/pages/wallet_view/transaction_views/transaction_search_filter_view.dart index 5966e3f5c..48fe89e65 100644 --- a/lib/pages/wallet_view/transaction_views/transaction_search_filter_view.dart +++ b/lib/pages/wallet_view/transaction_views/transaction_search_filter_view.dart @@ -114,13 +114,6 @@ class _TransactionSearchViewState var _selectedFromDate = DateTime(2007); var _selectedToDate = DateTime.now(); - TextStyle get _datePickerTextStyleBase => GoogleFonts.inter( - color: baseColor, - fontSize: 12, - fontWeight: FontWeight.w400, - letterSpacing: 0.5, - ); - MaterialRoundedDatePickerStyle _buildDatePickerStyle() { return MaterialRoundedDatePickerStyle( backgroundPicker: Theme.of(context).extension()!.popupBG, @@ -129,30 +122,56 @@ class _TransactionSearchViewState colorArrowNext: Theme.of(context).extension()!.textSubtitle1, colorArrowPrevious: Theme.of(context).extension()!.textSubtitle1, - textStyleButtonNegative: _datePickerTextStyleBase.copyWith( - fontSize: 16, fontWeight: FontWeight.w600), - textStyleButtonPositive: _datePickerTextStyleBase.copyWith( - fontSize: 16, fontWeight: FontWeight.w600), - textStyleCurrentDayOnCalendar: _datePickerTextStyleBase.copyWith( - color: Theme.of(context).extension()!.accentColorDark), - textStyleDayHeader: _datePickerTextStyleBase.copyWith( + textStyleButtonNegative: GoogleFonts.inter( + letterSpacing: 0.5, + color: baseColor, + fontSize: 16, + fontWeight: FontWeight.w600, + ), + textStyleButtonPositive: GoogleFonts.inter( + letterSpacing: 0.5, + color: baseColor, + fontSize: 16, + fontWeight: FontWeight.w600, + ), + textStyleCurrentDayOnCalendar: GoogleFonts.inter( + letterSpacing: 0.5, + color: Theme.of(context).extension()!.accentColorDark, + fontWeight: FontWeight.w400, + fontSize: 12, + ), + textStyleDayHeader: GoogleFonts.inter( + letterSpacing: 0.5, color: Theme.of(context).extension()!.accentColorDark, fontSize: 16, fontWeight: FontWeight.w600, ), - textStyleDayOnCalendar: _datePickerTextStyleBase, - textStyleDayOnCalendarDisabled: _datePickerTextStyleBase.copyWith( + textStyleDayOnCalendar: GoogleFonts.inter( + letterSpacing: 0.5, + color: baseColor, + fontSize: 12, + fontWeight: FontWeight.w400, + ), + textStyleDayOnCalendarDisabled: GoogleFonts.inter( + letterSpacing: 0.5, color: Theme.of(context).extension()!.textSubtitle3, + fontWeight: FontWeight.w400, + fontSize: 12, ), - textStyleDayOnCalendarSelected: _datePickerTextStyleBase.copyWith( + textStyleDayOnCalendarSelected: GoogleFonts.inter( + letterSpacing: 0.5, color: Theme.of(context).extension()!.textWhite, + fontWeight: FontWeight.w400, + fontSize: 12, ), - textStyleMonthYearHeader: _datePickerTextStyleBase.copyWith( + textStyleMonthYearHeader: GoogleFonts.inter( + letterSpacing: 0.5, color: Theme.of(context).extension()!.textSubtitle1, fontSize: 16, fontWeight: FontWeight.w600, ), - textStyleYearButton: _datePickerTextStyleBase.copyWith( + textStyleYearButton: GoogleFonts.inter( + letterSpacing: 0.5, color: Theme.of(context).extension()!.textWhite, fontSize: 16, fontWeight: FontWeight.w600, @@ -164,12 +183,14 @@ class _TransactionSearchViewState MaterialRoundedYearPickerStyle _buildYearPickerStyle() { return MaterialRoundedYearPickerStyle( backgroundPicker: Theme.of(context).extension()!.popupBG, - textStyleYear: _datePickerTextStyleBase.copyWith( + textStyleYear: GoogleFonts.inter( + letterSpacing: 0.5, color: Theme.of(context).extension()!.textSubtitle2, fontWeight: FontWeight.w600, fontSize: 16, ), - textStyleYearSelected: _datePickerTextStyleBase.copyWith( + textStyleYearSelected: GoogleFonts.inter( + letterSpacing: 0.5, color: Theme.of(context).extension()!.accentColorDark, fontWeight: FontWeight.w600, fontSize: 18, diff --git a/lib/services/coins/firo/firo_wallet.dart b/lib/services/coins/firo/firo_wallet.dart index a88f37996..aafa5e6f2 100644 --- a/lib/services/coins/firo/firo_wallet.dart +++ b/lib/services/coins/firo/firo_wallet.dart @@ -623,6 +623,7 @@ Future isolateCreateJoinSplitTransaction( "value": amount, "fees": Format.satoshisToAmount(fee).toDouble(), "fee": fee, + "vSize": extTx.virtualSize(), "jmintValue": changeToMint, "publicCoin": "jmintData.publicCoin", "spendCoinIndexes": spendCoinIndexes, @@ -1142,6 +1143,17 @@ class FiroWallet extends CoinServiceAPI { throw Exception("Error Creating Transaction!"); } } else { + final fee = txHexOrError["fee"] as int; + final vSize = txHexOrError["vSize"] as int; + + Logging.instance.log("prepared fee: $fee", level: LogLevel.Info); + Logging.instance.log("prepared vSize: $vSize", level: LogLevel.Info); + + // fee should never be less than vSize sanity check + if (fee < vSize) { + throw Exception( + "Error in fee calculation: Transaction fee cannot be less than vSize"); + } return txHexOrError as Map; } } catch (e, s) { diff --git a/lib/services/wallets_service.dart b/lib/services/wallets_service.dart index b978f1edc..0700950a4 100644 --- a/lib/services/wallets_service.dart +++ b/lib/services/wallets_service.dart @@ -294,6 +294,10 @@ class WalletsService extends ChangeNotifier { key: "${walletId}_mnemonicHasBeenVerified") as bool?; if (isVerified == null) { + Logging.instance.log( + "isMnemonicVerified(walletId: $walletId) returned null which should never happen!", + level: LogLevel.Error, + ); throw Exception( "isMnemonicVerified(walletId: $walletId) returned null which should never happen!"); } else { @@ -307,9 +311,17 @@ class WalletsService extends ChangeNotifier { key: "${walletId}_mnemonicHasBeenVerified") as bool?; if (isVerified == null) { + Logging.instance.log( + "setMnemonicVerified(walletId: $walletId) tried running on non existent wallet!", + level: LogLevel.Error, + ); throw Exception( "setMnemonicVerified(walletId: $walletId) tried running on non existent wallet!"); } else if (isVerified) { + Logging.instance.log( + "setMnemonicVerified(walletId: $walletId) tried running on already verified wallet!", + level: LogLevel.Error, + ); throw Exception( "setMnemonicVerified(walletId: $walletId) tried running on already verified wallet!"); } else { @@ -317,6 +329,10 @@ class WalletsService extends ChangeNotifier { boxName: DB.boxNameAllWalletsData, key: "${walletId}_mnemonicHasBeenVerified", value: true); + Logging.instance.log( + "setMnemonicVerified(walletId: $walletId) successful", + level: LogLevel.Error, + ); } } @@ -331,6 +347,11 @@ class WalletsService extends ChangeNotifier { return 3; } + Logging.instance.log( + "deleteWallet called with name=$name and id=$walletId", + level: LogLevel.Warning, + ); + final shell = names.remove(walletId); if (shell == null) { diff --git a/lib/utilities/text_styles.dart b/lib/utilities/text_styles.dart index 191f863f1..1f19da807 100644 --- a/lib/utilities/text_styles.dart +++ b/lib/utilities/text_styles.dart @@ -27,12 +27,30 @@ class STextStyles { fontSize: 16, ); + static TextStyle titleBold12_400(BuildContext context) => GoogleFonts.inter( + color: Theme.of(context).extension()!.textDark, + fontWeight: FontWeight.w400, + fontSize: 16, + ); + static TextStyle subtitle(BuildContext context) => GoogleFonts.inter( color: Theme.of(context).extension()!.textDark, fontWeight: FontWeight.w400, fontSize: 16, ); + static TextStyle subtitle500(BuildContext context) => GoogleFonts.inter( + color: Theme.of(context).extension()!.textDark, + fontWeight: FontWeight.w500, + fontSize: 16, + ); + + static TextStyle subtitle600(BuildContext context) => GoogleFonts.inter( + color: Theme.of(context).extension()!.textDark, + fontWeight: FontWeight.w600, + fontSize: 16, + ); + static TextStyle button(BuildContext context) => GoogleFonts.inter( color: Theme.of(context).extension()!.buttonTextPrimary, fontWeight: FontWeight.w500, @@ -63,6 +81,12 @@ class STextStyles { fontSize: 12, ); + static TextStyle label700(BuildContext context) => GoogleFonts.inter( + color: Theme.of(context).extension()!.textSubtitle1, + fontWeight: FontWeight.w700, + fontSize: 12, + ); + static TextStyle itemSubtitle(BuildContext context) => GoogleFonts.inter( color: Theme.of(context).extension()!.infoItemLabel, fontWeight: FontWeight.w500, @@ -75,6 +99,13 @@ class STextStyles { fontSize: 14, ); + static TextStyle itemSubtitle12_600(BuildContext context) => + GoogleFonts.inter( + color: Theme.of(context).extension()!.textDark, + fontWeight: FontWeight.w500, + fontSize: 14, + ); + static TextStyle fieldLabel(BuildContext context) => GoogleFonts.inter( color: Theme.of(context).extension()!.textSubtitle2, fontWeight: FontWeight.w500, diff --git a/lib/utilities/theme/color_theme.dart b/lib/utilities/theme/color_theme.dart index 73da6ba66..d30499f81 100644 --- a/lib/utilities/theme/color_theme.dart +++ b/lib/utilities/theme/color_theme.dart @@ -173,6 +173,7 @@ abstract class StackColorTheme { Color get loadingOverlayTextColor; Color get myStackContactIconBG; + Color get textConfirmTotalAmount; } class CoinThemeColor { diff --git a/lib/utilities/theme/dark_colors.dart b/lib/utilities/theme/dark_colors.dart index ee7551a27..b28880da8 100644 --- a/lib/utilities/theme/dark_colors.dart +++ b/lib/utilities/theme/dark_colors.dart @@ -70,7 +70,7 @@ class DarkColors extends StackColorTheme { @override Color get numpadBackDefault => const Color(0xFF4C86E9); @override - Color get bottomNavBack => const Color(0xFFA2A2A2); + Color get bottomNavBack => const Color(0xFF3E4148); // button text/element @override @@ -299,4 +299,6 @@ class DarkColors extends StackColorTheme { Color get loadingOverlayTextColor => const Color(0xFFF7F7F7); @override Color get myStackContactIconBG => const Color(0x88747778); + @override + Color get textConfirmTotalAmount => const Color(0xFF003921); } diff --git a/lib/utilities/theme/light_colors.dart b/lib/utilities/theme/light_colors.dart index 994a876d8..4c7ac7ab4 100644 --- a/lib/utilities/theme/light_colors.dart +++ b/lib/utilities/theme/light_colors.dart @@ -70,7 +70,7 @@ class LightColors extends StackColorTheme { @override Color get numpadBackDefault => const Color(0xFF232323); @override - Color get bottomNavBack => const Color(0xFFA2A2A2); + Color get bottomNavBack => const Color(0xFFFFFFFF); // button text/element @override @@ -299,4 +299,6 @@ class LightColors extends StackColorTheme { Color get loadingOverlayTextColor => const Color(0xFFF7F7F7); @override Color get myStackContactIconBG => textFieldDefaultBG; + @override + Color get textConfirmTotalAmount => const Color(0xFF232323); } diff --git a/lib/utilities/theme/stack_colors.dart b/lib/utilities/theme/stack_colors.dart index b14f710c8..16cc70c93 100644 --- a/lib/utilities/theme/stack_colors.dart +++ b/lib/utilities/theme/stack_colors.dart @@ -168,6 +168,7 @@ class StackColors extends ThemeExtension { final Color warningBackground; final Color loadingOverlayTextColor; final Color myStackContactIconBG; + final Color textConfirmTotalAmount; StackColors({ required this.themeType, @@ -298,6 +299,7 @@ class StackColors extends ThemeExtension { required this.warningBackground, required this.loadingOverlayTextColor, required this.myStackContactIconBG, + required this.textConfirmTotalAmount, }); factory StackColors.fromStackColorTheme(StackColorTheme colorTheme) { @@ -432,6 +434,7 @@ class StackColors extends ThemeExtension { warningBackground: colorTheme.warningBackground, loadingOverlayTextColor: colorTheme.loadingOverlayTextColor, myStackContactIconBG: colorTheme.myStackContactIconBG, + textConfirmTotalAmount: colorTheme.textConfirmTotalAmount, ); } @@ -565,6 +568,7 @@ class StackColors extends ThemeExtension { Color? warningBackground, Color? loadingOverlayTextColor, Color? myStackContactIconBG, + Color? textConfirmTotalAmount, }) { return StackColors( themeType: themeType ?? this.themeType, @@ -730,6 +734,8 @@ class StackColors extends ThemeExtension { loadingOverlayTextColor: loadingOverlayTextColor ?? this.loadingOverlayTextColor, myStackContactIconBG: myStackContactIconBG ?? this.myStackContactIconBG, + textConfirmTotalAmount: + textConfirmTotalAmount ?? this.textConfirmTotalAmount, ); } @@ -1377,6 +1383,11 @@ class StackColors extends ThemeExtension { other.myStackContactIconBG, t, )!, + textConfirmTotalAmount: Color.lerp( + textConfirmTotalAmount, + other.textConfirmTotalAmount, + t, + )!, ); } diff --git a/lib/widgets/transaction_card.dart b/lib/widgets/transaction_card.dart index 35331d398..4a8da2357 100644 --- a/lib/widgets/transaction_card.dart +++ b/lib/widgets/transaction_card.dart @@ -175,10 +175,8 @@ class _TransactionCardState extends ConsumerState { : _transaction.amount; return Text( "${Format.satoshiAmountToPrettyString(amount, locale)} ${coin.ticker}", - style: STextStyles.itemSubtitle12(context) - .copyWith( - fontWeight: FontWeight.w600, - ), + style: + STextStyles.itemSubtitle12_600(context), ); }, ), diff --git a/pubspec.yaml b/pubspec.yaml index e7d138729..26adc1a73 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -11,7 +11,7 @@ description: Stack Wallet # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 1.4.48+63 +version: 1.4.49+64 environment: sdk: ">=2.17.0 <3.0.0" @@ -185,7 +185,6 @@ flutter: - assets/images/splash.png - assets/icon/icon.png - google_fonts/ - - google_fonts/static/ - assets/svg/circle-check.svg - assets/svg/clipboard.svg - assets/images/stack.png