From 66271a90189243cb0fcc462d8f48379065d5fa66 Mon Sep 17 00:00:00 2001
From: julian <julian@cypherstack.com>
Date: Wed, 21 Dec 2022 11:06:53 -0600
Subject: [PATCH] paynym qr popup

---
 lib/pages/paynym/dialogs/paynym_qr_popup.dart | 132 ++++++++++++++++++
 lib/pages/paynym/paynym_home_view.dart        |   9 +-
 lib/utilities/text_styles.dart                |  23 +++
 3 files changed, 163 insertions(+), 1 deletion(-)
 create mode 100644 lib/pages/paynym/dialogs/paynym_qr_popup.dart

diff --git a/lib/pages/paynym/dialogs/paynym_qr_popup.dart b/lib/pages/paynym/dialogs/paynym_qr_popup.dart
new file mode 100644
index 000000000..f4169556a
--- /dev/null
+++ b/lib/pages/paynym/dialogs/paynym_qr_popup.dart
@@ -0,0 +1,132 @@
+import 'dart:async';
+
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:qr_flutter/qr_flutter.dart';
+import 'package:stackwallet/models/paynym/paynym_account.dart';
+import 'package:stackwallet/pages/paynym/paynym_home_view.dart';
+import 'package:stackwallet/utilities/text_styles.dart';
+import 'package:stackwallet/utilities/theme/stack_colors.dart';
+import 'package:stackwallet/widgets/custom_buttons/blue_text_button.dart';
+import 'package:stackwallet/widgets/desktop/desktop_dialog.dart';
+
+import '../../../notifications/show_flush_bar.dart';
+import '../../../utilities/assets.dart';
+
+class PaynymQrPopup extends StatelessWidget {
+  const PaynymQrPopup({
+    Key? key,
+    required this.paynymAccount,
+  }) : super(key: key);
+
+  final PaynymAccount paynymAccount;
+
+  @override
+  Widget build(BuildContext context) {
+    return DesktopDialog(
+      maxWidth: MediaQuery.of(context).size.width - 32,
+      maxHeight: double.infinity,
+      child: Column(
+        children: [
+          Padding(
+            padding: const EdgeInsets.only(
+              left: 24,
+              top: 24,
+              right: 24,
+              bottom: 16,
+            ),
+            child: Row(
+              children: [
+                PayNymBot(
+                  paymentCodeString: paynymAccount.codes.first.code,
+                  size: 32,
+                ),
+                const SizedBox(
+                  width: 12,
+                ),
+                Text(
+                  paynymAccount.nymName,
+                  style: STextStyles.w600_12(context),
+                ),
+              ],
+            ),
+          ),
+          Container(
+            color: Theme.of(context).extension<StackColors>()!.backgroundAppBar,
+            height: 1,
+          ),
+          Padding(
+            padding: const EdgeInsets.only(
+              left: 24,
+              top: 16,
+              right: 24,
+              bottom: 24,
+            ),
+            child: Row(
+              children: [
+                Expanded(
+                  child: ConstrainedBox(
+                    constraints: const BoxConstraints(minHeight: 107),
+                    child: Column(
+                      crossAxisAlignment: CrossAxisAlignment.start,
+                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                      children: [
+                        Text(
+                          "Your PayNym address",
+                          style: STextStyles.infoSmall(context),
+                        ),
+                        const SizedBox(
+                          height: 6,
+                        ),
+                        Text(
+                          paynymAccount.codes.first.code,
+                          style: STextStyles.infoSmall(context).copyWith(
+                            color: Theme.of(context)
+                                .extension<StackColors>()!
+                                .textDark,
+                          ),
+                        ),
+                        const SizedBox(
+                          height: 6,
+                        ),
+                        BlueTextButton(
+                          text: "Copy",
+                          textSize: 10,
+                          onTap: () async {
+                            await Clipboard.setData(
+                              ClipboardData(
+                                text: paynymAccount.codes.first.code,
+                              ),
+                            );
+                            unawaited(
+                              showFloatingFlushBar(
+                                type: FlushBarType.info,
+                                message: "Copied to clipboard",
+                                iconAsset: Assets.svg.copy,
+                                context: context,
+                              ),
+                            );
+                          },
+                        ),
+                      ],
+                    ),
+                  ),
+                ),
+                const SizedBox(
+                  width: 20,
+                ),
+                QrImage(
+                  padding: const EdgeInsets.all(0),
+                  size: 107,
+                  data: paynymAccount.codes.first.code,
+                  foregroundColor:
+                      Theme.of(context).extension<StackColors>()!.textDark,
+                ),
+              ],
+            ),
+          )
+        ],
+      ),
+    );
+  }
+}
diff --git a/lib/pages/paynym/paynym_home_view.dart b/lib/pages/paynym/paynym_home_view.dart
index 4782e2491..76cfc591c 100644
--- a/lib/pages/paynym/paynym_home_view.dart
+++ b/lib/pages/paynym/paynym_home_view.dart
@@ -17,6 +17,8 @@ import 'package:stackwallet/widgets/loading_indicator.dart';
 import 'package:stackwallet/widgets/rounded_white_container.dart';
 import 'package:stackwallet/widgets/toggle.dart';
 
+import 'dialogs/paynym_qr_popup.dart';
+
 class PaynymHomeView extends StatefulWidget {
   const PaynymHomeView({
     Key? key,
@@ -176,7 +178,12 @@ class _PaynymHomeViewState extends State<PaynymHomeView> {
                             .textDark,
                       ),
                       onPressed: () {
-                        // copy to clipboard
+                        showDialog<void>(
+                          context: context,
+                          builder: (context) => PaynymQrPopup(
+                            paynymAccount: widget.nymAccount,
+                          ),
+                        );
                       },
                     ),
                   ),
diff --git a/lib/utilities/text_styles.dart b/lib/utilities/text_styles.dart
index 42a0ba488..8afbf77dd 100644
--- a/lib/utilities/text_styles.dart
+++ b/lib/utilities/text_styles.dart
@@ -591,6 +591,29 @@ class STextStyles {
     }
   }
 
+  static TextStyle w500_12(BuildContext context) {
+    switch (_theme(context).themeType) {
+      case ThemeType.light:
+        return GoogleFonts.inter(
+          color: _theme(context).textDark,
+          fontWeight: FontWeight.w500,
+          fontSize: 12,
+        );
+      case ThemeType.oceanBreeze:
+        return GoogleFonts.inter(
+          color: _theme(context).textDark,
+          fontWeight: FontWeight.w500,
+          fontSize: 12,
+        );
+      case ThemeType.dark:
+        return GoogleFonts.inter(
+          color: _theme(context).textDark,
+          fontWeight: FontWeight.w500,
+          fontSize: 12,
+        );
+    }
+  }
+
   static TextStyle syncPercent(BuildContext context) {
     switch (_theme(context).themeType) {
       case ThemeType.light: