precode_controller.dart 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import 'package:flutter/services.dart';
  2. import 'package:get/get.dart';
  3. import 'package:image_gallery_saver_plus/image_gallery_saver_plus.dart';
  4. import 'package:screenshot/screenshot.dart';
  5. import '../../../../config/translations/strings_enum.dart';
  6. import '../../../../utils/device_manager.dart';
  7. import '../../../components/ix_snackbar.dart';
  8. import '../../../routes/app_pages.dart';
  9. import '../widgets/precode_save_dialog.dart';
  10. class PrecodeController extends GetxController {
  11. // Pre Code 数据
  12. final preCode = '673 888 888 999'.obs;
  13. // 是否显示完整代码
  14. final isPreviewMode = false.obs;
  15. // 截图控制器
  16. final screenshotController = ScreenshotController();
  17. // UID
  18. String get uid => DeviceManager.getCacheDeviceId();
  19. // 是否是Premium用户
  20. final isPremium = true.obs;
  21. // 切换预览模式
  22. void togglePreview() {
  23. isPreviewMode.value = !isPreviewMode.value;
  24. }
  25. // 获取显示的代码(隐藏或完整)
  26. String get displayCode {
  27. if (isPreviewMode.value) {
  28. return preCode.value;
  29. } else {
  30. // 隐藏中间部分,只显示前3位和后3位
  31. final parts = preCode.value.split(' ');
  32. if (parts.length >= 3) {
  33. return '${parts[0]} ****** ${parts[parts.length - 1]}';
  34. }
  35. return preCode.value;
  36. }
  37. }
  38. // 复制代码
  39. void copyCode() {
  40. Clipboard.setData(ClipboardData(text: preCode.value));
  41. IXSnackBar.showIXSnackBar(
  42. title: Strings.copied.tr,
  43. message: Strings.copied.tr,
  44. );
  45. }
  46. // 发送到邮箱
  47. void sendToEmail() {
  48. Get.toNamed(Routes.PRECODE_SENDEMAIL);
  49. }
  50. // 保存本地副本 - 显示弹窗
  51. void saveLocalCopy() {
  52. Get.bottomSheet(
  53. PrecodeSaveDialog(controller: this),
  54. isScrollControlled: true,
  55. );
  56. }
  57. // 保存截图到相册
  58. Future<void> saveToGallery() async {
  59. try {
  60. // 截图
  61. final imageBytes = await screenshotController.capture();
  62. if (imageBytes == null) {
  63. IXSnackBar.showIXSnackBar(
  64. title: 'Error',
  65. message: 'Failed to capture screenshot',
  66. );
  67. return;
  68. }
  69. // 保存到相册
  70. final result = await ImageGallerySaverPlus.saveImage(
  71. imageBytes,
  72. quality: 100,
  73. name: 'nomo_precode_${DateTime.now().millisecondsSinceEpoch}',
  74. );
  75. if (result['isSuccess'] == true) {
  76. // 显示成功提示
  77. IXSnackBar.showIXSnackBar(
  78. title: "",
  79. message: "The image has been saved to your local album",
  80. );
  81. } else {
  82. IXSnackBar.showIXErrorSnackBar(
  83. title: 'Error',
  84. message: 'Failed to save image to gallery',
  85. );
  86. }
  87. } catch (e) {
  88. IXSnackBar.showIXErrorSnackBar(
  89. title: 'Error',
  90. message: 'Failed to save: $e',
  91. );
  92. }
  93. }
  94. }