CW-349 MacOS UI issue when navigating to Transaction details screen (#921)

* Fix macos ui issues when navigatng to transaction detail screen

* [skip ci] remove print and indent

* Refactor previous approach based on PR review

* Code Enhancements

* Fix transaction page navigation

* Fix disable secure app request for macos

* Update background color

* Update background color

* Update background color

* Remove unrelated format

* Fix navigation UI glitch

---------

Co-authored-by: OmarHatem <omarh.ismail1@gmail.com>
This commit is contained in:
Godwin Asuquo 2023-07-11 19:07:46 +03:00 committed by GitHub
parent bf0c2c8f35
commit b974458f1b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 112 additions and 131 deletions

View file

@ -14,72 +14,75 @@ class DesktopDashboardActions extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Observer( return Container(
builder: (_) { color: Theme.of(context).colorScheme.background,
return Column( child: Observer(
children: [ builder: (_) {
const SizedBox(height: 16), return Column(
DesktopActionButton( children: [
title: MainActions.exchangeAction.name(context), const SizedBox(height: 16),
image: MainActions.exchangeAction.image, DesktopActionButton(
canShow: MainActions.exchangeAction.canShow?.call(dashboardViewModel), title: MainActions.exchangeAction.name(context),
isEnabled: MainActions.exchangeAction.isEnabled?.call(dashboardViewModel), image: MainActions.exchangeAction.image,
onTap: () async => await MainActions.exchangeAction.onTap(context, dashboardViewModel), canShow: MainActions.exchangeAction.canShow?.call(dashboardViewModel),
), isEnabled: MainActions.exchangeAction.isEnabled?.call(dashboardViewModel),
Row( onTap: () async => await MainActions.exchangeAction.onTap(context, dashboardViewModel),
children: [
Expanded(
child: DesktopActionButton(
title: MainActions.receiveAction.name(context),
image: MainActions.receiveAction.image,
canShow: MainActions.receiveAction.canShow?.call(dashboardViewModel),
isEnabled: MainActions.receiveAction.isEnabled?.call(dashboardViewModel),
onTap: () async =>
await MainActions.receiveAction.onTap(context, dashboardViewModel),
),
),
Expanded(
child: DesktopActionButton(
title: MainActions.sendAction.name(context),
image: MainActions.sendAction.image,
canShow: MainActions.sendAction.canShow?.call(dashboardViewModel),
isEnabled: MainActions.sendAction.isEnabled?.call(dashboardViewModel),
onTap: () async => await MainActions.sendAction.onTap(context, dashboardViewModel),
),
),
],
),
Row(
children: [
Expanded(
child: DesktopActionButton(
title: MainActions.buyAction.name(context),
image: MainActions.buyAction.image,
canShow: MainActions.buyAction.canShow?.call(dashboardViewModel),
isEnabled: MainActions.buyAction.isEnabled?.call(dashboardViewModel),
onTap: () async => await MainActions.buyAction.onTap(context, dashboardViewModel),
),
),
Expanded(
child: DesktopActionButton(
title: MainActions.sellAction.name(context),
image: MainActions.sellAction.image,
canShow: MainActions.sellAction.canShow?.call(dashboardViewModel),
isEnabled: MainActions.sellAction.isEnabled?.call(dashboardViewModel),
onTap: () async => await MainActions.sellAction.onTap(context, dashboardViewModel),
),
),
],
),
Expanded(
child: MarketPlacePage(
dashboardViewModel: dashboardViewModel,
marketPlaceViewModel: getIt.get<MarketPlaceViewModel>(),
), ),
), Row(
], children: [
); Expanded(
} child: DesktopActionButton(
title: MainActions.receiveAction.name(context),
image: MainActions.receiveAction.image,
canShow: MainActions.receiveAction.canShow?.call(dashboardViewModel),
isEnabled: MainActions.receiveAction.isEnabled?.call(dashboardViewModel),
onTap: () async =>
await MainActions.receiveAction.onTap(context, dashboardViewModel),
),
),
Expanded(
child: DesktopActionButton(
title: MainActions.sendAction.name(context),
image: MainActions.sendAction.image,
canShow: MainActions.sendAction.canShow?.call(dashboardViewModel),
isEnabled: MainActions.sendAction.isEnabled?.call(dashboardViewModel),
onTap: () async => await MainActions.sendAction.onTap(context, dashboardViewModel),
),
),
],
),
Row(
children: [
Expanded(
child: DesktopActionButton(
title: MainActions.buyAction.name(context),
image: MainActions.buyAction.image,
canShow: MainActions.buyAction.canShow?.call(dashboardViewModel),
isEnabled: MainActions.buyAction.isEnabled?.call(dashboardViewModel),
onTap: () async => await MainActions.buyAction.onTap(context, dashboardViewModel),
),
),
Expanded(
child: DesktopActionButton(
title: MainActions.sellAction.name(context),
image: MainActions.sellAction.image,
canShow: MainActions.sellAction.canShow?.call(dashboardViewModel),
isEnabled: MainActions.sellAction.isEnabled?.call(dashboardViewModel),
onTap: () async => await MainActions.sellAction.onTap(context, dashboardViewModel),
),
),
],
),
Expanded(
child: MarketPlacePage(
dashboardViewModel: dashboardViewModel,
marketPlaceViewModel: getIt.get<MarketPlaceViewModel>(),
),
),
],
);
}
),
); );
} }
} }

