donation_dialog.dart 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter/services.dart';
  3. import 'package:overlay_support/overlay_support.dart';
  4. const HONG_BAO = "打开支付宝首页搜“621412820”领红包,领到大红包的小伙伴赶紧使用哦!";
  5. class DonationDialog extends StatelessWidget {
  6. @override
  7. Widget build(BuildContext context) {
  8. return SimpleDialog(
  9. contentPadding:
  10. const EdgeInsets.only(top: 8, left: 8, right: 8, bottom: 4),
  11. children: <Widget>[
  12. SizedBox(width: MediaQuery.of(context).size.width),
  13. Container(
  14. padding: const EdgeInsets.all(16), child: Text("开发不易,赞助一下开发者。")),
  15. _ActionTile(
  16. text: "微信捐赠",
  17. onTap: () async {
  18. await showDialog(
  19. context: context,
  20. builder: (context) => _ReceiptDialog.weChat());
  21. Navigator.pop(context);
  22. },
  23. ),
  24. _ActionTile(
  25. text: "支付宝捐赠",
  26. onTap: () async {
  27. await showDialog(
  28. context: context,
  29. builder: (context) => _ReceiptDialog.aliPay());
  30. Navigator.pop(context);
  31. },
  32. ),
  33. _ActionTile(
  34. text: "支付宝红包码",
  35. onTap: () async {
  36. await Clipboard.setData(ClipboardData(text: HONG_BAO));
  37. final data = await Clipboard.getData(Clipboard.kTextPlain);
  38. if (data.text == HONG_BAO) {
  39. showSimpleNotification(Text("已复制到粘贴板 (≧y≦*)"));
  40. } else {
  41. await showDialog(
  42. context: context,
  43. builder: (context) => _SingleFieldDialog(text: HONG_BAO));
  44. }
  45. Navigator.of(context).pop();
  46. },
  47. ),
  48. ],
  49. );
  50. }
  51. }
  52. class _SingleFieldDialog extends StatelessWidget {
  53. final String text;
  54. const _SingleFieldDialog({Key key, @required this.text}) : super(key: key);
  55. @override
  56. Widget build(BuildContext context) {
  57. return Dialog(
  58. child: Container(
  59. padding: EdgeInsets.all(16),
  60. child: TextField(
  61. maxLines: 5,
  62. autofocus: true,
  63. controller: TextEditingController(text: text),
  64. ),
  65. ),
  66. );
  67. }
  68. }
  69. class _ReceiptDialog extends StatelessWidget {
  70. final String image;
  71. const _ReceiptDialog({Key key, this.image}) : super(key: key);
  72. const _ReceiptDialog.weChat() : this(image: "assets/wechat.png");
  73. const _ReceiptDialog.aliPay() : this(image: "assets/alipay.jpg");
  74. static final borderRadius = BorderRadius.circular(5);
  75. @override
  76. Widget build(BuildContext context) {
  77. return Dialog(
  78. shape: RoundedRectangleBorder(borderRadius: borderRadius),
  79. child: ClipRRect(borderRadius: borderRadius, child: Image.asset(image)),
  80. );
  81. }
  82. }
  83. class _ActionTile extends StatelessWidget {
  84. final VoidCallback onTap;
  85. final String text;
  86. const _ActionTile({Key key, @required this.onTap, @required this.text})
  87. : super(key: key);
  88. @override
  89. Widget build(BuildContext context) {
  90. return InkWell(
  91. onTap: onTap,
  92. child: Container(
  93. height: 40,
  94. child: Row(
  95. children: <Widget>[
  96. SizedBox(width: 16),
  97. Text(text, style: TextStyle(fontWeight: FontWeight.bold)),
  98. ],
  99. ),
  100. ),
  101. );
  102. }
  103. }