add qr dialog for mobile

This commit is contained in:
sneurlax 2023-04-06 14:13:27 -05:00
parent 6f3691625a
commit d91df1165f
2 changed files with 139 additions and 3 deletions

View file

@ -57,6 +57,7 @@ import 'package:stackwallet/widgets/custom_buttons/app_bar_icon_button.dart';
import 'package:stackwallet/widgets/custom_buttons/blue_text_button.dart';
import 'package:stackwallet/widgets/custom_loading_overlay.dart';
import 'package:stackwallet/widgets/loading_indicator.dart';
import 'package:stackwallet/widgets/qr_dialog.dart';
import 'package:stackwallet/widgets/stack_dialog.dart';
import 'package:stackwallet/widgets/wallet_navigation_bar/components/icons/buy_nav_icon.dart';
import 'package:stackwallet/widgets/wallet_navigation_bar/components/icons/coin_control_nav_icon.dart';
@ -950,9 +951,10 @@ class _WalletViewState extends ConsumerState<WalletView> {
showDialog<dynamic>(
barrierDismissible: true,
context: context,
builder: (_) => StackDialog(
builder: (_) => QrDialog(
title: "Wallet xPub",
message: xpub,
// message: xpub,
qr: xpub,
leftButton: TextButton(
style: Theme.of(context)
.extension<StackColors>()!
@ -961,7 +963,7 @@ class _WalletViewState extends ConsumerState<WalletView> {
await _copy(xpub);
},
child: Text(
"Copy to clipboard",
"Copy",
style: STextStyles.button(context).copyWith(
color: Theme.of(context)
.extension<StackColors>()!

134
lib/widgets/qr_dialog.dart Normal file
View file

@ -0,0 +1,134 @@
import 'package:flutter/material.dart';
import 'package:qr_flutter/qr_flutter.dart';
import 'package:stackwallet/utilities/text_styles.dart';
import 'package:stackwallet/utilities/theme/stack_colors.dart';
import 'package:stackwallet/utilities/util.dart';
class QrDialogBase extends StatelessWidget {
const QrDialogBase({
Key? key,
this.child,
this.padding = const EdgeInsets.all(24),
}) : super(key: key);
final EdgeInsets padding;
final Widget? child;
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(16),
child: Column(
mainAxisAlignment:
!Util.isDesktop ? MainAxisAlignment.end : MainAxisAlignment.center,
children: [
Flexible(
child: SingleChildScrollView(
child: Material(
borderRadius: BorderRadius.circular(
20,
),
child: Container(
decoration: BoxDecoration(
color: Theme.of(context).extension<StackColors>()!.popupBG,
borderRadius: BorderRadius.circular(
20,
),
),
child: Padding(
padding: padding,
child: child,
),
),
),
),
),
],
),
);
}
}
class QrDialog extends StatelessWidget {
const QrDialog({
Key? key,
this.leftButton,
this.rightButton,
this.icon,
required this.title,
this.message,
this.qr,
}) : super(key: key);
final Widget? leftButton;
final Widget? rightButton;
final Widget? icon;
final String title;
final String? message;
final String? qr;
@override
Widget build(BuildContext context) {
return QrDialogBase(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Flexible(
child: Text(
title,
style: STextStyles.pageTitleH2(context),
),
),
icon != null ? icon! : Container(),
],
),
if (message != null)
const SizedBox(
height: 8,
),
if (message != null)
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
message!,
style: STextStyles.smallMed14(context),
),
],
),
if (qr != null)
QrImage(
data: qr!,
size: 300,
foregroundColor:
Theme.of(context).extension<StackColors>()!.accentColorDark,
),
if (leftButton != null || rightButton != null)
const SizedBox(
height: 20,
),
if (leftButton != null || rightButton != null)
Row(
children: [
leftButton == null
? const Spacer()
: Expanded(child: leftButton!),
const SizedBox(
width: 8,
),
rightButton == null
? const Spacer()
: Expanded(child: rightButton!),
],
)
],
),
);
}
}