Cw 1247 improve tabs navigation (#2634)
What changed, and why it matters
This commit is a routine user-interface redesign for the Cake Wallet app's dashboard. It replaces the old dot-style page indicator with a new labeled pill-style indicator, adds new icons, shortens the bottom navigation dock, and updates translations for labels like 'Apps', 'History', and 'Home'. There is no security-relevant change visible in the code.
No security action required. Treat as a normal UI/UX feature commit.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The patch refactors dashboard navigation: introduces PageIndicatorActions and a custom animated PageIndicator widget, swaps SmoothPageIndicator for the new widget, reduces NavigationDock height from 150 to 84, adjusts ActionButton layout/padding, renames UI labels (features→apps, settings_transactions→history, transactions→history), adds SVG assets under assets/images/main_actions/, registers the new asset directory, and updates ARB translations across all supported locales. No cryptographic, networking, permission, storage, or authentication logic is modified.
Changed components
lib/src/screens/dashboard/dashboard_page.dartlib/src/screens/dashboard/widgets/page_indicator.dartlib/src/screens/dashboard/pages/navigation_dock.dartlib/src/screens/dashboard/widgets/action_button.dartlib/entities/page_indicator_actions.dartlib/src/screens/dashboard/pages/cake_features_page.dartlib/src/screens/dashboard/widgets/header_row.dartlib/src/screens/settings/display_settings_page.dartpubspec_base.yamlres/values/strings_*.arbInspect captured patch +621 / −85
diff --git a/assets/images/main_actions/apps.svg b/assets/images/main_actions/apps.svg
new file mode 100644
index 00000000..320acc57
--- /dev/null
+++ b/assets/images/main_actions/apps.svg
@@ -0,0 +1,21 @@
+<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M10.5479 15.0262C11.1418 15.0263 11.7109 15.2625 12.1309 15.6825C12.5508 16.1024 12.787 16.6716 12.7871 17.2655V21.7459C12.787 22.3398 12.5508 22.909 12.1309 23.3289C11.7109 23.7489 11.1417 23.9851 10.5479 23.9852H6.06836C5.47433 23.9852 4.90442 23.749 4.48438 23.3289C4.06446 22.909 3.82825 22.3398 3.82812 21.7459V17.2655C3.82823 16.6716 4.06447 16.1024 4.48438 15.6825C4.90442 15.2624 5.47433 15.0262 6.06836 15.0262H10.5479ZM21.749 15.0262C22.3431 15.0262 22.913 15.2624 23.333 15.6825C23.7529 16.1024 23.9892 16.6716 23.9893 17.2655V21.7459C23.9891 22.3398 23.7529 22.909 23.333 23.3289C22.913 23.749 22.3431 23.9852 21.749 23.9852H17.2695C16.6756 23.9851 16.1055 23.7489 15.6855 23.3289C15.2658 22.909 15.0304 22.3396 15.0303 21.7459V17.2655C15.0304 16.6718 15.2658 16.1024 15.6855 15.6825C16.1055 15.2625 16.6756 15.0263 17.2695 15.0262H21.749ZM10.5479 3.827C11.1417 3.82709 11.7109 4.06334 12.1309 4.48325C12.5509 4.90329 12.7871 5.4732 12.7871 6.06723V10.5467C12.787 11.1406 12.5508 11.7098 12.1309 12.1297C11.7109 12.5497 11.1418 12.7859 10.5479 12.786H6.06836C5.47433 12.786 4.90442 12.5498 4.48438 12.1297C4.06447 11.7098 3.82821 11.1406 3.82812 10.5467V6.06723C3.82813 5.4732 4.06433 4.90329 4.48438 4.48325C4.90442 4.06321 5.47433 3.827 6.06836 3.827H10.5479ZM19.5088 3.827C19.7828 3.82715 20.0471 3.92812 20.252 4.1102C20.4569 4.29247 20.588 4.54384 20.6201 4.81625L20.6279 4.94711V7.18637H22.8682C23.1535 7.18672 23.4282 7.29616 23.6357 7.49203C23.8433 7.68798 23.9676 7.95612 23.9844 8.24106C24.0011 8.52595 23.9087 8.80637 23.7256 9.02524C23.5424 9.24413 23.2825 9.38508 22.999 9.41879L22.8682 9.42661H20.6279V11.6668C20.6275 11.9521 20.5181 12.227 20.3223 12.4344C20.1264 12.6416 19.8589 12.7663 19.5742 12.7831C19.2893 12.7998 19.008 12.7075 18.7891 12.5243C18.5703 12.3411 18.4303 12.081 18.3965 11.7977L18.3887 11.6668V9.42661H16.1484C15.8631 9.42624 15.5884 9.31685 15.3809 9.12094C15.1734 8.92501 15.049 8.6568 15.0322 8.37192C15.0156 8.0871 15.1079 7.80653 15.291 7.58774C15.4742 7.36889 15.7342 7.22789 16.0176 7.19418L16.1484 7.18637H18.3887V4.94711C18.3887 4.6501 18.5068 4.36514 18.7168 4.15512C18.9268 3.9452 19.2119 3.827 19.5088 3.827Z" fill="#8C9FBB"/>
+<path d="M10.5479 15.0262C11.1418 15.0263 11.7109 15.2625 12.1309 15.6825C12.5508 16.1024 12.787 16.6716 12.7871 17.2655V21.7459C12.787 22.3398 12.5508 22.909 12.1309 23.3289C11.7109 23.7489 11.1417 23.9851 10.5479 23.9852H6.06836C5.47433 23.9852 4.90442 23.749 4.48438 23.3289C4.06446 22.909 3.82825 22.3398 3.82812 21.7459V17.2655C3.82823 16.6716 4.06447 16.1024 4.48438 15.6825C4.90442 15.2624 5.47433 15.0262 6.06836 15.0262H10.5479ZM21.749 15.0262C22.3431 15.0262 22.913 15.2624 23.333 15.6825C23.7529 16.1024 23.9892 16.6716 23.9893 17.2655V21.7459C23.9891 22.3398 23.7529 22.909 23.333 23.3289C22.913 23.749 22.3431 23.9852 21.749 23.9852H17.2695C16.6756 23.9851 16.1055 23.7489 15.6855 23.3289C15.2658 22.909 15.0304 22.3396 15.0303 21.7459V17.2655C15.0304 16.6718 15.2658 16.1024 15.6855 15.6825C16.1055 15.2625 16.6756 15.0263 17.2695 15.0262H21.749ZM10.5479 3.827C11.1417 3.82709 11.7109 4.06334 12.1309 4.48325C12.5509 4.90329 12.7871 5.4732 12.7871 6.06723V10.5467C12.787 11.1406 12.5508 11.7098 12.1309 12.1297C11.7109 12.5497 11.1418 12.7859 10.5479 12.786H6.06836C5.47433 12.786 4.90442 12.5498 4.48438 12.1297C4.06447 11.7098 3.82821 11.1406 3.82812 10.5467V6.06723C3.82813 5.4732 4.06433 4.90329 4.48438 4.48325C4.90442 4.06321 5.47433 3.827 6.06836 3.827H10.5479ZM19.5088 3.827C19.7828 3.82715 20.0471 3.92812 20.252 4.1102C20.4569 4.29247 20.588 4.54384 20.6201 4.81625L20.6279 4.94711V7.18637H22.8682C23.1535 7.18672 23.4282 7.29616 23.6357 7.49203C23.8433 7.68798 23.9676 7.95612 23.9844 8.24106C24.0011 8.52595 23.9087 8.80637 23.7256 9.02524C23.5424 9.24413 23.2825 9.38508 22.999 9.41879L22.8682 9.42661H20.6279V11.6668C20.6275 11.9521 20.5181 12.227 20.3223 12.4344C20.1264 12.6416 19.8589 12.7663 19.5742 12.7831C19.2893 12.7998 19.008 12.7075 18.7891 12.5243C18.5703 12.3411 18.4303 12.081 18.3965 11.7977L18.3887 11.6668V9.42661H16.1484C15.8631 9.42624 15.5884 9.31685 15.3809 9.12094C15.1734 8.92501 15.049 8.6568 15.0322 8.37192C15.0156 8.0871 15.1079 7.80653 15.291 7.58774C15.4742 7.36889 15.7342 7.22789 16.0176 7.19418L16.1484 7.18637H18.3887V4.94711C18.3887 4.6501 18.5068 4.36514 18.7168 4.15512C18.9268 3.9452 19.2119 3.827 19.5088 3.827Z" fill="url(#paint0_linear_10793_51293)"/>
+<path d="M10.5479 15.0262C11.1418 15.0263 11.7109 15.2625 12.1309 15.6825C12.5508 16.1024 12.787 16.6716 12.7871 17.2655V21.7459C12.787 22.3398 12.5508 22.909 12.1309 23.3289C11.7109 23.7489 11.1417 23.9851 10.5479 23.9852H6.06836C5.47433 23.9852 4.90442 23.749 4.48438 23.3289C4.06446 22.909 3.82825 22.3398 3.82812 21.7459V17.2655C3.82823 16.6716 4.06447 16.1024 4.48438 15.6825C4.90442 15.2624 5.47433 15.0262 6.06836 15.0262H10.5479ZM21.749 15.0262C22.3431 15.0262 22.913 15.2624 23.333 15.6825C23.7529 16.1024 23.9892 16.6716 23.9893 17.2655V21.7459C23.9891 22.3398 23.7529 22.909 23.333 23.3289C22.913 23.749 22.3431 23.9852 21.749 23.9852H17.2695C16.6756 23.9851 16.1055 23.7489 15.6855 23.3289C15.2658 22.909 15.0304 22.3396 15.0303 21.7459V17.2655C15.0304 16.6718 15.2658 16.1024 15.6855 15.6825C16.1055 15.2625 16.6756 15.0263 17.2695 15.0262H21.749ZM10.5479 3.827C11.1417 3.82709 11.7109 4.06334 12.1309 4.48325C12.5509 4.90329 12.7871 5.4732 12.7871 6.06723V10.5467C12.787 11.1406 12.5508 11.7098 12.1309 12.1297C11.7109 12.5497 11.1418 12.7859 10.5479 12.786H6.06836C5.47433 12.786 4.90442 12.5498 4.48438 12.1297C4.06447 11.7098 3.82821 11.1406 3.82812 10.5467V6.06723C3.82813 5.4732 4.06433 4.90329 4.48438 4.48325C4.90442 4.06321 5.47433 3.827 6.06836 3.827H10.5479ZM19.5088 3.827C19.7828 3.82715 20.0471 3.92812 20.252 4.1102C20.4569 4.29247 20.588 4.54384 20.6201 4.81625L20.6279 4.94711V7.18637H22.8682C23.1535 7.18672 23.4282 7.29616 23.6357 7.49203C23.8433 7.68798 23.9676 7.95612 23.9844 8.24106C24.0011 8.52595 23.9087 8.80637 23.7256 9.02524C23.5424 9.24413 23.2825 9.38508 22.999 9.41879L22.8682 9.42661H20.6279V11.6668C20.6275 11.9521 20.5181 12.227 20.3223 12.4344C20.1264 12.6416 19.8589 12.7663 19.5742 12.7831C19.2893 12.7998 19.008 12.7075 18.7891 12.5243C18.5703 12.3411 18.4303 12.081 18.3965 11.7977L18.3887 11.6668V9.42661H16.1484C15.8631 9.42624 15.5884 9.31685 15.3809 9.12094C15.1734 8.92501 15.049 8.6568 15.0322 8.37192C15.0156 8.0871 15.1079 7.80653 15.291 7.58774C15.4742 7.36889 15.7342 7.22789 16.0176 7.19418L16.1484 7.18637H18.3887V4.94711C18.3887 4.6501 18.5068 4.36514 18.7168 4.15512C18.9268 3.9452 19.2119 3.827 19.5088 3.827Z" fill="url(#paint1_linear_10793_51293)"/>
+<path d="M10.5479 15.0262C11.1418 15.0263 11.7109 15.2625 12.1309 15.6825C12.5508 16.1024 12.787 16.6716 12.7871 17.2655V21.7459C12.787 22.3398 12.5508 22.909 12.1309 23.3289C11.7109 23.7489 11.1417 23.9851 10.5479 23.9852H6.06836C5.47433 23.9852 4.90442 23.749 4.48438 23.3289C4.06446 22.909 3.82825 22.3398 3.82812 21.7459V17.2655C3.82823 16.6716 4.06447 16.1024 4.48438 15.6825C4.90442 15.2624 5.47433 15.0262 6.06836 15.0262H10.5479ZM21.749 15.0262C22.3431 15.0262 22.913 15.2624 23.333 15.6825C23.7529 16.1024 23.9892 16.6716 23.9893 17.2655V21.7459C23.9891 22.3398 23.7529 22.909 23.333 23.3289C22.913 23.749 22.3431 23.9852 21.749 23.9852H17.2695C16.6756 23.9851 16.1055 23.7489 15.6855 23.3289C15.2658 22.909 15.0304 22.3396 15.0303 21.7459V17.2655C15.0304 16.6718 15.2658 16.1024 15.6855 15.6825C16.1055 15.2625 16.6756 15.0263 17.2695 15.0262H21.749ZM10.5479 3.827C11.1417 3.82709 11.7109 4.06334 12.1309 4.48325C12.5509 4.90329 12.7871 5.4732 12.7871 6.06723V10.5467C12.787 11.1406 12.5508 11.7098 12.1309 12.1297C11.7109 12.5497 11.1418 12.7859 10.5479 12.786H6.06836C5.47433 12.786 4.90442 12.5498 4.48438 12.1297C4.06447 11.7098 3.82821 11.1406 3.82812 10.5467V6.06723C3.82813 5.4732 4.06433 4.90329 4.48438 4.48325C4.90442 4.06321 5.47433 3.827 6.06836 3.827H10.5479ZM19.5088 3.827C19.7828 3.82715 20.0471 3.92812 20.252 4.1102C20.4569 4.29247 20.588 4.54384 20.6201 4.81625L20.6279 4.94711V7.18637H22.8682C23.1535 7.18672 23.4282 7.29616 23.6357 7.49203C23.8433 7.68798 23.9676 7.95612 23.9844 8.24106C24.0011 8.52595 23.9087 8.80637 23.7256 9.02524C23.5424 9.24413 23.2825 9.38508 22.999 9.41879L22.8682 9.42661H20.6279V11.6668C20.6275 11.9521 20.5181 12.227 20.3223 12.4344C20.1264 12.6416 19.8589 12.7663 19.5742 12.7831C19.2893 12.7998 19.008 12.7075 18.7891 12.5243C18.5703 12.3411 18.4303 12.081 18.3965 11.7977L18.3887 11.6668V9.42661H16.1484C15.8631 9.42624 15.5884 9.31685 15.3809 9.12094C15.1734 8.92501 15.049 8.6568 15.0322 8.37192C15.0156 8.0871 15.1079 7.80653 15.291 7.58774C15.4742 7.36889 15.7342 7.22789 16.0176 7.19418L16.1484 7.18637H18.3887V4.94711C18.3887 4.6501 18.5068 4.36514 18.7168 4.15512C18.9268 3.9452 19.2119 3.827 19.5088 3.827Z" fill="url(#paint2_linear_10793_51293)"/>
+<path d="M10.5479 15.0262C11.1418 15.0263 11.7109 15.2625 12.1309 15.6825C12.5508 16.1024 12.787 16.6716 12.7871 17.2655V21.7459C12.787 22.3398 12.5508 22.909 12.1309 23.3289C11.7109 23.7489 11.1417 23.9851 10.5479 23.9852H6.06836C5.47433 23.9852 4.90442 23.749 4.48438 23.3289C4.06446 22.909 3.82825 22.3398 3.82812 21.7459V17.2655C3.82823 16.6716 4.06447 16.1024 4.48438 15.6825C4.90442 15.2624 5.47433 15.0262 6.06836 15.0262H10.5479ZM21.749 15.0262C22.3431 15.0262 22.913 15.2624 23.333 15.6825C23.7529 16.1024 23.9892 16.6716 23.9893 17.2655V21.7459C23.9891 22.3398 23.7529 22.909 23.333 23.3289C22.913 23.749 22.3431 23.9852 21.749 23.9852H17.2695C16.6756 23.9851 16.1055 23.7489 15.6855 23.3289C15.2658 22.909 15.0304 22.3396 15.0303 21.7459V17.2655C15.0304 16.6718 15.2658 16.1024 15.6855 15.6825C16.1055 15.2625 16.6756 15.0263 17.2695 15.0262H21.749ZM10.5479 3.827C11.1417 3.82709 11.7109 4.06334 12.1309 4.48325C12.5509 4.90329 12.7871 5.4732 12.7871 6.06723V10.5467C12.787 11.1406 12.5508 11.7098 12.1309 12.1297C11.7109 12.5497 11.1418 12.7859 10.5479 12.786H6.06836C5.47433 12.786 4.90442 12.5498 4.48438 12.1297C4.06447 11.7098 3.82821 11.1406 3.82812 10.5467V6.06723C3.82813 5.4732 4.06433 4.90329 4.48438 4.48325C4.90442 4.06321 5.47433 3.827 6.06836 3.827H10.5479ZM19.5088 3.827C19.7828 3.82715 20.0471 3.92812 20.252 4.1102C20.4569 4.29247 20.588 4.54384 20.6201 4.81625L20.6279 4.94711V7.18637H22.8682C23.1535 7.18672 23.4282 7.29616 23.6357 7.49203C23.8433 7.68798 23.9676 7.95612 23.9844 8.24106C24.0011 8.52595 23.9087 8.80637 23.7256 9.02524C23.5424 9.24413 23.2825 9.38508 22.999 9.41879L22.8682 9.42661H20.6279V11.6668C20.6275 11.9521 20.5181 12.227 20.3223 12.4344C20.1264 12.6416 19.8589 12.7663 19.5742 12.7831C19.2893 12.7998 19.008 12.7075 18.7891 12.5243C18.5703 12.3411 18.4303 12.081 18.3965 11.7977L18.3887 11.6668V9.42661H16.1484C15.8631 9.42624 15.5884 9.31685 15.3809 9.12094C15.1734 8.92501 15.049 8.6568 15.0322 8.37192C15.0156 8.0871 15.1079 7.80653 15.291 7.58774C15.4742 7.36889 15.7342 7.22789 16.0176 7.19418L16.1484 7.18637H18.3887V4.94711C18.3887 4.6501 18.5068 4.36514 18.7168 4.15512C18.9268 3.9452 19.2119 3.827 19.5088 3.827Z" fill="#91B0FF"/>
+<defs>
+<linearGradient id="paint0_linear_10793_51293" x1="13.9087" y1="3.827" x2="13.9087" y2="23.9852" gradientUnits="userSpaceOnUse">
+<stop stop-color="#D7E2F7"/>
+<stop offset="1" stop-color="#8C9FBB"/>
+</linearGradient>
+<linearGradient id="paint1_linear_10793_51293" x1="13.9087" y1="3.827" x2="13.9087" y2="23.9852" gradientUnits="userSpaceOnUse">
+<stop stop-color="#D7E2F7"/>
+<stop offset="1" stop-color="#8C9FBB"/>
+</linearGradient>
+<linearGradient id="paint2_linear_10793_51293" x1="13.9087" y1="3.827" x2="13.9087" y2="23.9852" gradientUnits="userSpaceOnUse">
+<stop stop-color="#D7E2F7"/>
+<stop offset="1" stop-color="#8C9FBB"/>
+</linearGradient>
+</defs>
+</svg>
diff --git a/assets/images/main_actions/charts.svg b/assets/images/main_actions/charts.svg
new file mode 100644
index 00000000..8bcb206f
--- /dev/null
+++ b/assets/images/main_actions/charts.svg
@@ -0,0 +1,10 @@
+<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M4.00312 2.70719C3.6544 2.71264 3.32209 2.85623 3.07912 3.10643C2.83616 3.35664 2.70238 3.69303 2.70715 4.04176V22.4738C2.70715 23.9129 3.90117 25.1069 5.34023 25.1069H23.7717C23.9462 25.1094 24.1194 25.0771 24.2813 25.0121C24.4432 24.947 24.5905 24.8504 24.7148 24.7279C24.839 24.6054 24.9377 24.4595 25.005 24.2985C25.0724 24.1375 25.107 23.9648 25.107 23.7903C25.107 23.6159 25.0724 23.4431 25.005 23.2822C24.9377 23.1212 24.839 22.9752 24.7148 22.8527C24.5905 22.7302 24.4432 22.6336 24.2813 22.5686C24.1194 22.5035 23.9462 22.4713 23.7717 22.4738H5.34023V4.04176C5.34264 3.86562 5.30968 3.69078 5.24331 3.52761C5.17693 3.36443 5.07849 3.21623 4.95381 3.09179C4.82913 2.96735 4.68075 2.86919 4.51745 2.80312C4.35415 2.73706 4.17925 2.70444 4.00312 2.70719ZM23.746 6.66205C23.404 6.67224 23.0794 6.81519 22.8409 7.06062L18.5056 11.396L15.4868 8.37719C15.2399 8.13038 14.9051 7.99173 14.556 7.99173C14.2069 7.99173 13.8721 8.13038 13.6252 8.37719L7.04247 14.96C6.91612 15.0814 6.81524 15.2267 6.74575 15.3875C6.67625 15.5483 6.63954 15.7213 6.63776 15.8965C6.63598 16.0716 6.66916 16.2454 6.73537 16.4075C6.80158 16.5697 6.89948 16.717 7.02333 16.8409C7.14719 16.9648 7.29452 17.0627 7.45669 17.1289C7.61885 17.1951 7.7926 17.2283 7.96775 17.2265C8.14291 17.2247 8.31595 17.188 8.47673 17.1185C8.63752 17.049 8.78282 16.9481 8.90414 16.8218L14.556 11.1698L17.5748 14.1886C17.8217 14.4354 18.1565 14.5741 18.5056 14.5741C18.8547 14.5741 19.1895 14.4354 19.4364 14.1886L24.7026 8.92233C24.8928 8.7374 25.0228 8.49931 25.0754 8.23927C25.128 7.97922 25.1008 7.70934 24.9974 7.465C24.894 7.22067 24.7192 7.01327 24.4959 6.86999C24.2726 6.72671 24.0112 6.65423 23.746 6.66205Z" fill="url(#paint0_linear_10793_51300)"/>
+<path d="M4.00312 2.70719C3.6544 2.71264 3.32209 2.85623 3.07912 3.10643C2.83616 3.35664 2.70238 3.69303 2.70715 4.04176V22.4738C2.70715 23.9129 3.90117 25.1069 5.34023 25.1069H23.7717C23.9462 25.1094 24.1194 25.0771 24.2813 25.0121C24.4432 24.947 24.5905 24.8504 24.7148 24.7279C24.839 24.6054 24.9377 24.4595 25.005 24.2985C25.0724 24.1375 25.107 23.9648 25.107 23.7903C25.107 23.6159 25.0724 23.4431 25.005 23.2822C24.9377 23.1212 24.839 22.9752 24.7148 22.8527C24.5905 22.7302 24.4432 22.6336 24.2813 22.5686C24.1194 22.5035 23.9462 22.4713 23.7717 22.4738H5.34023V4.04176C5.34264 3.86562 5.30968 3.69078 5.24331 3.52761C5.17693 3.36443 5.07849 3.21623 4.95381 3.09179C4.82913 2.96735 4.68075 2.86919 4.51745 2.80312C4.35415 2.73706 4.17925 2.70444 4.00312 2.70719ZM23.746 6.66205C23.404 6.67224 23.0794 6.81519 22.8409 7.06062L18.5056 11.396L15.4868 8.37719C15.2399 8.13038 14.9051 7.99173 14.556 7.99173C14.2069 7.99173 13.8721 8.13038 13.6252 8.37719L7.04247 14.96C6.91612 15.0814 6.81524 15.2267 6.74575 15.3875C6.67625 15.5483 6.63954 15.7213 6.63776 15.8965C6.63598 16.0716 6.66916 16.2454 6.73537 16.4075C6.80158 16.5697 6.89948 16.717 7.02333 16.8409C7.14719 16.9648 7.29452 17.0627 7.45669 17.1289C7.61885 17.1951 7.7926 17.2283 7.96775 17.2265C8.14291 17.2247 8.31595 17.188 8.47673 17.1185C8.63752 17.049 8.78282 16.9481 8.90414 16.8218L14.556 11.1698L17.5748 14.1886C17.8217 14.4354 18.1565 14.5741 18.5056 14.5741C18.8547 14.5741 19.1895 14.4354 19.4364 14.1886L24.7026 8.92233C24.8928 8.7374 25.0228 8.49931 25.0754 8.23927C25.128 7.97922 25.1008 7.70934 24.9974 7.465C24.894 7.22067 24.7192 7.01327 24.4959 6.86999C24.2726 6.72671 24.0112 6.65423 23.746 6.66205Z" fill="#91B0FF"/>
+<defs>
+<linearGradient id="paint0_linear_10793_51300" x1="13.907" y1="2.70703" x2="13.907" y2="25.107" gradientUnits="userSpaceOnUse">
+<stop stop-color="#D7E2F7"/>
+<stop offset="1" stop-color="#8C9FBB"/>
+</linearGradient>
+</defs>
+</svg>
diff --git a/assets/images/main_actions/contacts.svg b/assets/images/main_actions/contacts.svg
new file mode 100644
index 00000000..0a0a0e65
--- /dev/null
+++ b/assets/images/main_actions/contacts.svg
@@ -0,0 +1,10 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M4.32649 18.1659C5.37035 17.3914 6.50754 16.7797 7.73807 16.3309C8.96839 15.8822 10.2779 15.6579 11.6667 15.6579C13.0554 15.6579 14.3649 15.8822 15.5953 16.3309C16.8258 16.7797 17.963 17.3914 19.0068 18.1659C19.7703 17.3267 20.3752 16.3553 20.8216 15.2517C21.268 14.1481 21.4912 12.9531 21.4912 11.6667C21.4912 8.94444 20.5344 6.62646 18.6206 4.71272C16.7069 2.79898 14.3889 1.84211 11.6667 1.84211C8.94444 1.84211 6.62646 2.79898 4.71272 4.71272C2.79898 6.62646 1.84211 8.94444 1.84211 11.6667C1.84211 12.9531 2.06531 14.1481 2.51171 15.2517C2.95811 16.3553 3.56304 17.3267 4.32649 18.1659ZM11.6667 12.5877C10.5456 12.5877 9.60023 12.2027 8.83044 11.4327C8.06044 10.6629 7.67544 9.71751 7.67544 8.59649C7.67544 7.47547 8.06044 6.53006 8.83044 5.76026C9.60023 4.99026 10.5456 4.60526 11.6667 4.60526C12.7877 4.60526 13.7331 4.99026 14.5029 5.76026C15.2729 6.53006 15.6579 7.47547 15.6579 8.59649C15.6579 9.71751 15.2729 10.6629 14.5029 11.4327C13.7331 12.2027 12.7877 12.5877 11.6667 12.5877ZM11.6667 23.3333C10.0466 23.3333 8.5269 23.0287 7.10746 22.4193C5.68801 21.81 4.45329 20.9802 3.40329 19.93C2.35309 18.88 1.52332 17.6453 0.913991 16.2259C0.304664 14.8064 0 13.2867 0 11.6667C0 10.0466 0.304664 8.5269 0.913991 7.10746C1.52332 5.68801 2.35309 4.45329 3.40329 3.40329C4.45329 2.35308 5.68801 1.52332 7.10746 0.913992C8.5269 0.304664 10.0466 0 11.6667 0C13.2867 0 14.8064 0.304664 16.2259 0.913992C17.6453 1.52332 18.88 2.35308 19.93 3.40329C20.9802 4.45329 21.81 5.68801 22.4193 7.10746C23.0287 8.5269 23.3333 10.0466 23.3333 11.6667C23.3333 13.2867 23.0287 14.8064 22.4193 16.2259C21.81 17.6453 20.9802 18.88 19.93 19.93C18.88 20.9802 17.6453 21.81 16.2259 22.4193C14.8064 23.0287 13.2867 23.3333 11.6667 23.3333Z" fill="url(#paint0_linear_10793_51291)" fill-opacity="0.75"/>
+<path d="M4.32649 18.1659C5.37035 17.3914 6.50754 16.7797 7.73807 16.3309C8.96839 15.8822 10.2779 15.6579 11.6667 15.6579C13.0554 15.6579 14.3649 15.8822 15.5953 16.3309C16.8258 16.7797 17.963 17.3914 19.0068 18.1659C19.7703 17.3267 20.3752 16.3553 20.8216 15.2517C21.268 14.1481 21.4912 12.9531 21.4912 11.6667C21.4912 8.94444 20.5344 6.62646 18.6206 4.71272C16.7069 2.79898 14.3889 1.84211 11.6667 1.84211C8.94444 1.84211 6.62646 2.79898 4.71272 4.71272C2.79898 6.62646 1.84211 8.94444 1.84211 11.6667C1.84211 12.9531 2.06531 14.1481 2.51171 15.2517C2.95811 16.3553 3.56304 17.3267 4.32649 18.1659ZM11.6667 12.5877C10.5456 12.5877 9.60023 12.2027 8.83044 11.4327C8.06044 10.6629 7.67544 9.71751 7.67544 8.59649C7.67544 7.47547 8.06044 6.53006 8.83044 5.76026C9.60023 4.99026 10.5456 4.60526 11.6667 4.60526C12.7877 4.60526 13.7331 4.99026 14.5029 5.76026C15.2729 6.53006 15.6579 7.47547 15.6579 8.59649C15.6579 9.71751 15.2729 10.6629 14.5029 11.4327C13.7331 12.2027 12.7877 12.5877 11.6667 12.5877ZM11.6667 23.3333C10.0466 23.3333 8.5269 23.0287 7.10746 22.4193C5.68801 21.81 4.45329 20.9802 3.40329 19.93C2.35309 18.88 1.52332 17.6453 0.913991 16.2259C0.304664 14.8064 0 13.2867 0 11.6667C0 10.0466 0.304664 8.5269 0.913991 7.10746C1.52332 5.68801 2.35309 4.45329 3.40329 3.40329C4.45329 2.35308 5.68801 1.52332 7.10746 0.913992C8.5269 0.304664 10.0466 0 11.6667 0C13.2867 0 14.8064 0.304664 16.2259 0.913992C17.6453 1.52332 18.88 2.35308 19.93 3.40329C20.9802 4.45329 21.81 5.68801 22.4193 7.10746C23.0287 8.5269 23.3333 10.0466 23.3333 11.6667C23.3333 13.2867 23.0287 14.8064 22.4193 16.2259C21.81 17.6453 20.9802 18.88 19.93 19.93C18.88 20.9802 17.6453 21.81 16.2259 22.4193C14.8064 23.0287 13.2867 23.3333 11.6667 23.3333Z" fill="#91B0FF"/>
+<defs>
+<linearGradient id="paint0_linear_10793_51291" x1="11.6667" y1="0" x2="11.6667" y2="23.3333" gradientUnits="userSpaceOnUse">
+<stop stop-color="#D7E2F7"/>
+<stop offset="1" stop-color="#8C9FBB"/>
+</linearGradient>
+</defs>
+</svg>
diff --git a/assets/images/main_actions/history.svg b/assets/images/main_actions/history.svg
new file mode 100644
index 00000000..7044ec6a
--- /dev/null
+++ b/assets/images/main_actions/history.svg
@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M7.91076 14.96C6.12754 14.96 4.5734 14.373 3.24834 13.1989C1.92328 12.0248 1.16049 10.553 0.959961 8.78354H2.22058C2.42852 10.2058 3.06861 11.3849 4.14084 12.3208C5.21294 13.2567 6.46958 13.7247 7.91076 13.7247C9.51664 13.7247 10.8789 13.1654 11.9975 12.0468C13.1161 10.9281 13.6755 9.56589 13.6755 7.96001C13.6755 6.35412 13.1161 4.99187 11.9975 3.87324C10.8789 2.75461 9.51664 2.1953 7.91076 2.1953C7.01119 2.1953 6.16817 2.39514 5.3817 2.79483C4.59509 3.19438 3.91774 3.74415 3.34964 4.44415H5.50358V5.67945H1.32252V1.49839H2.55781V3.44954C3.22611 2.66087 4.02644 2.04878 4.95881 1.61327C5.89105 1.17776 6.87503 0.960007 7.91076 0.960007C8.88211 0.960007 9.79224 1.14372 10.6412 1.51115C11.49 1.87859 12.23 2.37799 12.8614 3.00936C13.4928 3.64073 13.9922 4.38088 14.3596 5.2298C14.727 6.07859 14.9108 6.98865 14.9108 7.96001C14.9108 8.93136 14.727 9.84143 14.3596 10.6902C13.9922 11.5391 13.4928 12.2793 12.8614 12.9107C12.23 13.542 11.49 14.0414 10.6412 14.4089C9.79224 14.7763 8.88211 14.96 7.91076 14.96ZM10.383 11.2764L7.31699 8.21015V3.84236H8.55208V7.70986L11.2508 10.4084L10.383 11.2764Z" fill="#91B0FF"/>
+</svg>
diff --git a/assets/images/main_actions/home.svg b/assets/images/main_actions/home.svg
new file mode 100644
index 00000000..ac1b1d4a
--- /dev/null
+++ b/assets/images/main_actions/home.svg
@@ -0,0 +1,16 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M12.9909 0.355182L23.9088 11.2732C24.6731 12.0374 24.1321 13.3439 23.0512 13.3439H21.8381V20.6226C21.8381 21.5878 21.4546 22.5135 20.7721 23.196C20.0896 23.8785 19.164 24.2619 18.1987 24.2619H16.9856V15.7701C16.9857 14.8419 16.631 13.9486 15.9942 13.2733C15.3574 12.5979 14.4865 12.1913 13.5598 12.1369L13.3463 12.1308H10.9201C9.95489 12.1308 9.02921 12.5143 8.34671 13.1968C7.6642 13.8793 7.28077 14.8049 7.28077 15.7701V24.2619H6.06766C5.10245 24.2619 4.17678 23.8785 3.49427 23.196C2.81177 22.5135 2.42834 21.5878 2.42834 20.6226V13.3439H1.21523C0.135562 13.3439 -0.406697 12.0374 0.357561 11.2732L11.2755 0.355182C11.503 0.127759 11.8115 0 12.1332 0C12.4549 0 12.7634 0.127759 12.9909 0.355182ZM13.3463 14.557C13.6681 14.557 13.9766 14.6848 14.2041 14.9124C14.4316 15.1399 14.5594 15.4484 14.5594 15.7701V24.2619H9.70699V15.7701C9.70703 15.473 9.81612 15.1862 10.0136 14.9642C10.211 14.7422 10.4831 14.6003 10.7782 14.5655L10.9201 14.557H13.3463Z" fill="#D7E2F7"/>
+<path d="M12.9909 0.355182L23.9088 11.2732C24.6731 12.0374 24.1321 13.3439 23.0512 13.3439H21.8381V20.6226C21.8381 21.5878 21.4546 22.5135 20.7721 23.196C20.0896 23.8785 19.164 24.2619 18.1987 24.2619H16.9856V15.7701C16.9857 14.8419 16.631 13.9486 15.9942 13.2733C15.3574 12.5979 14.4865 12.1913 13.5598 12.1369L13.3463 12.1308H10.9201C9.95489 12.1308 9.02921 12.5143 8.34671 13.1968C7.6642 13.8793 7.28077 14.8049 7.28077 15.7701V24.2619H6.06766C5.10245 24.2619 4.17678 23.8785 3.49427 23.196C2.81177 22.5135 2.42834 21.5878 2.42834 20.6226V13.3439H1.21523C0.135562 13.3439 -0.406697 12.0374 0.357561 11.2732L11.2755 0.355182C11.503 0.127759 11.8115 0 12.1332 0C12.4549 0 12.7634 0.127759 12.9909 0.355182ZM13.3463 14.557C13.6681 14.557 13.9766 14.6848 14.2041 14.9124C14.4316 15.1399 14.5594 15.4484 14.5594 15.7701V24.2619H9.70699V15.7701C9.70703 15.473 9.81612 15.1862 10.0136 14.9642C10.211 14.7422 10.4831 14.6003 10.7782 14.5655L10.9201 14.557H13.3463Z" fill="url(#paint0_linear_10793_51310)" fill-opacity="0.75"/>
+<path d="M12.9909 0.355182L23.9088 11.2732C24.6731 12.0374 24.1321 13.3439 23.0512 13.3439H21.8381V20.6226C21.8381 21.5878 21.4546 22.5135 20.7721 23.196C20.0896 23.8785 19.164 24.2619 18.1987 24.2619H16.9856V15.7701C16.9857 14.8419 16.631 13.9486 15.9942 13.2733C15.3574 12.5979 14.4865 12.1913 13.5598 12.1369L13.3463 12.1308H10.9201C9.95489 12.1308 9.02921 12.5143 8.34671 13.1968C7.6642 13.8793 7.28077 14.8049 7.28077 15.7701V24.2619H6.06766C5.10245 24.2619 4.17678 23.8785 3.49427 23.196C2.81177 22.5135 2.42834 21.5878 2.42834 20.6226V13.3439H1.21523C0.135562 13.3439 -0.406697 12.0374 0.357561 11.2732L11.2755 0.355182C11.503 0.127759 11.8115 0 12.1332 0C12.4549 0 12.7634 0.127759 12.9909 0.355182ZM13.3463 14.557C13.6681 14.557 13.9766 14.6848 14.2041 14.9124C14.4316 15.1399 14.5594 15.4484 14.5594 15.7701V24.2619H9.70699V15.7701C9.70703 15.473 9.81612 15.1862 10.0136 14.9642C10.211 14.7422 10.4831 14.6003 10.7782 14.5655L10.9201 14.557H13.3463Z" fill="url(#paint1_linear_10793_51310)"/>
+<path d="M12.9909 0.355182L23.9088 11.2732C24.6731 12.0374 24.1321 13.3439 23.0512 13.3439H21.8381V20.6226C21.8381 21.5878 21.4546 22.5135 20.7721 23.196C20.0896 23.8785 19.164 24.2619 18.1987 24.2619H16.9856V15.7701C16.9857 14.8419 16.631 13.9486 15.9942 13.2733C15.3574 12.5979 14.4865 12.1913 13.5598 12.1369L13.3463 12.1308H10.9201C9.95489 12.1308 9.02921 12.5143 8.34671 13.1968C7.6642 13.8793 7.28077 14.8049 7.28077 15.7701V24.2619H6.06766C5.10245 24.2619 4.17678 23.8785 3.49427 23.196C2.81177 22.5135 2.42834 21.5878 2.42834 20.6226V13.3439H1.21523C0.135562 13.3439 -0.406697 12.0374 0.357561 11.2732L11.2755 0.355182C11.503 0.127759 11.8115 0 12.1332 0C12.4549 0 12.7634 0.127759 12.9909 0.355182ZM13.3463 14.557C13.6681 14.557 13.9766 14.6848 14.2041 14.9124C14.4316 15.1399 14.5594 15.4484 14.5594 15.7701V24.2619H9.70699V15.7701C9.70703 15.473 9.81612 15.1862 10.0136 14.9642C10.211 14.7422 10.4831 14.6003 10.7782 14.5655L10.9201 14.557H13.3463Z" fill="#91B0FF"/>
+<defs>
+<linearGradient id="paint0_linear_10793_51310" x1="12.1333" y1="0" x2="12.1333" y2="24.2619" gradientUnits="userSpaceOnUse">
+<stop stop-color="#D7E2F7"/>
+<stop offset="1" stop-color="#8C9FBB"/>
+</linearGradient>
+<linearGradient id="paint1_linear_10793_51310" x1="12.1333" y1="0" x2="12.1333" y2="24.2619" gradientUnits="userSpaceOnUse">
+<stop stop-color="#D7E2F7"/>
+<stop offset="1" stop-color="#8C9FBB"/>
+</linearGradient>
+</defs>
+</svg>
diff --git a/assets/images/main_actions/wallets.svg b/assets/images/main_actions/wallets.svg
new file mode 100644
index 00000000..8ed9319c
--- /dev/null
+++ b/assets/images/main_actions/wallets.svg
@@ -0,0 +1,11 @@
+<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M23.3842 4.095C25.0941 4.095 26.5345 5.53541 26.5345 7.24539V9.31473H26.5355V19.0345H26.5345V21.1048L26.5306 21.2649C26.4443 22.9038 25.0406 24.2552 23.3842 24.2552H4.48474L4.32458 24.2513C2.68574 24.1649 1.33435 22.7611 1.33435 21.1048V7.24539C1.33437 5.58904 2.68575 4.18529 4.32458 4.09891L4.48474 4.095H23.3842ZM4.48474 6.11063C3.88829 6.11082 3.35 6.64892 3.34998 7.24539V21.1048C3.34998 21.7013 3.88828 22.2384 4.48474 22.2386H23.3842C23.9807 22.2386 24.5179 21.7014 24.5179 21.1048V19.0345H18.7963L18.5443 19.0286C16.0462 18.9035 14.0668 16.9242 13.9418 14.4261L13.9359 14.1751C13.9359 11.5595 15.963 9.44988 18.5443 9.32059L18.7963 9.31473H24.5179V7.24539C24.5179 6.64881 23.9807 6.11063 23.3842 6.11063H4.48474ZM18.7963 11.3304C17.2097 11.3304 15.9515 12.5885 15.9515 14.1751C15.9518 15.7614 17.2098 17.0188 18.7963 17.0188H24.5179V11.3304H18.7963ZM18.7963 12.553C19.6907 12.5532 20.4153 13.2787 20.4154 14.1731C20.4154 15.0677 19.6908 15.793 18.7963 15.7932C17.9016 15.7932 17.1761 15.0678 17.1761 14.1731C17.1763 13.2785 17.9016 12.553 18.7963 12.553Z" fill="#91B0FF"/>
+<path d="M23.3842 4.095C25.0941 4.095 26.5345 5.53541 26.5345 7.24539V9.31473H26.5355V19.0345H26.5345V21.1048L26.5306 21.2649C26.4443 22.9038 25.0406 24.2552 23.3842 24.2552H4.48474L4.32458 24.2513C2.68574 24.1649 1.33435 22.7611 1.33435 21.1048V7.24539C1.33437 5.58904 2.68575 4.18529 4.32458 4.09891L4.48474 4.095H23.3842ZM4.48474 6.11063C3.88829 6.11082 3.35 6.64892 3.34998 7.24539V21.1048C3.34998 21.7013 3.88828 22.2384 4.48474 22.2386H23.3842C23.9807 22.2386 24.5179 21.7014 24.5179 21.1048V19.0345H18.7963L18.5443 19.0286C16.0462 18.9035 14.0668 16.9242 13.9418 14.4261L13.9359 14.1751C13.9359 11.5595 15.963 9.44988 18.5443 9.32059L18.7963 9.31473H24.5179V7.24539C24.5179 6.64881 23.9807 6.11063 23.3842 6.11063H4.48474ZM18.7963 11.3304C17.2097 11.3304 15.9515 12.5885 15.9515 14.1751C15.9518 15.7614 17.2098 17.0188 18.7963 17.0188H24.5179V11.3304H18.7963ZM18.7963 12.553C19.6907 12.5532 20.4153 13.2787 20.4154 14.1731C20.4154 15.0677 19.6908 15.793 18.7963 15.7932C17.9016 15.7932 17.1761 15.0678 17.1761 14.1731C17.1763 13.2785 17.9016 12.553 18.7963 12.553Z" fill="url(#paint0_linear_10793_51278)"/>
+<path d="M23.3842 4.095C25.0941 4.095 26.5345 5.53541 26.5345 7.24539V9.31473H26.5355V19.0345H26.5345V21.1048L26.5306 21.2649C26.4443 22.9038 25.0406 24.2552 23.3842 24.2552H4.48474L4.32458 24.2513C2.68574 24.1649 1.33435 22.7611 1.33435 21.1048V7.24539C1.33437 5.58904 2.68575 4.18529 4.32458 4.09891L4.48474 4.095H23.3842ZM4.48474 6.11063C3.88829 6.11082 3.35 6.64892 3.34998 7.24539V21.1048C3.34998 21.7013 3.88828 22.2384 4.48474 22.2386H23.3842C23.9807 22.2386 24.5179 21.7014 24.5179 21.1048V19.0345H18.7963L18.5443 19.0286C16.0462 18.9035 14.0668 16.9242 13.9418 14.4261L13.9359 14.1751C13.9359 11.5595 15.963 9.44988 18.5443 9.32059L18.7963 9.31473H24.5179V7.24539C24.5179 6.64881 23.9807 6.11063 23.3842 6.11063H4.48474ZM18.7963 11.3304C17.2097 11.3304 15.9515 12.5885 15.9515 14.1751C15.9518 15.7614 17.2098 17.0188 18.7963 17.0188H24.5179V11.3304H18.7963ZM18.7963 12.553C19.6907 12.5532 20.4153 13.2787 20.4154 14.1731C20.4154 15.0677 19.6908 15.793 18.7963 15.7932C17.9016 15.7932 17.1761 15.0678 17.1761 14.1731C17.1763 13.2785 17.9016 12.553 18.7963 12.553Z" fill="#91B0FF"/>
+<defs>
+<linearGradient id="paint0_linear_10793_51278" x1="13.9349" y1="4.095" x2="13.9349" y2="24.2552" gradientUnits="userSpaceOnUse">
+<stop stop-color="#D7E2F7"/>
+<stop offset="1" stop-color="#8C9FBB"/>
+</linearGradient>
+</defs>
+</svg>
diff --git a/lib/entities/page_indicator_actions.dart b/lib/entities/page_indicator_actions.dart
new file mode 100644
index 00000000..476264a0
--- /dev/null
+++ b/lib/entities/page_indicator_actions.dart
@@ -0,0 +1,43 @@
+import 'package:cake_wallet/generated/i18n.dart';
+import 'package:cake_wallet/routes.dart';
+import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
+import 'package:flutter/material.dart';
+
+class PageIndicatorActions {
+ final String Function(BuildContext context) name;
+ final String image;
+ final Key key;
+ final bool Function(DashboardViewModel viewModel)? isEnabled;
+
+ PageIndicatorActions._({
+ required this.name,
+ required this.image,
+ required this.key,
+ this.isEnabled,
+ });
+
+ static List<PageIndicatorActions> all = [
+ appsAction,
+ homeAction,
+ historyAction,
+ ];
+
+ static PageIndicatorActions appsAction = PageIndicatorActions._(
+ name: (context) => S.of(context).apps,
+ image: 'assets/images/main_actions/apps.svg',
+ key: ValueKey('dashboard_page_indicator_apps_action_button_key'),
+ isEnabled: (viewModel) => viewModel.shouldShowMarketPlaceInDashboard,
+ );
+
+ static PageIndicatorActions homeAction = PageIndicatorActions._(
+ name: (context) => S.of(context).home,
+ image: 'assets/images/main_actions/home.svg',
+ key: ValueKey('dashboard_page_indicator_home_action_button_key'),
+ );
+
+ static PageIndicatorActions historyAction = PageIndicatorActions._(
+ name: (context) => S.of(context).history,
+ image: 'assets/images/main_actions/history.svg',
+ key: ValueKey('dashboard_page_indicator_history_action_button_key'),
+ );
+}
diff --git a/lib/src/screens/dashboard/dashboard_page.dart b/lib/src/screens/dashboard/dashboard_page.dart
index 107024a7..15e0697b 100644
--- a/lib/src/screens/dashboard/dashboard_page.dart
+++ b/lib/src/screens/dashboard/dashboard_page.dart
@@ -3,6 +3,7 @@ import 'package:cake_wallet/entities/preferences_key.dart';
import 'package:cake_wallet/di.dart';
import 'package:cake_wallet/src/screens/dashboard/desktop_widgets/desktop_sidebar_wrapper.dart';
import 'package:cake_wallet/src/screens/dashboard/pages/cake_features_page.dart';
+import 'package:cake_wallet/src/screens/dashboard/widgets/page_indicator.dart';
import 'package:cake_wallet/src/screens/wallet_connect/widgets/bottom_sheet/bottom_sheet_listener_widget.dart';
import 'package:cake_wallet/src/screens/wallet_connect/services/bottom_sheet_service.dart';
import 'package:cake_wallet/src/widgets/gradient_background.dart';
@@ -220,45 +221,34 @@ class _DashboardPageView extends BasePage {
child: Stack(
alignment: Alignment.bottomCenter,
children: <Widget>[
- //new Expanded(
Observer(
builder: (context) {
return PageView.builder(
- key: ValueKey('dashboard_page_view_key'),
+ key: const ValueKey('dashboard_page_view_key'),
controller: controller,
+ physics: const BouncingScrollPhysics(),
itemCount: pages.length,
itemBuilder: (context, index) => pages[index],
);
},
),
- //),
Positioned(
child: Container(
alignment: Alignment.bottomCenter,
margin: EdgeInsets.only(bottom: 110),
- child: Observer(
- builder: (context) {
- return Semantics(
- button: false,
- label: 'Page Indicator',
- hint: 'Swipe to change page',
- excludeSemantics: true,
- child: SmoothPageIndicator(
- controller: controller,
- count: pages.length,
- effect: ColorTransitionEffect(
- spacing: 6.0,
- radius: 6.0,
- dotWidth: 6.0,
- dotHeight: 6.0,
- dotColor: Theme.of(context).colorScheme.primary.withOpacity(0.4),
- activeDotColor: Theme.of(context).colorScheme.primary,
- ),
- ),
- );
- },
+ child: Semantics(
+ container: true,
+ label: 'Page indicator',
+ hint: 'Swipe left or right to change page, or double tap buttons below to navigate directly.',
+ child: ExcludeSemantics(
+ excluding: false,
+ child: PageIndicator(
+ controller: controller,
+ dashboardViewModel: dashboardViewModel,
+ ),
),
),
+ ),
),
NavigationDock(
dashboardViewModel: dashboardViewModel,
@@ -277,7 +267,7 @@ class _DashboardPageView extends BasePage {
if (dashboardViewModel.shouldShowMarketPlaceInDashboard) {
pages.add(
Semantics(
- label: 'Cake ${S.of(context).features}',
+ label: S.of(context).apps,
child: CakeFeaturesPage(
dashboardViewModel: dashboardViewModel,
cakeFeaturesViewModel: getIt.get<CakeFeaturesViewModel>(),
@@ -288,7 +278,7 @@ class _DashboardPageView extends BasePage {
pages.add(Semantics(label: S.of(context).balance_page, child: balancePage));
pages.add(
Semantics(
- label: S.of(context).settings_transactions,
+ label: S.of(context).history,
child: TransactionsPage(dashboardViewModel: dashboardViewModel),
),
);
diff --git a/lib/src/screens/dashboard/pages/cake_features_page.dart b/lib/src/screens/dashboard/pages/cake_features_page.dart
index b2b361d1..bd381a96 100644
--- a/lib/src/screens/dashboard/pages/cake_features_page.dart
+++ b/lib/src/screens/dashboard/pages/cake_features_page.dart
@@ -28,7 +28,7 @@ class CakeFeaturesPage extends StatelessWidget {
Padding(
padding: EdgeInsets.only(left: 24, top: 16),
child: Text(
- 'Cake ${S.of(context).features}',
+ S.of(context).apps,
style: Theme.of(context).textTheme.headlineSmall?.copyWith(
fontWeight: FontWeight.w500,
color: Theme.of(context).colorScheme.onSurface,
diff --git a/lib/src/screens/dashboard/pages/navigation_dock.dart b/lib/src/screens/dashboard/pages/navigation_dock.dart
index d3afd4e0..c4ee6b09 100644
--- a/lib/src/screens/dashboard/pages/navigation_dock.dart
+++ b/lib/src/screens/dashboard/pages/navigation_dock.dart
@@ -19,7 +19,7 @@ class NavigationDock extends StatelessWidget {
child: Observer(
builder: (_) {
return Container(
- height: 150,
+ height: 84,
alignment: Alignment.bottomCenter,
decoration: dashboardViewModel.settingsStore.backgroundImage.isEmpty
? BoxDecoration(
@@ -30,7 +30,6 @@ class NavigationDock extends StatelessWidget {
),
)
: null,
- //color: Colors.transparent,
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(50),
@@ -50,38 +49,51 @@ class NavigationDock extends StatelessWidget {
borderRadius: BorderRadius.circular(50.0),
color: Theme.of(context).colorScheme.surfaceContainer,
),
- child: Container(
- padding: EdgeInsets.symmetric(horizontal: 8),
- child: IntrinsicHeight(
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: MainActions.all
- .where((element) => element.canShow?.call(dashboardViewModel) ?? true)
- .map(
- (action) => Expanded(
- child: Semantics(
- button: true,
- enabled: (action.isEnabled?.call(dashboardViewModel) ?? true),
- child: ActionButton(
- key: action.key,
- image: Image.asset(action.image,
- height: 24,
- width: 24,
- color: Theme.of(context).colorScheme.primary),
- title: action.name(context),
- onClick: (action.isEnabled?.call(dashboardViewModel) ?? true)
- ? () async =>
- await action.onTap(context, dashboardViewModel)
- : null,
- textColor: action.isEnabled?.call(dashboardViewModel) ?? true
- ? null
- : Theme.of(context).colorScheme.onSurface,
+ padding: const EdgeInsets.symmetric(horizontal: 8),
+ child: ClipRect(
+ child: Row(
+ mainAxisSize: MainAxisSize.min,
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: MainActions.all
+ .where((element) =>
+ element.canShow?.call(dashboardViewModel) ??
+ true)
+ .map(
+ (action) => Expanded(
+ child: Semantics(
+ button: true,
+ enabled: (action.isEnabled
+ ?.call(dashboardViewModel) ??
+ true),
+ child: ActionButton(
+ key: action.key,
+ image: Image.asset(
+ action.image,
+ height: 24,
+ width: 24,
+ color:
+ Theme.of(context).colorScheme.primary,
),
+ title: action.name(context),
+ onClick: (action.isEnabled
+ ?.call(dashboardViewModel) ??
+ true)
+ ? () async => await action.onTap(
+ context, dashboardViewModel)
+ : null,
+ textColor: action.isEnabled
+ ?.call(dashboardViewModel) ??
+ true
+ ? null
+ : Theme.of(context)
+ .colorScheme
+ .onSurface,
),
),
- )
- .toList(),
- ),
+ ),
+ )
+ .toList(),
),
),
),
diff --git a/lib/src/screens/dashboard/widgets/action_button.dart b/lib/src/screens/dashboard/widgets/action_button.dart
index 535181da..4569393a 100644
--- a/lib/src/screens/dashboard/widgets/action_button.dart
+++ b/lib/src/screens/dashboard/widgets/action_button.dart
@@ -21,6 +21,11 @@ class ActionButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return TextButton(
+ style: TextButton.styleFrom(
+ padding: EdgeInsets.zero,
+ minimumSize: Size.zero,
+ tapTargetSize: MaterialTapTargetSize.shrinkWrap,
+ ),
onPressed: () {
if (route?.isNotEmpty ?? false) {
Navigator.of(context, rootNavigator: true).pushNamed(route!);
@@ -28,31 +33,32 @@ class ActionButton extends StatelessWidget {
onClick?.call();
}
},
- child: Container(
- color: Colors.transparent,
- padding: EdgeInsets.only(top: 5, bottom: 4, left: 0, right: 0),
- alignment: alignment,
- child: Column(
- mainAxisSize: MainAxisSize.max,
- crossAxisAlignment: CrossAxisAlignment.center,
- //mainAxisAlignment: MainAxisAlignment.center,
- children: <Widget>[
- Container(
- alignment: Alignment.center,
- decoration: BoxDecoration(
- shape: BoxShape.circle),
- child: image,
- ),
- SizedBox(height: 4),
- Text(
- title,
- maxLines: 1,
- overflow: TextOverflow.visible,
- style: Theme.of(context).textTheme.labelSmall?.copyWith(
- color: textColor ?? Theme.of(context).colorScheme.onSurface),
- textAlign: TextAlign.center,
- )
- ],
+ child: SizedBox.expand(
+ child: Container(
+ color: Colors.transparent,
+ alignment: alignment,
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: <Widget>[
+ image,
+ const SizedBox(height: 4),
+ Flexible(
+ child: Text(
+ title,
+ maxLines: 1,
+ overflow: TextOverflow.fade,
+ softWrap: false,
+ textAlign: TextAlign.center,
+ style: Theme.of(context).textTheme.labelSmall?.copyWith(
+ color: textColor ??
+ Theme.of(context).colorScheme.onSurface,
+ ),
+ ),
+ ),
+ ],
+ ),
),
),
);
diff --git a/lib/src/screens/dashboard/widgets/header_row.dart b/lib/src/screens/dashboard/widgets/header_row.dart
index c501ef00..f85a2cf6 100644
--- a/lib/src/screens/dashboard/widgets/header_row.dart
+++ b/lib/src/screens/dashboard/widgets/header_row.dart
@@ -23,7 +23,7 @@ class HeaderRow extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Text(
- S.of(context).transactions,
+ S.of(context).history,
style: Theme.of(context).textTheme.titleLarge?.copyWith(
fontWeight: FontWeight.w500,
color: Theme.of(context).colorScheme.onSurface),
diff --git a/lib/src/screens/dashboard/widgets/page_indicator.dart b/lib/src/screens/dashboard/widgets/page_indicator.dart
new file mode 100644
index 00000000..a894c400
--- /dev/null
+++ b/lib/src/screens/dashboard/widgets/page_indicator.dart
@@ -0,0 +1,326 @@
+import 'dart:math' as math;
+import 'dart:ui';
+import 'package:cake_wallet/entities/page_indicator_actions.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_svg/flutter_svg.dart';
+import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
+
+class PageIndicator extends StatefulWidget {
+ const PageIndicator({
+ super.key,
+ required this.controller,
+ required this.dashboardViewModel,
+ });
+
+ final PageController controller;
+ final DashboardViewModel dashboardViewModel;
+
+ @override
+ State<PageIndicator> createState() => _PageIndicatorState();
+}
+
+class _PageIndicatorState extends State<PageIndicator> {
+ static const barHeight = 37.0;
+ static const iconWidth = 16.0;
+ static const iconHeight = 16.0;
+ static const iconSpacing = 5.0;
+ static const barHorizontalPadding = 4.0;
+ static const pillHorizontalPadding = 8.0;
+ static const edgePadding = 5.0;
+ static const barBorderRadius = 50.0;
+ static const pillBorderRadius = 50.0;
+ static const pageSwitchDuration = Duration(milliseconds: 300);
+ static const pillMoveDuration = Duration(milliseconds: 300);
+ static const pillResizeDuration = Duration(milliseconds: 200);
+ static const textStyle = TextStyle(
+ fontSize: 12,
+ fontWeight: FontWeight.w400,
+ );
+
+ late int selectedIndex;
+ late final VoidCallback _pageListener;
+
+ @override
+ void initState() {
+ super.initState();
+
+ selectedIndex = widget.controller.initialPage;
+
+ _pageListener = () {
+ final page = widget.controller.page;
+ if (page == null) return;
+
+ final rounded = page.round();
+ if (rounded != selectedIndex && mounted) {
+ setState(() {
+ selectedIndex = rounded;
+ });
+ }
+ };
+
+ widget.controller.addListener(_pageListener);
+ }
+
+ @override
+ void dispose() {
+ widget.controller.removeListener(_pageListener);
+ super.dispose();
+ }
+
+ void _onItemTap(int index) {
+ if (index == selectedIndex) return;
+ widget.controller.animateToPage(
+ index,
+ duration: pageSwitchDuration,
+ curve: Curves.easeOutCubic,
+ );
+ }
+
+ double _estimateItemWidthForAction(
+ BuildContext context, PageIndicatorActions action,
+ {Color? color}) {
+ final text = action.name(context);
+ final textPainter = TextPainter(
+ text: TextSpan(text: text, style: textStyle.copyWith(color: color)),
+ maxLines: 1,
+ textDirection: Directionality.of(context),
+ textScaler: MediaQuery.of(context).textScaler,
+ )..layout();
+ return iconWidth +
+ iconSpacing +
+ textPainter.width +
+ pillHorizontalPadding * 2;
+ }
+
+ @override
+ Widget build(BuildContext context) {
+
+ final visibleActions = PageIndicatorActions.all.where((action) {
+ return action.isEnabled?.call(widget.dashboardViewModel) ?? true;
+ }).toList();
+
+ // Don't show indicator if less than 2 actions
+ if (visibleActions.length < 2) return const SizedBox.shrink();
+
+ selectedIndex = selectedIndex.clamp(0, visibleActions.length - 1);
+
+ // Theme setup
+ final theme = Theme.of(context);
+ final backgroundColor = theme.colorScheme.surfaceContainer.withAlpha(122);
+ final pillColor = theme.colorScheme.onSurface.withAlpha(30);
+ final activeColor = theme.colorScheme.onSurface;
+ final inactiveColor = theme.colorScheme.primary;
+
+ // Size calculations
+ final screenWidth = MediaQuery.of(context).size.width;
+ final isRTL = Directionality.of(context) == TextDirection.rtl;
+
+ final pillWidth = _estimateItemWidthForAction(
+ context,
+ visibleActions[selectedIndex],
+ color: activeColor,
+ );
+
+ final actionWidths = [
+ for (final action in visibleActions)
+ _estimateItemWidthForAction(context, action, color: inactiveColor)
+ ];
+
+ final totalItemsWidth =
+ actionWidths.fold(0.0, (sum, width) => sum + width) +
+ barHorizontalPadding * 2;
+
+ final barWidth = math.min(totalItemsWidth, screenWidth * 0.95);
+
+ final count = visibleActions.length;
+ final firstLeft = edgePadding;
+ final secondLeft =
+ barWidth - (isRTL ? actionWidths.first : actionWidths[1]) - edgePadding;
+
+ final List<double> positions;
+
+ if (count == 2) {
+ positions = [firstLeft, secondLeft];
+ } else {
+ final lastLeft = barWidth -
+ (isRTL ? actionWidths.first : actionWidths.last) -
+ edgePadding;
+
+ final centerLeft = (isRTL
+ ? actionWidths.last + edgePadding
+ : actionWidths.first + edgePadding);
+
+ positions = [firstLeft, centerLeft, lastLeft];
+ }
+
+ final left =
+ (isRTL ? positions.reversed.toList() : positions)[selectedIndex];
+ final currentAction = visibleActions[selectedIndex];
+
+ return Align(
+ alignment: Alignment.bottomCenter,
+ child: Padding(
+ padding: EdgeInsets.only(top: 10),
+ child: Container(
+ width: barWidth,
+ child: ClipRRect(
+ borderRadius: BorderRadius.circular(barBorderRadius),
+ child: BackdropFilter(
+ filter: ImageFilter.blur(sigmaX: 30, sigmaY: 30),
+ child: Container(
+ height: barHeight,
+ decoration: BoxDecoration(
+ color: backgroundColor,
+ borderRadius: BorderRadius.circular(barBorderRadius),
+ ),
+ child: Stack(
+ alignment: Alignment.center,
+ children: [
+ AnimatedPill(
+ left: left,
+ pillColor: pillColor,
+ currentAction: currentAction,
+ pillIconHeight: iconHeight,
+ pillIconWidth: iconWidth,
+ pillIconSpacing: iconSpacing,
+ pillBorderRadius: pillBorderRadius,
+ contentColor: activeColor,
+ estimateWidthForAction: pillWidth,
+ pillTextStyle: textStyle,
+ pillMoveDuration: pillMoveDuration,
+ pillResizeDuration: pillResizeDuration,
+ ),
+ Padding(
+ padding: const EdgeInsets.symmetric(
+ horizontal: barHorizontalPadding),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ for (int i = 0; i < visibleActions.length; i++)
+ Semantics(
+ button: true,
+ label: visibleActions[i].name(context),
+ value: i == selectedIndex ? 'Selected' : null,
+ hint: 'Double tap to open ${visibleActions[i].name(context)} page',
+ onTap: () => _onItemTap(i),
+ child: GestureDetector(
+ behavior: HitTestBehavior.translucent,
+ onTap: () => _onItemTap(i),
+ child: Container(
+ height: barHeight,
+ width: i == selectedIndex
+ ? pillWidth
+ : _estimateItemWidthForAction(
+ context, visibleActions[i]),
+ alignment: Alignment.center,
+ child: Row(
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ TweenAnimationBuilder<Color?>(
+ duration: const Duration(
+ milliseconds: 300),
+ curve: Curves.easeOutCubic,
+ tween: ColorTween(
+ begin: inactiveColor,
+ end: i == selectedIndex
+ ? activeColor
+ : inactiveColor,
+ ),
+ builder: (context, color, _) =>
+ SvgPicture.asset(
+ visibleActions[i].image,
+ width: iconWidth,
+ height: iconHeight,
+ colorFilter: ColorFilter.mode(
+ color!, BlendMode.srcIn),
+ ),
+ ),
+ SizedBox(width: iconSpacing),
+ TweenAnimationBuilder<Color?>(
+ duration: const Duration(
+ milliseconds: 300),
+ curve: Curves.easeOutCubic,
+ tween: ColorTween(
+ begin: inactiveColor,
+ end: i == selectedIndex
+ ? activeColor
+ : inactiveColor,
+ ),
+ builder: (context, color, _) =>
+ Text(
+ visibleActions[i].name(context),
+ style: textStyle.copyWith(
+ color: color),
+ overflow: TextOverflow.fade,
+ softWrap: false,
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ ),
+ ],
+ ),
+ )
+ ],
+ )),
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+}
+
+class AnimatedPill extends StatelessWidget {
+ const AnimatedPill({
+ super.key,
+ required this.left,
+ required this.pillColor,
+ required this.contentColor,
+ required this.pillIconHeight,
+ required this.pillIconWidth,
+ required this.pillBorderRadius,
+ required this.currentAction,
+ required this.estimateWidthForAction,
+ required this.pillIconSpacing,
+ required this.pillTextStyle,
+ required this.pillMoveDuration,
+ required this.pillResizeDuration,
+ });
+
+ final double left;
+ final Color pillColor;
+ final Color contentColor;
+ final double pillIconHeight;
+ final double pillIconWidth;
+ final double pillBorderRadius;
+ final PageIndicatorActions currentAction;
+ final double estimateWidthForAction;
+ final double pillIconSpacing;
+ final TextStyle pillTextStyle;
+ final Duration pillMoveDuration;
+ final Duration pillResizeDuration;
+
+ @override
+ Widget build(BuildContext context) {
+ return AnimatedPositioned(
+ duration: pillMoveDuration,
+ curve: Curves.easeOutCubic,
+ left: left,
+ top: 4,
+ bottom: 4,
+ child: AnimatedContainer(
+ duration: pillResizeDuration,
+ curve: Curves.easeOutCubic,
+ width: estimateWidthForAction,
+ decoration: BoxDecoration(
+ color: pillColor,
+ borderRadius: BorderRadius.circular(pillBorderRadius)),
+ clipBehavior: Clip.hardEdge,
+ alignment: Alignment.center,
+ ),
+ );
+ }
+}
diff --git a/lib/src/screens/settings/display_settings_page.dart b/lib/src/screens/settings/display_settings_page.dart
index 003e64d9..c28db585 100644
--- a/lib/src/screens/settings/display_settings_page.dart
+++ b/lib/src/screens/settings/display_settings_page.dart
@@ -37,7 +37,7 @@ class DisplaySettingsPage extends BasePage {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SettingsSwitcherCell(
- title: S.of(context).show_market_place,
+ title: S.of(context).apps,
value: _displaySettingsViewModel.shouldShowMarketPlaceInDashboard,
onValueChange: (_, bool value) {
_displaySettingsViewModel.setShouldShowMarketPlaceInDashbaord(value);
diff --git a/pubspec_base.yaml b/pubspec_base.yaml
index dda4bea3..274a9720 100644
--- a/pubspec_base.yaml
+++ b/pubspec_base.yaml
@@ -221,6 +221,7 @@ flutter:
- assets/images/hardware_wallet/
- assets/images/crypto/
- assets/images/stocks/
+ - assets/images/main_actions/
- assets/node_list.yml
- assets/haven_node_list.yml
- assets/bitcoin_electrum_server_list.yml
diff --git a/res/values/strings_ar.arb b/res/values/strings_ar.arb
index 22dec101..33709eb3 100644
--- a/res/values/strings_ar.arb
+++ b/res/values/strings_ar.arb
@@ -60,6 +60,7 @@
"approve": "ﺪﻤﺘﻌﻳ",
"approve_request": "الموافقة على الطلب",
"approve_tokens": "الموافقة على الرموز",
+ "apps": "تطبيقات",
"arbiscan_history": "تاريخ أربيسكان",
"arrive_in_this_address": "سيصل ${currency} ${tag}إلى هذا العنوان",
"ascending": "تصاعدي",
@@ -440,6 +441,8 @@
"hide": "يخفي",
"hide_details": "أخف التفاصيل",
"high_contrast_theme": "موضوع عالي التباين",
+ "history": "تاريخ",
+ "home": "بيت",
"home_screen_settings": "إعدادات الشاشة الرئيسية",
"how_to_connect": "كيفية الاتصال",
"how_to_use": " ﻞﻤﻌﺘﺴﺗ ﻒﻴﻛ",
diff --git a/res/values/strings_bg.arb b/res/values/strings_bg.arb
index 5ccf69bd..0484cc66 100644
--- a/res/values/strings_bg.arb
+++ b/res/values/strings_bg.arb
@@ -60,6 +60,7 @@
"approve": "Одобряване",
"approve_request": "Одобрете искане",
"approve_tokens": "Одобрете жетоните",
+ "apps": "Приложения",
"arbiscan_history": "Арбисканска история",
"arrive_in_this_address": "${currency} ${tag}ще отидат на този адрес",
"ascending": "Възходящ",
@@ -440,6 +441,8 @@
"hide": "Скрий",
"hide_details": "Скриване на подробностите",
"high_contrast_theme": "Тема с висок контраст",
+ "history": "История",
+ "home": "Начало",
"home_screen_settings": "Настройки на началния екран",
"how_to_connect": "Как да се свържа",
"how_to_use": "Как да използвам",
diff --git a/res/values/strings_cs.arb b/res/values/strings_cs.arb
index d3496961..e73b1f4b 100644
--- a/res/values/strings_cs.arb
+++ b/res/values/strings_cs.arb
@@ -60,6 +60,7 @@
"approve": "Schvalovat",
"approve_request": "Schválit žádost",
"approve_tokens": "Schválit tokeny",
+ "apps": "Aplikace",
"arbiscan_history": "Arbiscan History",
"arrive_in_this_address": "${currency} ${tag}přijde na tuto adresu",
"ascending": "Vzestupné",
@@ -440,6 +441,8 @@
"hide": "Skrýt",
"hide_details": "Skrýt detaily",
"high_contrast_theme": "Téma s vysokým kontrastem",
+ "history": "Dějiny",
+ "home": "Domov",
"home_screen_settings": "Nastavení domovské obrazovky",
"how_to_connect": "Jak se připojit",
"how_to_use": "Jak používat",
diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb
index b2385044..5ed7982c 100644
--- a/res/values/strings_de.arb
+++ b/res/values/strings_de.arb
@@ -60,6 +60,7 @@
"approve": "Genehmigen",
"approve_request": "Anfrage genehmigen",
"approve_tokens": "Token genehmigen",
+ "apps": "Apps",
"arbiscan_history": "ArbiScan-Geschichte",
"arrive_in_this_address": "${currency} ${tag} wird an dieser Adresse ankommen",
"ascending": "Aufsteigend",
@@ -440,6 +441,8 @@
"hide": "Verstecken",
"hide_details": "Details ausblenden",
"high_contrast_theme": "Kontrastreiches Thema",
+ "history": "Geschichte",
+ "home": "Heim",
"home_screen_settings": "Einstellungen für den Startbildschirm",
"how_to_connect": "Anleitung",
"how_to_use": "Wie benutzt man",
diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb
index f436f41a..bd6d2255 100644
--- a/res/values/strings_en.arb
+++ b/res/values/strings_en.arb
@@ -60,6 +60,7 @@
"approve": "Approve",
"approve_request": "Approve Request",
"approve_tokens": "Approve tokens",
+ "apps": "Apps",
"arbiscan_history": "ArbiScan History",
"arrive_in_this_address": "${currency} ${tag}will arrive in this address",
"ascending": "Ascending",
@@ -440,6 +441,8 @@
"hide": "Hide",
"hide_details": "Hide Details",
"high_contrast_theme": "High Contrast Theme",
+ "history": "History",
+ "home": "Home",
"home_screen_settings": "Home screen settings",
"how_to_connect": "How to Connect",
"how_to_use": "How to use",
diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb
index f3fd8c57..0c28290b 100644
--- a/res/values/strings_es.arb
+++ b/res/values/strings_es.arb
@@ -60,6 +60,7 @@
"approve": "Aprobar",
"approve_request": "Aprobar la solicitud",
"approve_tokens": "Aprobar tokens",
+ "apps": "Apps",
"arbiscan_history": "Historia de ArbiScan",
"arrive_in_this_address": "${currency} ${tag}llegará a esta dirección",
"ascending": "Ascendente",
@@ -440,6 +441,8 @@
"hide": "Ocultar",
"hide_details": "Ocultar detalles",
"high_contrast_theme": "Tema De Alto Contraste",
+ "history": "Historial",
+ "home": "Inicio",
"home_screen_settings": "Configuración de Pantalla de Inicio",
"how_to_connect": "Cómo conectar",
"how_to_use": "Cómo usar",
diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb
index 67c62b7a..94103b0e 100644
--- a/res/values/strings_fr.arb
+++ b/res/values/strings_fr.arb
@@ -60,6 +60,7 @@
"approve": "Approuver",
"approve_request": "Approuver la demande",
"approve_tokens": "Approuver les jetons",
+ "apps": "Applications",
"arbiscan_history": "Historique d'ArbiScan",
"arrive_in_this_address": "${currency} ${tag}arrivera à cette adresse",
"ascending": "Ascendant",
@@ -440,6 +441,8 @@
"hide": "Cacher",
"hide_details": "Masquer les détails",
"high_contrast_theme": "Thème à contraste élevé",
+ "history": "Histoire",
+ "home": "Maison",
"home_screen_settings": "Paramètres de l'écran d'accueil",
"how_to_connect": "Comment se connecter",
"how_to_use": "Comment utiliser",
diff --git a/res/values/strings_gn.arb b/res/values/strings_gn.arb
index 583ce01f..3b204e87 100644
--- a/res/values/strings_gn.arb
+++ b/res/values/strings_gn.arb
@@ -50,6 +50,7 @@
"anonpay_description": "Ojapo ${type}. Pe ojapyhytava ikatu ${method} oipurukuaa oimeraẽva criptomoneda oipytyvõva, ha ojejapyhyta viru ko billetera-pe.",
"apk_update": "APK ñembopyahu",
"approve": "Ñemoneĩ",
+ "apps": "Apps rehegua .",
"arrive_in_this_address": "${currency} ${tag} Og̃uahẽta ko dirección-pe",
"ascending": "yvateve",
"ask_each_time": "Eporandu opa jave",
@@ -331,6 +332,8 @@
"hidden_balance": "Mba’erepy ñemi",
"hide_details": "mba’e peteíteî ñemokañy",
"high_contrast_theme": "Mba’e hesakangue yvateva",
+ "history": "Tembiasakue",
+ "home": "Óga",
"home_screen_settings": "Ñemohenda pe jehechaha ñepyrũme",
"how_to_use": "Mba’éichapa ojeIpuru",
"how_to_use_card": "Mba’éichapa ojeiporu ko karjeta",
diff --git a/res/values/strings_ha.arb b/res/values/strings_ha.arb
index 5058e465..bb26fed0 100644
--- a/res/values/strings_ha.arb
+++ b/res/values/strings_ha.arb
@@ -60,6 +60,7 @@
"approve": "Amincewa",
"approve_request": "Amince da bukata",
"approve_tokens": "Amince da Alamu",
+ "apps": "Apps",
"arbiscan_history": "Tarihin Arbiscan",
"arrive_in_this_address": "${currency} ${tag} zai je wurin wannan adireshi",
"ascending": "Hau",
@@ -440,6 +441,8 @@
"hide": "Ɓoye",
"hide_details": "Ɓoye cikakkun bayanai",
"high_contrast_theme": "Babban Jigon Kwatance",
+ "history": "Tarihi",
+ "home": "Gida",
"home_screen_settings": "Saitunan allo na gida",
"how_to_connect": "Yadda ake haɗa",
"how_to_use": "Yadda ake amfani da shi",
diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb
index 625b8e1b..4c83c23a 100644
--- a/res/values/strings_hi.arb
+++ b/res/values/strings_hi.arb
@@ -60,6 +60,7 @@
"approve": "मंज़ूरी देना",
"approve_request": "अनुरोध को स्वीकृत करें",
"approve_tokens": "टोकन को मंजूरी देना",
+ "apps": "ऐप्स",
"arbiscan_history": "अरबीस्कैन इतिहास",
"arrive_in_this_address": "${currency} ${tag}इस पते पर पहुंचेंगे",
"ascending": "आरोही",
@@ -440,6 +441,8 @@
"hide": "छिपाना",
"hide_details": "विवरण छुपाएं",
"high_contrast_theme": "उच्च कंट्रास्ट थीम",
+ "history": "इतिहास",
+ "home": "घर",
"home_screen_settings": "होम स्क्रीन सेटिंग्स",
"how_to_connect": "कनेक्ट कैसे करें",
"how_to_use": "का उपयोग कैसे करें",
diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb
index 726e00ba..db714439 100644
--- a/res/values/strings_hr.arb
+++ b/res/values/strings_hr.arb
@@ -60,6 +60,7 @@
"approve": "Odobriti",
"approve_request": "Odobriti zahtjev",
"approve_tokens": "Odobriti tokene",
+ "apps": "aplikacije",
"arbiscan_history": "Arbiskanska povijest",
"arrive_in_this_address": "${currency} ${tag}će stići na ovu adresu",
"ascending": "Uzlazni",
@@ -440,6 +441,8 @@
"hide": "Sakriti",
"hide_details": "Sakrij pojedinosti",
"high_contrast_theme": "Tema visokog kontrasta",
+ "history": "Povijest",
+ "home": "Dom",
"home_screen_settings": "Postavke početnog zaslona",
"how_to_connect": "Kako se povezati",
"how_to_use": "Kako koristiti",
diff --git a/res/values/strings_hy.arb b/res/values/strings_hy.arb
index b750b1e6..694a01dd 100644
--- a/res/values/strings_hy.arb
+++ b/res/values/strings_hy.arb
@@ -60,6 +60,7 @@
"approve": "Հաստատել",
"approve_request": "Հաստատում է հայցը",
"approve_tokens": "Հաստատում է նշանները",
+ "apps": "Հավելվածներ",
"arbiscan_history": "Արբիսկանի պատմություն",
"arrive_in_this_address": "${currency} ${tag}կժամանի այս հասցեում",
"ascending": "Աճող",
@@ -440,6 +441,8 @@
"hide": "Թաքցնել",
"hide_details": "Թաքցնել մանրամասները",
"high_contrast_theme": "Բարձր հակադրության տեսք",
+ "history": "Պատմություն",
+ "home": "Տուն",
"home_screen_settings": "Գլխավոր էկրանի կարգավորումներ",
"how_to_connect": "Ինչպես միացնել",
"how_to_use": "Ինչպես օգտագործել",
diff --git a/res/values/strings_id.arb b/res/values/strings_id.arb
index 12489e80..c6e19726 100644
--- a/res/values/strings_id.arb
+++ b/res/values/strings_id.arb
@@ -60,6 +60,7 @@
"approve": "Menyetujui",
"approve_request": "Menyetujui permintaan",
"approve_tokens": "Menyetujui token",
+ "apps": "Aplikasi",
"arbiscan_history": "Sejarah ArbiScan",
"arrive_in_this_address": "${currency} ${tag} akan tiba di alamat ini",
"ascending": "Naik",
@@ -440,6 +441,8 @@
"hide": "Bersembunyi",
"hide_details": "Sembunyikan Rincian",
"high_contrast_theme": "Tema Kontras Tinggi",
+ "history": "Sejarah",
+ "home": "Rumah",
"home_screen_settings": "Pengaturan layar awal",
"how_to_connect": "Cara terhubung",
"how_to_use": "Cara Penggunaan",
diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb
index 55f676cf..603c862a 100644
--- a/res/values/strings_it.arb
+++ b/res/values/strings_it.arb
@@ -60,6 +60,7 @@
"approve": "Approvare",
"approve_request": "Approvare la richiesta",
"approve_tokens": "Approvare i token",
+ "apps": "App",
"arbiscan_history": "Storia dell'ArbiScan",
"arrive_in_this_address": "${currency} ${tag}arriverà a questo indirizzo",
"ascending": "Ascendente",
@@ -440,6 +441,8 @@
"hide": "Nascondi",
"hide_details": "Nascondi dettagli",
"high_contrast_theme": "Tema ad alto contrasto",
+ "history": "Storia",
+ "home": "Casa",
"home_screen_settings": "Impostazioni della schermata iniziale",
"how_to_connect": "Come connettersi",
"how_to_use": "Come usare",
diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb
index 261943d2..9b47ef5f 100644
--- a/res/values/strings_ja.arb
+++ b/res/values/strings_ja.arb
@@ -60,6 +60,7 @@
"approve": "承認する",
"approve_request": "リクエストを承認します",
"approve_tokens": "トークンを承認します",
+ "apps": "アプリ",
"arbiscan_history": "ArbiScan の歴史",
"arrive_in_this_address": "${currency} ${tag}はこの住所に到着します",
"ascending": "上昇",
@@ -441,6 +442,8 @@
"hide": "隠れる",
"hide_details": "詳細を非表示",
"high_contrast_theme": "ハイコントラストテーマ",
+ "history": "歴史",
+ "home": "家",
"home_screen_settings": "ホーム画面の設定",
"how_to_connect": "接続方法",
"how_to_use": "使い方",
diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb
index f2f4cd59..be7f2106 100644
--- a/res/values/strings_ko.arb
+++ b/res/values/strings_ko.arb
@@ -60,6 +60,7 @@
"approve": "승인",
"approve_request": "요청 승인",
"approve_tokens": "토큰을 승인합니다",
+ "apps": "앱",
"arbiscan_history": "ArbiScan 역사",
"arrive_in_this_address": "${currency} ${tag}이(가) 이 주소로 도착합니다",
"ascending": "오름차순",
@@ -440,6 +441,8 @@
"hide": "숨기기",
"hide_details": "세부 정보 숨기기",
"high_contrast_theme": "고대비 테마",
+ "history": "역사",
+ "home": "집",
"home_screen_settings": "홈 화면 설정",
"how_to_connect": "연결 방법",
"how_to_use": "사용 방법",
diff --git a/res/values/strings_my.arb b/res/values/strings_my.arb
index 39eabdfb..2507dda1 100644
--- a/res/values/strings_my.arb
+++ b/res/values/strings_my.arb
@@ -60,6 +60,7 @@
"approve": "လက်မခံပါ။",
"approve_request": "တောင်းဆိုမှုကိုအတည်ပြု",
"approve_tokens": "တိုကင်အတည်ပြု",
+ "apps": "အက်ပလီကေးများ",
"arbiscan_history": "arbiscan သမိုင်း",
"arrive_in_this_address": "${currency} ${tag}ဤလိပ်စာသို့ ရောက်ရှိပါမည်။",
"ascending": "တက်",
@@ -440,6 +441,8 @@
"hide": "သားရေ",
"hide_details": "အသေးစိတ်ကို ဝှက်ပါ။",
"high_contrast_theme": "အလင်းအမှောင် မြင့်မားသော အပြင်အဆင်",
+ "history": "သမိုင်း",
+ "home": "နေအိမ်",
"home_screen_settings": "ပင်မစခရင် ဆက်တင်များ",
"how_to_connect": "ဘယ်လိုချိတ်ဆက်ရမလဲ",
"how_to_use": "အသုံးပြုနည်း",
diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb
index dd9ad4e3..056908f1 100644
--- a/res/values/strings_nl.arb
+++ b/res/values/strings_nl.arb
@@ -60,6 +60,7 @@
"approve": "Goedkeuren",
"approve_request": "Het verzoek goedkeuren",
"approve_tokens": "Tokens goedkeuren",
+ "apps": "Apps",
"arbiscan_history": "ArbiScan-geschiedenis",
"arrive_in_this_address": "${currency} ${tag}komt aan op dit adres",
"ascending": "Stijgend",
@@ -440,6 +441,8 @@
"hide": "Verbergen",
"hide_details": "Details verbergen",
"high_contrast_theme": "Thema met hoog contrast",
+ "history": "Geschiedenis",
+ "home": "Thuis",
"home_screen_settings": "Instellingen voor het startscherm",
"how_to_connect": "Hoe verbinding te maken",
"how_to_use": "Hoe te gebruiken",
diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb
index 5b27af51..c2509f82 100644
--- a/res/values/strings_pl.arb
+++ b/res/values/strings_pl.arb
@@ -60,6 +60,7 @@
"approve": "Zatwierdzić",
"approve_request": "Zatwierdzić żądanie",
"approve_tokens": "Zatwierdzić tokeny",
+ "apps": "Aplikacje",
"arbiscan_history": "Historia ArbiScanu",
"arrive_in_this_address": "${currency} ${tag}dotrze na ten adres",
"ascending": "Wznoszący się",
@@ -439,6 +440,8 @@
"hide": "Ukryj",
"hide_details": "Ukryj szczegóły",
"high_contrast_theme": "Motyw wysokiego kontrastu",
+ "history": "Historia",
+ "home": "Dom",
"home_screen_settings": "Ustawienia ekranu głównego",
"how_to_connect": "Jak połączyć się",
"how_to_use": "Jak korzystać",
diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb
index f8831534..e1b7d4c5 100644
--- a/res/values/strings_pt.arb
+++ b/res/values/strings_pt.arb
@@ -60,6 +60,7 @@
"approve": "Aprovar",
"approve_request": "Aprovar solicitação",
"approve_tokens": "Aprovar tokens",
+ "apps": "Aplicativos",
"arbiscan_history": "História do ArbiScan",
"arrive_in_this_address": "${currency} ${tag}chegará neste endereço",
"ascending": "Ascendente",
@@ -440,6 +441,8 @@
"hide": "Esconder",
"hide_details": "Ocultar detalhes",
"high_contrast_theme": "Tema de alto contraste",
+ "history": "História",
+ "home": "Lar",
"home_screen_settings": "Configurações da tela inicial",
"how_to_connect": "Como conectar",
"how_to_use": "Como usar",
diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb
index de31f95f..5993fd53 100644
--- a/res/values/strings_ru.arb
+++ b/res/values/strings_ru.arb
@@ -60,6 +60,7 @@
"approve": "Утвердить",
"approve_request": "Утвердить запрос",
"approve_tokens": "Одобрить токены",
+ "apps": "Приложения",
"arbiscan_history": "История АрбиСкан",
"arrive_in_this_address": "${currency} ${tag}придет на этот адрес",
"ascending": "Восходящий",
@@ -440,6 +441,8 @@
"hide": "Скрывать",
"hide_details": "Скрыть детали",
"high_contrast_theme": "Высококонтрастная тема",
+ "history": "История",
+ "home": "Дом",
"home_screen_settings": "Настройки главного экрана",
"how_to_connect": "Как подключиться",
"how_to_use": "Как использовать",
diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb
index 6b4fcbd5..d5887fd7 100644
--- a/res/values/strings_th.arb
+++ b/res/values/strings_th.arb
@@ -60,6 +60,7 @@
"approve": "อนุมัติ",
"approve_request": "อนุมัติคำขอ",
"approve_tokens": "อนุมัติโทเค็น",
+ "apps": "แอพ",
"arbiscan_history": "ประวัติ ArbiScan",
"arrive_in_this_address": "${currency} ${tag}จะมาถึงที่อยู่นี้",
"ascending": "จากน้อยไปมาก",
@@ -440,6 +441,8 @@
"hide": "ซ่อน",
"hide_details": "ซ่อนรายละเอียด",
"high_contrast_theme": "ธีมความคมชัดสูง",
+ "history": "ประวัติศาสตร์",
+ "home": "บ้าน",
"home_screen_settings": "การตั้งค่าหน้าจอหลัก",
"how_to_connect": "วิธีการเชื่อมต่อ",
"how_to_use": "วิธีใช้",
diff --git a/res/values/strings_tl.arb b/res/values/strings_tl.arb
index 31f530b5..97712fdb 100644
--- a/res/values/strings_tl.arb
+++ b/res/values/strings_tl.arb
@@ -60,6 +60,7 @@
"approve": "Aprubahan",
"approve_request": "Aprubahan ang kahilingan",
"approve_tokens": "Aprubahan ang mga token",
+ "apps": "Apps",
"arbiscan_history": "Kasaysayan ng Arbiscan",
"arrive_in_this_address": "Ang ${currency} ${tag} ay darating sa address na ito",
"ascending": "Umakyat",
@@ -440,6 +441,8 @@
"hide": "Itago",
"hide_details": "Itago ang mga detalye",
"high_contrast_theme": "High Contrast Theme",
+ "history": "Kasaysayan",
+ "home": "Home",
"home_screen_settings": "Mga setting ng home screen",
"how_to_connect": "Paano kumonekta",
"how_to_use": "Paano gamitin",
diff --git a/res/values/strings_tr.arb b/res/values/strings_tr.arb
index 1236c3c8..be2dd8fd 100644
--- a/res/values/strings_tr.arb
+++ b/res/values/strings_tr.arb
@@ -60,6 +60,7 @@
"approve": "Onaylamak",
"approve_request": "Talebi Onaylama",
"approve_tokens": "Jetonları onaylayın",
+ "apps": "Uygulamalar",
"arbiscan_history": "ArbiScan Geçmişi",
"arrive_in_this_address": "${currency} ${tag}bu adrese ulaşacak",
"ascending": "Yükselen",
@@ -440,6 +441,8 @@
"hide": "Saklamak",
"hide_details": "Detayları Gizle",
"high_contrast_theme": "Yüksek Kontrastlı Tema",
+ "history": "Tarih",
+ "home": "Ev",
"home_screen_settings": "Ana ekran ayarları",
"how_to_connect": "Nasıl bağlanır",
"how_to_use": "Nasıl kullanılır",
diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb
index cabc4a93..e64086e2 100644
--- a/res/values/strings_uk.arb
+++ b/res/values/strings_uk.arb
@@ -60,6 +60,7 @@
"approve": "Затвердити",
"approve_request": "Запитайте запит",
"approve_tokens": "Затвердити токени",
+ "apps": "Застосунки",
"arbiscan_history": "Арбісканська історія",
"arrive_in_this_address": "${currency} ${tag}надійде на цю адресу",
"ascending": "Висхід",
@@ -440,6 +441,8 @@
"hide": "Сховати",
"hide_details": "Приховати деталі",
"high_contrast_theme": "Тема високої контрастності",
+ "history": "Історія",
+ "home": "Дім",
"home_screen_settings": "Налаштування головного екрана",
"how_to_connect": "Як підключитися",
"how_to_use": "Як використовувати",
diff --git a/res/values/strings_ur.arb b/res/values/strings_ur.arb
index 8f361ae6..5190195d 100644
--- a/res/values/strings_ur.arb
+++ b/res/values/strings_ur.arb
@@ -60,6 +60,7 @@
"approve": "ﻭﺮﮐ ﺭﻮﻈﻨﻣ",
"approve_request": "درخواست کو منظور کریں",
"approve_tokens": "ٹوکن کو منظور کریں",
+ "apps": "ایپس",
"arbiscan_history": "اربیسکن تاریخ",
"arrive_in_this_address": "${currency} ${tag}اس پتے پر پہنچے گا۔",
"ascending": "چڑھنے",
@@ -440,6 +441,8 @@
"hide": "چھپائیں",
"hide_details": "تفصیلات چھپائیں۔",
"high_contrast_theme": "ہائی کنٹراسٹ تھیم",
+ "history": "تاریخ",
+ "home": "گھر",
"home_screen_settings": "ہوم اسکرین کی ترتیبات",
"how_to_connect": "کیسے مربوط ہوں",
"how_to_use": " ﮧﻘﯾﺮﻃ ﺎﮐ ﮯﻧﺮﮐ ﻝﺎﻤﻌﺘﺳﺍ",
diff --git a/res/values/strings_vi.arb b/res/values/strings_vi.arb
index be4d2a40..4f3abc8d 100644
--- a/res/values/strings_vi.arb
+++ b/res/values/strings_vi.arb
@@ -60,6 +60,7 @@
"approve": "Phê duyệt",
"approve_request": "Phê duyệt yêu cầu",
"approve_tokens": "Phê duyệt mã thông báo",
+ "apps": "Ứng dụng",
"arbiscan_history": "Lịch sử quét Arbi",
"arrive_in_this_address": "${currency} ${tag} sẽ đến địa chỉ này",
"ascending": "Tăng dần",
@@ -439,6 +440,8 @@
"hide": "Trốn",
"hide_details": "Ẩn chi tiết",
"high_contrast_theme": "Chủ đề độ tương phản cao",
+ "history": "Lịch sử",
+ "home": "Trang chủ",
"home_screen_settings": "Cài đặt màn hình chính",
"how_to_connect": "Cách kết nối",
"how_to_use": "Cách sử dụng",
diff --git a/res/values/strings_yo.arb b/res/values/strings_yo.arb
index 7f2a6034..ef80e77a 100644
--- a/res/values/strings_yo.arb
+++ b/res/values/strings_yo.arb
@@ -60,6 +60,7 @@
"approve": "Fi ọwọ si",
"approve_request": "IKILỌ RẸ",
"approve_tokens": "Ṣe fọwọsi awọn àmi",
+ "apps": "Lw",
"arbiscan_history": "Itan Arbiscan",
"arrive_in_this_address": "${currency} ${tag} máa dé sí àdírẹ́sì yìí",
"ascending": "Goke",
@@ -441,6 +442,8 @@
"hide": "Pamọ",
"hide_details": "Dé ìsọfúnni kékeré",
"high_contrast_theme": "Akori Iyatọ giga",
+ "history": "Itan",
+ "home": "Ile",
"home_screen_settings": "Awọn eto iboju ile",
"how_to_connect": "Bi o ṣe le sopọ",
"how_to_use": "Bawo ni lati lo",
diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb
index cee2aa80..ba602b02 100644
--- a/res/values/strings_zh.arb
+++ b/res/values/strings_zh.arb
@@ -60,6 +60,7 @@
"approve": "批准",
"approve_request": "批准请求",
"approve_tokens": "批准令牌",
+ "apps": "应用程序",
"arbiscan_history": "ArbiScan 历史",
"arrive_in_this_address": "${currency} ${tag}将到达此地址",
"ascending": "上升",
@@ -440,6 +441,8 @@
"hide": "隐藏",
"hide_details": "隐藏细节",
"high_contrast_theme": "高对比度主题",
+ "history": "历史",
+ "home": "家",
"home_screen_settings": "主屏幕设置",
"how_to_connect": "如何连接",
"how_to_use": "如何使用",
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.