View file

@ -77,27 +77,21 @@ class DesktopSidebarWrapper extends BasePage {
SideMenuItem( SideMenuItem(
imagePath: 'assets/images/wallet_outline.png', imagePath: 'assets/images/wallet_outline.png',
isSelected: desktopSidebarViewModel.currentPage == SidebarItem.dashboard, isSelected: desktopSidebarViewModel.currentPage == SidebarItem.dashboard,
onTap: () => desktopSidebarViewModel.onPageChange(SidebarItem.dashboard), onTap: () {
desktopSidebarViewModel.onPageChange(SidebarItem.dashboard);
desktopNavigatorKey.currentState
?.pushNamedAndRemoveUntil(Routes.desktop_actions, (route) => false);
},
), ),
SideMenuItem( SideMenuItem(
onTap: () { onTap: () {
String? currentPath; if (desktopSidebarViewModel.currentPage == SidebarItem.transactions) {
desktopNavigatorKey.currentState
desktopNavigatorKey.currentState?.popUntil((route) { ?.pushNamedAndRemoveUntil(Routes.desktop_actions, (route) => false);
currentPath = route.settings.name; desktopSidebarViewModel.resetSidebar();
return true; } else {
}); desktopSidebarViewModel.onPageChange(SidebarItem.transactions);
desktopNavigatorKey.currentState?.pushNamed(Routes.transactionsPage);
switch (currentPath) {
case Routes.transactionsPage:
desktopSidebarViewModel.resetSidebar();
break;
default:
desktopSidebarViewModel.resetSidebar();
Future.delayed(Duration(milliseconds: 10), () {
desktopSidebarViewModel.onPageChange(SidebarItem.transactions);
desktopNavigatorKey.currentState?.pushNamed(Routes.transactionsPage);
});
} }
}, },
isSelected: desktopSidebarViewModel.currentPage == SidebarItem.transactions, isSelected: desktopSidebarViewModel.currentPage == SidebarItem.transactions,
@ -156,20 +150,11 @@ class DesktopSidebarWrapper extends BasePage {
void _setEffects() async { void _setEffects() async {
reaction<SidebarItem>((_) => desktopSidebarViewModel.currentPage, (page) { reaction<SidebarItem>((_) => desktopSidebarViewModel.currentPage, (page) {
String? currentPath; if (page == SidebarItem.dashboard) {
pageController.jumpToPage(0);
desktopNavigatorKey.currentState?.popUntil((route) {
currentPath = route.settings.name;
return true;
});
if (page == SidebarItem.transactions) {
return; return;
} }
pageController.jumpToPage(page.index - 1);
if (currentPath == Routes.transactionsPage) {
Navigator.of(desktopNavigatorKey.currentContext!).pop();
}
pageController.jumpToPage(page.index);
}); });
} }
} }

View file

@ -16,9 +16,6 @@ class BalancePage extends StatelessWidget {
final DashboardViewModel dashboardViewModel; final DashboardViewModel dashboardViewModel;
final SettingsStore settingsStore; final SettingsStore settingsStore;
Color get backgroundLightColor =>
settingsStore.currentTheme.type == ThemeType.bright ? Colors.transparent : Colors.white;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return GestureDetector( return GestureDetector(

View file

@ -118,19 +118,21 @@ class _AdvancedPrivacySettingsBodyState extends State<AdvancedPrivacySettingsBod
textColor: Colors.white, textColor: Colors.white,
), ),
const SizedBox(height: 25), const SizedBox(height: 25),
Padding( LayoutBuilder(
padding: EdgeInsets.symmetric(horizontal: MediaQuery.of(context).size.width * 0.15), builder: (_, constraints) => SizedBox(
child: Text( width: constraints.maxWidth * 0.8,
S.of(context).settings_can_be_changed_later, child: Text(
textAlign: TextAlign.center, S.of(context).settings_can_be_changed_later,
style: TextStyle( textAlign: TextAlign.center,
color: Theme.of(context) style: TextStyle(
color: Theme.of(context)
.accentTextTheme! .accentTextTheme!
.displayMedium! .displayMedium!
.color, .color,
),
), ),
), ),
), )
], ],
), ),
), ),

