/* * This file is part of Stack Wallet. * * Copyright (c) 2023 Cypher Stack * All Rights Reserved. * The code is distributed under GPLv3 license, see LICENSE file for details. * Generated by Cypher Stack on 2023-05-26 * */ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_svg/svg.dart'; import '../../models/buy/response_objects/order.dart'; import '../../notifications/show_flush_bar.dart'; import '../../themes/stack_colors.dart'; import '../../themes/theme_providers.dart'; import '../../utilities/assets.dart'; import '../../utilities/text_styles.dart'; import '../../utilities/util.dart'; import '../../widgets/background.dart'; import '../../widgets/conditional_parent.dart'; import '../../widgets/custom_buttons/app_bar_icon_button.dart'; import '../../widgets/desktop/primary_button.dart'; import '../../widgets/rounded_white_container.dart'; class BuyOrderDetailsView extends ConsumerStatefulWidget { const BuyOrderDetailsView({ super.key, required this.order, }); final SimplexOrder order; static const String routeName = "/buyOrderDetails"; @override ConsumerState createState() => _BuyOrderDetailsViewState(); } class _BuyOrderDetailsViewState extends ConsumerState { final isDesktop = Util.isDesktop; @override Widget build(BuildContext context) { final orderDetails = ''' Purchase ID: ${widget.order.paymentId} User ID: ${widget.order.userId} Quote ID: ${widget.order.quote.id} Quoted cost: ${widget.order.quote.youPayFiatPrice.toStringAsFixed(2)} ${widget.order.quote.fiat.ticker.toUpperCase()} Quoted amount: ${widget.order.quote.youReceiveCryptoAmount} ${widget.order.quote.crypto.ticker.toUpperCase()} Receiving ${widget.order.quote.crypto.ticker.toUpperCase()} address: ${widget.order.quote.receivingAddress} Provider: Simplex '''; return ConditionalParent( condition: !isDesktop, builder: (child) { return Background( child: Scaffold( backgroundColor: Theme.of(context).extension()!.background, appBar: AppBar( backgroundColor: Theme.of(context).extension()!.backgroundAppBar, leading: const AppBarBackButton(), title: Text( "Order details", style: STextStyles.navBarTitle(context), ), ), body: LayoutBuilder( builder: (builderContext, constraints) { return Padding( padding: const EdgeInsets.only( left: 12, top: 12, right: 12, ), child: SingleChildScrollView( child: ConstrainedBox( constraints: BoxConstraints( minHeight: constraints.maxHeight - 24, ), child: IntrinsicHeight( child: Padding( padding: const EdgeInsets.all(4), child: child, ), ), ), ), ); }, ), ), ); }, child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Text( "Simplex order", style: STextStyles.pageTitleH1(context), ), const SizedBox( height: 16, ), RoundedWhiteContainer( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( "Purchase ID", style: STextStyles.label(context), ), Text( widget.order.paymentId, style: STextStyles.label(context).copyWith( color: Theme.of(context).extension()!.textDark, ), ), ], ), ), const SizedBox( height: 8, ), RoundedWhiteContainer( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( "User ID", style: STextStyles.label(context), ), Text( widget.order.userId, style: STextStyles.label(context).copyWith( color: Theme.of(context).extension()!.textDark, ), ), ], ), ), const SizedBox( height: 8, ), RoundedWhiteContainer( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( "Quote ID", style: STextStyles.label(context), ), Text( widget.order.quote.id, style: STextStyles.label(context).copyWith( color: Theme.of(context).extension()!.textDark, ), ), ], ), ), const SizedBox( height: 8, ), RoundedWhiteContainer( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( "Quoted cost", style: STextStyles.label(context), ), Text( "${widget.order.quote.youPayFiatPrice.toStringAsFixed(2)} ${widget.order.quote.fiat.ticker.toUpperCase()}", style: STextStyles.label(context).copyWith( color: Theme.of(context).extension()!.textDark, ), ), ], ), ), const SizedBox( height: 8, ), // RoundedWhiteContainer( // child: Row( // mainAxisAlignment: MainAxisAlignment.spaceBetween, // children: [ // Text( // "You pay with", // style: STextStyles.label(context), // ), // Text( // widget.quote.fiat.name, // style: STextStyles.label(context).copyWith( // color: Theme.of(context).extension()!.textDark, // ), // ), // ], // ), // ), // const SizedBox( // height: 8, // ), RoundedWhiteContainer( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( "Quoted amount", style: STextStyles.label(context), ), Text( "${widget.order.quote.youReceiveCryptoAmount} ${widget.order.quote.crypto.ticker.toUpperCase()}", style: STextStyles.label(context).copyWith( color: Theme.of(context).extension()!.textDark, ), ), ], ), ), const SizedBox( height: 8, ), RoundedWhiteContainer( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( "Receiving ${widget.order.quote.crypto.ticker.toUpperCase()} address", style: STextStyles.label(context), ), Text( "${widget.order.quote.receivingAddress} ", style: STextStyles.label(context).copyWith( color: Theme.of(context).extension()!.textDark, ), ), ], ), ), const SizedBox( height: 8, ), RoundedWhiteContainer( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( "Provider", style: STextStyles.label(context), ), SizedBox( width: 64, height: 32, child: SvgPicture.asset( Assets.buy.simplexLogo( ref.watch(themeProvider).brightness, ), ), ), ], ), ), const SizedBox( height: 24, ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( "This information is not saved,\nscreenshot it now for your records", style: STextStyles.label(context).copyWith( color: Theme.of(context).extension()!.textDark, ), textAlign: TextAlign.center, ), ], ), const SizedBox(height: 8), TextButton( onPressed: () async { await Clipboard.setData(ClipboardData(text: orderDetails)); if (context.mounted) { unawaited( showFloatingFlushBar( type: FlushBarType.info, message: "Copied to clipboard", context: context, ), ); } }, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ SvgPicture.asset( Assets.svg.copy, width: 20, height: 20, color: Theme.of(context) .extension()! .buttonTextSecondary, ), const SizedBox( width: 10, ), Text( "Copy to clipboard", style: STextStyles.desktopButtonSecondaryEnabled( context, ), ), ], ), ), const Spacer(), PrimaryButton( label: "Dismiss", onPressed: () { Navigator.of(context, rootNavigator: isDesktop).pop(); }, ), ], ), ); } }