feedback_controller.dart 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import 'package:flutter/material.dart';
  2. import 'package:get/get.dart';
  3. import '../../../constants/enums.dart';
  4. import '../../../controllers/api_controller.dart';
  5. class FeedbackController extends GetxController {
  6. final apiController = Get.find<ApiController>();
  7. // 反馈内容控制器
  8. final feedbackController = TextEditingController();
  9. // 邮箱控制器
  10. final emailController = TextEditingController();
  11. // 反馈内容焦点
  12. final feedbackFocusNode = FocusNode();
  13. // 邮箱焦点
  14. final emailFocusNode = FocusNode();
  15. // 是否正在提交
  16. final isSubmitting = false.obs;
  17. @override
  18. void onInit() {
  19. super.onInit();
  20. }
  21. @override
  22. void onClose() {
  23. feedbackController.dispose();
  24. emailController.dispose();
  25. feedbackFocusNode.dispose();
  26. emailFocusNode.dispose();
  27. super.onClose();
  28. }
  29. void onBackPressed() {
  30. // 判断软键盘是否弹出
  31. if (feedbackFocusNode.hasFocus || emailFocusNode.hasFocus) {
  32. FocusManager.instance.primaryFocus?.unfocus();
  33. // 延迟100毫秒后关闭页面
  34. Future.delayed(const Duration(milliseconds: 250), () {
  35. Get.back();
  36. });
  37. } else {
  38. Get.back();
  39. }
  40. }
  41. /// 提交反馈
  42. void submitFeedback() async {
  43. if (feedbackController.text.trim().isEmpty) {
  44. Get.snackbar('提示', '请输入反馈内容');
  45. return;
  46. }
  47. if (emailController.text.trim().isEmpty) {
  48. Get.snackbar('提示', '请输入邮箱地址');
  49. return;
  50. }
  51. // 简单的邮箱格式验证
  52. if (!GetUtils.isEmail(emailController.text.trim())) {
  53. Get.snackbar('提示', '请输入有效的邮箱地址');
  54. return;
  55. }
  56. isSubmitting.value = true;
  57. try {
  58. // 模拟提交过程
  59. await Future.delayed(const Duration(seconds: 2));
  60. await apiController.uploadApiStatisticsLog([
  61. {
  62. 'module': LogModule.NM_FeedbackLog.name,
  63. 'feedback': feedbackController.text.trim(),
  64. 'email': emailController.text.trim(),
  65. },
  66. ]);
  67. // 提交成功
  68. Get.snackbar('成功', '反馈已提交,我们会尽快回复您');
  69. // 清空输入框
  70. feedbackController.clear();
  71. emailController.clear();
  72. } catch (e) {
  73. Get.snackbar('错误', '提交失败,请稍后重试');
  74. } finally {
  75. isSubmitting.value = false;
  76. }
  77. }
  78. /// 检查是否可以提交
  79. bool get canSubmit {
  80. return feedbackController.text.trim().isNotEmpty &&
  81. emailController.text.trim().isNotEmpty;
  82. }
  83. }