View file

@ -115,6 +115,7 @@ class NodeCreateOrEditPage extends BasePage {
bottomSectionPadding: EdgeInsets.only(bottom: 24), bottomSectionPadding: EdgeInsets.only(bottom: 24),
bottomSection: Observer( bottomSection: Observer(
builder: (_) => Row( builder: (_) => Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[ children: <Widget>[
Flexible( Flexible(
child: Container( child: Container(

View file

@ -145,15 +145,13 @@ abstract class SettingsStoreBase with Store {
}); });
} }
reaction( reaction((_) => disableBuy,
(_) => disableBuy, (bool disableBuy) => sharedPreferences.setBool(PreferencesKey.disableBuyKey, disableBuy));
(bool disableBuy) => sharedPreferences.setBool(
PreferencesKey.disableBuyKey, disableBuy));
reaction( reaction(
(_) => disableSell, (_) => disableSell,
(bool disableSell) => sharedPreferences.setBool( (bool disableSell) =>
PreferencesKey.disableSellKey, disableSell)); sharedPreferences.setBool(PreferencesKey.disableSellKey, disableSell));
reaction( reaction(
(_) => fiatApiMode, (_) => fiatApiMode,
@ -350,12 +348,9 @@ abstract class SettingsStoreBase with Store {
// FIX-ME: Check for which default value we should have here // FIX-ME: Check for which default value we should have here
final shouldSaveRecipientAddress = final shouldSaveRecipientAddress =
sharedPreferences.getBool(PreferencesKey.shouldSaveRecipientAddressKey) ?? false; sharedPreferences.getBool(PreferencesKey.shouldSaveRecipientAddressKey) ?? false;
final isAppSecure = final isAppSecure = sharedPreferences.getBool(PreferencesKey.isAppSecureKey) ?? false;
sharedPreferences.getBool(PreferencesKey.isAppSecureKey) ?? false; final disableBuy = sharedPreferences.getBool(PreferencesKey.disableBuyKey) ?? false;
final disableBuy = final disableSell = sharedPreferences.getBool(PreferencesKey.disableSellKey) ?? false;
sharedPreferences.getBool(PreferencesKey.disableBuyKey) ?? false;
final disableSell =
sharedPreferences.getBool(PreferencesKey.disableSellKey) ?? false;
final currentFiatApiMode = FiatApiMode.deserialize( final currentFiatApiMode = FiatApiMode.deserialize(
raw: sharedPreferences.getInt(PreferencesKey.currentFiatApiModeKey) ?? raw: sharedPreferences.getInt(PreferencesKey.currentFiatApiModeKey) ??
FiatApiMode.enabled.raw); FiatApiMode.enabled.raw);
@ -487,16 +482,14 @@ abstract class SettingsStoreBase with Store {
useTOTP2FA = sharedPreferences.getBool(PreferencesKey.useTOTP2FA) ?? useTOTP2FA; useTOTP2FA = sharedPreferences.getBool(PreferencesKey.useTOTP2FA) ?? useTOTP2FA;
numberOfFailedTokenTrials = numberOfFailedTokenTrials =
sharedPreferences.getInt(PreferencesKey.failedTotpTokenTrials) ?? numberOfFailedTokenTrials; sharedPreferences.getInt(PreferencesKey.failedTotpTokenTrials) ?? numberOfFailedTokenTrials;
sharedPreferences.getBool(PreferencesKey.shouldSaveRecipientAddressKey) ?? shouldSaveRecipientAddress; sharedPreferences.getBool(PreferencesKey.shouldSaveRecipientAddressKey) ??
isAppSecure = shouldSaveRecipientAddress;
sharedPreferences.getBool(PreferencesKey.isAppSecureKey) ?? isAppSecure; isAppSecure = sharedPreferences.getBool(PreferencesKey.isAppSecureKey) ?? isAppSecure;
disableBuy = disableBuy = sharedPreferences.getBool(PreferencesKey.disableBuyKey) ?? disableBuy;
sharedPreferences.getBool(PreferencesKey.disableBuyKey) ?? disableBuy; disableSell = sharedPreferences.getBool(PreferencesKey.disableSellKey) ?? disableSell;
disableSell = allowBiometricalAuthentication =
sharedPreferences.getBool(PreferencesKey.disableSellKey) ?? disableSell; sharedPreferences.getBool(PreferencesKey.allowBiometricalAuthenticationKey) ??
allowBiometricalAuthentication = sharedPreferences allowBiometricalAuthentication;
.getBool(PreferencesKey.allowBiometricalAuthenticationKey) ??
allowBiometricalAuthentication;
shouldShowMarketPlaceInDashboard = shouldShowMarketPlaceInDashboard =
sharedPreferences.getBool(PreferencesKey.shouldShowMarketPlaceInDashboard) ?? sharedPreferences.getBool(PreferencesKey.shouldShowMarketPlaceInDashboard) ??
shouldShowMarketPlaceInDashboard; shouldShowMarketPlaceInDashboard;

View file

@ -4,9 +4,9 @@ part 'desktop_sidebar_view_model.g.dart';
enum SidebarItem { enum SidebarItem {
dashboard, dashboard,
transactions,
support, support,
settings, settings,
transactions;
} }
class DesktopSidebarViewModel = DesktopSidebarViewModelBase with _$DesktopSidebarViewModel; class DesktopSidebarViewModel = DesktopSidebarViewModelBase with _$DesktopSidebarViewModel;

View file

@ -115,10 +115,10 @@ SPEC CHECKSUMS:
platform_device_id_macos: f763bb55f088be804d61b96eb4710b8ab6598e94 platform_device_id_macos: f763bb55f088be804d61b96eb4710b8ab6598e94
ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
share_plus_macos: 853ee48e7dce06b633998ca0735d482dd671ade4 share_plus_macos: 853ee48e7dce06b633998ca0735d482dd671ade4
shared_preferences_foundation: e2dae3258e06f44cc55f49d42024fd8dd03c590c shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
url_launcher_macos: 5335912b679c073563f29d89d33d10d459f95451 url_launcher_macos: 5335912b679c073563f29d89d33d10d459f95451
wakelock_macos: bc3f2a9bd8d2e6c89fee1e1822e7ddac3bd004a9 wakelock_macos: bc3f2a9bd8d2e6c89fee1e1822e7ddac3bd004a9
PODFILE CHECKSUM: 5107934592df7813b33d744aebc8ddc6b5a5445f PODFILE CHECKSUM: 5107934592df7813b33d744aebc8ddc6b5a5445f
COCOAPODS: 1.11.3 COCOAPODS: 1.12.1