From 0ee2357c60450117e04d574e64d446b0400f88ed Mon Sep 17 00:00:00 2001 From: sneurlax Date: Wed, 4 Jan 2023 10:49:13 -0600 Subject: [PATCH] add basic buy page --- lib/pages/home_view/home_view.dart | 10 ++- .../sub_widgets/home_view_button_bar.dart | 70 +++++++++-------- .../desktop_buy/desktop_buy_view.dart | 78 +++++++++++++++++++ .../desktop_home_view.dart | 6 ++ lib/pages_desktop_specific/desktop_menu.dart | 13 ++++ .../desktop_menu_item.dart | 20 +++++ lib/route_generator.dart | 8 ++ lib/utilities/assets.dart | 8 ++ lib/utilities/constants.dart | 1 + 9 files changed, 182 insertions(+), 32 deletions(-) create mode 100644 lib/pages_desktop_specific/desktop_buy/desktop_buy_view.dart diff --git a/lib/pages/home_view/home_view.dart b/lib/pages/home_view/home_view.dart index 7d394d7ce..8f048b8b6 100644 --- a/lib/pages/home_view/home_view.dart +++ b/lib/pages/home_view/home_view.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_svg/svg.dart'; +import 'package:stackwallet/pages/buy_view/buy_view.dart'; import 'package:stackwallet/pages/exchange_view/exchange_loading_overlay.dart'; import 'package:stackwallet/pages/exchange_view/exchange_view.dart'; import 'package:stackwallet/pages/home_view/sub_widgets/home_view_button_bar.dart'; @@ -106,7 +107,14 @@ class _HomeViewState extends ConsumerState { ), ], ), - // const BuyView(), + if (Constants.enableBuy) + // Stack( + // children: [ + const BuyView(), + // BuyLoadingOverlayView( + // unawaitedLoad: _loadSimplexData, + // ), + // ], ]; ref.read(notificationsProvider).startCheckingWatchedNotifications(); diff --git a/lib/pages/home_view/sub_widgets/home_view_button_bar.dart b/lib/pages/home_view/sub_widgets/home_view_button_bar.dart index 83a445cbf..658f87fe0 100644 --- a/lib/pages/home_view/sub_widgets/home_view_button_bar.dart +++ b/lib/pages/home_view/sub_widgets/home_view_button_bar.dart @@ -123,37 +123,45 @@ class _HomeViewButtonBarState extends ConsumerState { ), ), ), - // TODO: Do not delete this code. - // only temporarily disabled - // SizedBox( - // width: 8, - // ), - // Expanded( - // child: TextButton( - // style: ButtonStyle( - // minimumSize: MaterialStateProperty.all(Size(46, 36)), - // backgroundColor: MaterialStateProperty.all( - // selectedIndex == 2 - // ? CFColors.stackAccent - // : CFColors.disabledButton, - // ), - // ), - // onPressed: () { - // FocusScope.of(context).unfocus(); - // if (selectedIndex != 2) { - // ref.read(homeViewPageIndexStateProvider.state).state = 2; - // } - // }, - // child: Text( - // "Buy", - // style: STextStyles.button(context).copyWith( - // fontSize: 14, - // color: - // selectedIndex == 2 ? CFColors.light1 : Theme.of(context).extension()!.accentColorDark - // ), - // ), - // ), - // ), + SizedBox( + width: 8, + ), + Expanded( + child: TextButton( + style: selectedIndex == 2 + ? Theme.of(context) + .extension()! + .getPrimaryEnabledButtonColor(context)! + .copyWith( + minimumSize: + MaterialStateProperty.all(const Size(46, 36)), + ) + : Theme.of(context) + .extension()! + .getSecondaryEnabledButtonColor(context)! + .copyWith( + minimumSize: + MaterialStateProperty.all(const Size(46, 36)), + ), + onPressed: () async { + FocusScope.of(context).unfocus(); + if (selectedIndex != 2) { + ref.read(homeViewPageIndexStateProvider.state).state = 2; + } + }, + child: Text( + "Buy", + style: STextStyles.button(context).copyWith( + fontSize: 14, + color: selectedIndex == 1 + ? Theme.of(context) + .extension()! + .buttonTextPrimary + : Theme.of(context).extension()!.textDark, + ), + ), + ), + ), ], ); } diff --git a/lib/pages_desktop_specific/desktop_buy/desktop_buy_view.dart b/lib/pages_desktop_specific/desktop_buy/desktop_buy_view.dart new file mode 100644 index 000000000..14bc2676c --- /dev/null +++ b/lib/pages_desktop_specific/desktop_buy/desktop_buy_view.dart @@ -0,0 +1,78 @@ +import 'package:flutter/material.dart'; +// import 'package:stackwallet/pages/buy_view/buy_form.dart'; +// import 'package:stackwallet/pages_desktop_specific/desktop_buy/subwidgets/desktop_buy_history.dart'; +import 'package:stackwallet/utilities/text_styles.dart'; +import 'package:stackwallet/widgets/desktop/desktop_app_bar.dart'; +import 'package:stackwallet/widgets/desktop/desktop_scaffold.dart'; + +class DesktopBuyView extends StatefulWidget { + const DesktopBuyView({Key? key}) : super(key: key); + + static const String routeName = "/desktopBuy"; + + @override + State createState() => _DesktopBuyViewState(); +} + +class _DesktopBuyViewState extends State { + @override + Widget build(BuildContext context) { + return DesktopScaffold( + appBar: DesktopAppBar( + isCompactHeight: true, + leading: Padding( + padding: const EdgeInsets.only( + left: 24, + ), + child: Text( + "Buy", + style: STextStyles.desktopH3(context), + ), + ), + ), + body: Padding( + padding: const EdgeInsets.only( + left: 24, + right: 24, + bottom: 24, + ), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "Coming soon", + style: STextStyles.desktopTextExtraExtraSmall(context), + ), + const SizedBox( + height: 16, + ), + // const RoundedWhiteContainer( + // padding: EdgeInsets.all(24), + // child: BuyForm(), + // ), + ], + ), + ), + const SizedBox( + width: 16, + ), + // Expanded( + // child: Row( + // children: const [ + // Expanded( + // child: DesktopTradeHistory(), + // ), + // ], + // ), + // ), + ], + ), + ), + ); + } +} diff --git a/lib/pages_desktop_specific/desktop_home_view.dart b/lib/pages_desktop_specific/desktop_home_view.dart index 3ef490512..e9092fe2d 100644 --- a/lib/pages_desktop_specific/desktop_home_view.dart +++ b/lib/pages_desktop_specific/desktop_home_view.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:stackwallet/pages_desktop_specific/address_book_view/desktop_address_book.dart'; +import 'package:stackwallet/pages_desktop_specific/desktop_buy/desktop_buy_view.dart'; import 'package:stackwallet/pages_desktop_specific/desktop_exchange/desktop_exchange_view.dart'; import 'package:stackwallet/pages_desktop_specific/desktop_menu.dart'; import 'package:stackwallet/pages_desktop_specific/my_stack_view/my_stack_view.dart'; @@ -56,6 +57,11 @@ class _DesktopHomeViewState extends ConsumerState { onGenerateRoute: RouteGenerator.generateRoute, initialRoute: DesktopExchangeView.routeName, ), + DesktopMenuItemId.buy: const Navigator( + key: Key("desktopBuyHomeKey"), + onGenerateRoute: RouteGenerator.generateRoute, + initialRoute: DesktopBuyView.routeName, + ), DesktopMenuItemId.notifications: const Navigator( key: Key("desktopNotificationsHomeKey"), onGenerateRoute: RouteGenerator.generateRoute, diff --git a/lib/pages_desktop_specific/desktop_menu.dart b/lib/pages_desktop_specific/desktop_menu.dart index 96b4e6638..be7229780 100644 --- a/lib/pages_desktop_specific/desktop_menu.dart +++ b/lib/pages_desktop_specific/desktop_menu.dart @@ -12,6 +12,7 @@ import 'package:stackwallet/widgets/desktop/living_stack_icon.dart'; enum DesktopMenuItemId { myStack, exchange, + buy, notifications, addressBook, settings, @@ -73,6 +74,7 @@ class _DesktopMenuState extends ConsumerState { DMIController(), DMIController(), DMIController(), + DMIController(), ]; super.initState(); @@ -157,6 +159,17 @@ class _DesktopMenuState extends ConsumerState { const SizedBox( height: 2, ), + DesktopMenuItem( + duration: duration, + icon: const DesktopBuyIcon(), + label: "Buy", + value: DesktopMenuItemId.buy, + onChanged: updateSelectedMenuItem, + controller: controllers[2], + ), + const SizedBox( + height: 2, + ), DesktopMenuItem( duration: duration, icon: const DesktopNotificationsIcon(), diff --git a/lib/pages_desktop_specific/desktop_menu_item.dart b/lib/pages_desktop_specific/desktop_menu_item.dart index e75f3410f..d7f53501d 100644 --- a/lib/pages_desktop_specific/desktop_menu_item.dart +++ b/lib/pages_desktop_specific/desktop_menu_item.dart @@ -55,6 +55,26 @@ class DesktopExchangeIcon extends ConsumerWidget { } } +class DesktopBuyIcon extends ConsumerWidget { + const DesktopBuyIcon({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context, WidgetRef ref) { + return SvgPicture.asset( + Assets.svg.buyDesktop, + width: 20, + height: 20, + color: DesktopMenuItemId.buy == + ref.watch(currentDesktopMenuItemProvider.state).state + ? Theme.of(context).extension()!.accentColorDark + : Theme.of(context) + .extension()! + .accentColorDark + .withOpacity(0.8), + ); + } +} + class DesktopNotificationsIcon extends ConsumerWidget { const DesktopNotificationsIcon({Key? key}) : super(key: key); diff --git a/lib/route_generator.dart b/lib/route_generator.dart index ed676c437..7af01cacf 100644 --- a/lib/route_generator.dart +++ b/lib/route_generator.dart @@ -85,6 +85,8 @@ import 'package:stackwallet/pages/wallet_view/transaction_views/transaction_sear import 'package:stackwallet/pages/wallet_view/wallet_view.dart'; import 'package:stackwallet/pages/wallets_view/wallets_view.dart'; import 'package:stackwallet/pages_desktop_specific/address_book_view/desktop_address_book.dart'; +// import 'package:stackwallet/pages_desktop_specific/desktop_exchange/desktop_all_buys_view.dart'; +import 'package:stackwallet/pages_desktop_specific/desktop_buy/desktop_buy_view.dart'; import 'package:stackwallet/pages_desktop_specific/desktop_exchange/desktop_all_trades_view.dart'; import 'package:stackwallet/pages_desktop_specific/desktop_exchange/desktop_exchange_view.dart'; import 'package:stackwallet/pages_desktop_specific/desktop_home_view.dart'; @@ -1061,6 +1063,12 @@ class RouteGenerator { builder: (_) => const DesktopExchangeView(), settings: RouteSettings(name: settings.name)); + case DesktopBuyView.routeName: + return getRoute( + shouldUseMaterialRoute: useMaterialPageRoute, + builder: (_) => const DesktopBuyView(), + settings: RouteSettings(name: settings.name)); + case DesktopAllTradesView.routeName: return getRoute( shouldUseMaterialRoute: useMaterialPageRoute, diff --git a/lib/utilities/assets.dart b/lib/utilities/assets.dart index b02c6584e..f6d43b26a 100644 --- a/lib/utilities/assets.dart +++ b/lib/utilities/assets.dart @@ -9,6 +9,7 @@ abstract class Assets { static const lottie = _ANIMATIONS(); static const socials = _SOCIALS(); static const exchange = _EXCHANGE(); + static const buy = _BUY(); } class _SOCIALS { @@ -27,6 +28,12 @@ class _EXCHANGE { String get simpleSwap => "assets/svg/exchange_icons/simpleswap-icon.svg"; } +class _BUY { + const _BUY(); + + String get buy => "assets/svg/light/buy-coins-icon.svg"; +} + class _SVG { const _SVG(); String? background(BuildContext context) { @@ -162,6 +169,7 @@ class _SVG { String get anonymizeFailed => "assets/svg/tx-icon-anonymize-failed.svg"; String get addressBookDesktop => "assets/svg/address-book-desktop.svg"; String get exchangeDesktop => "assets/svg/exchange-desktop.svg"; + String get buyDesktop => "assets/svg/light/buy-coins-icon.svg"; String get aboutDesktop => "assets/svg/about-desktop.svg"; String get walletDesktop => "assets/svg/wallet-desktop.svg"; String get exitDesktop => "assets/svg/exit-desktop.svg"; diff --git a/lib/utilities/constants.dart b/lib/utilities/constants.dart index 740e40c24..0df9a6b09 100644 --- a/lib/utilities/constants.dart +++ b/lib/utilities/constants.dart @@ -21,6 +21,7 @@ abstract class Constants { } static bool enableExchange = Util.isDesktop || !Platform.isIOS; + static bool enableBuy = true; // true for development, TODO change to "Util.isDesktop || !Platform.isIOS;" as above or even just = enableExchange //TODO: correct for monero? static const int _satsPerCoinMonero = 1000000000000;