wechat_qr_code_dialog.dart 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import 'dart:ui';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter_screenutil/flutter_screenutil.dart';
  4. import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
  5. import 'package:qr_flutter/qr_flutter.dart';
  6. import '../resource/assets.gen.dart';
  7. import '../resource/colors.gen.dart';
  8. import '../resource/string.gen.dart';
  9. class WechatQrCodeDialog {
  10. static const String _tag = 'WechatQrCodeDialog';
  11. static void show(
  12. {required String qrCodeUrl,
  13. VoidCallback? onDismiss,
  14. VoidCallback? onCloseCallback,
  15. VoidCallback? loadSuccessCallback}) {
  16. SmartDialog.show(
  17. tag: _tag,
  18. onDismiss: onDismiss,
  19. backDismiss: false,
  20. builder: (_) {
  21. return WechatQrCodeView(
  22. qrCodeUrl: qrCodeUrl, onCloseCallback: onCloseCallback);
  23. },
  24. clickMaskDismiss: false);
  25. loadSuccessCallback?.call();
  26. }
  27. static void dismiss() {
  28. SmartDialog.dismiss(tag: _tag);
  29. }
  30. }
  31. class WechatQrCodeView extends Dialog {
  32. final String qrCodeUrl;
  33. VoidCallback? onCloseCallback;
  34. WechatQrCodeView({super.key, required this.qrCodeUrl, this.onCloseCallback});
  35. @override
  36. Widget build(BuildContext context) {
  37. return IntrinsicHeight(
  38. child: Column(
  39. children: [
  40. Container(
  41. padding: EdgeInsets.all(26.w),
  42. decoration: BoxDecoration(
  43. color: Colors.white,
  44. borderRadius: BorderRadius.circular(10.w),
  45. ),
  46. child: Column(
  47. children: [
  48. SizedBox(
  49. width: 220.w,
  50. height: 220.w,
  51. child: QrImageView(
  52. data: qrCodeUrl,
  53. version: QrVersions.auto,
  54. size: 220.w,
  55. backgroundColor: Colors.white,
  56. )),
  57. SizedBox(height: 16.w),
  58. Text(StringName.wechatPayQrCodeTips,
  59. style: TextStyle(fontSize: 14.sp, color: ColorName.black90))
  60. ],
  61. ),
  62. ),
  63. SizedBox(height: 20.w),
  64. GestureDetector(
  65. onTap: () {
  66. onCloseCallback?.call();
  67. WechatQrCodeDialog.dismiss();
  68. },
  69. child: Assets.images.iconMemberRetainClose
  70. .image(width: 32.w, height: 32.w))
  71. ],
  72. ),
  73. );
  74. }
  75. }