|
|
@@ -1,6 +1,10 @@
|
|
|
import 'package:flutter/material.dart';
|
|
|
import 'package:get/get.dart';
|
|
|
+import 'package:nomo/app/components/ix_snackbar.dart';
|
|
|
+import 'package:uuid/uuid.dart';
|
|
|
|
|
|
+import '../../../../config/translations/strings_enum.dart';
|
|
|
+import '../../../constants/configs.dart';
|
|
|
import '../../../constants/enums.dart';
|
|
|
import '../../../controllers/api_controller.dart';
|
|
|
|
|
|
@@ -20,9 +24,20 @@ class FeedbackController extends GetxController {
|
|
|
// 是否正在提交
|
|
|
final isSubmitting = false.obs;
|
|
|
|
|
|
+ // 输入内容是否有效(用于按钮状态)
|
|
|
+ final _feedbackText = ''.obs;
|
|
|
+ final _emailText = ''.obs;
|
|
|
+
|
|
|
@override
|
|
|
void onInit() {
|
|
|
super.onInit();
|
|
|
+ // 监听输入变化
|
|
|
+ feedbackController.addListener(() {
|
|
|
+ _feedbackText.value = feedbackController.text;
|
|
|
+ });
|
|
|
+ emailController.addListener(() {
|
|
|
+ _emailText.value = emailController.text;
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
@override
|
|
|
@@ -50,50 +65,76 @@ class FeedbackController extends GetxController {
|
|
|
/// 提交反馈
|
|
|
void submitFeedback() async {
|
|
|
if (feedbackController.text.trim().isEmpty) {
|
|
|
- Get.snackbar('提示', '请输入反馈内容');
|
|
|
+ IXSnackBar.showIXErrorSnackBar(
|
|
|
+ title: Strings.error.tr,
|
|
|
+ message: Strings.pleaseEnterFeedback.tr,
|
|
|
+ );
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (emailController.text.trim().isEmpty) {
|
|
|
- Get.snackbar('提示', '请输入邮箱地址');
|
|
|
+ IXSnackBar.showIXErrorSnackBar(
|
|
|
+ title: Strings.error.tr,
|
|
|
+ message: Strings.pleaseEnterEmail.tr,
|
|
|
+ );
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 简单的邮箱格式验证
|
|
|
if (!GetUtils.isEmail(emailController.text.trim())) {
|
|
|
- Get.snackbar('提示', '请输入有效的邮箱地址');
|
|
|
+ IXSnackBar.showIXErrorSnackBar(
|
|
|
+ title: Strings.error.tr,
|
|
|
+ message: Strings.pleaseEnterValidEmail.tr,
|
|
|
+ );
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
+ // 取消输入框焦点,关闭软键盘
|
|
|
+ FocusManager.instance.primaryFocus?.unfocus();
|
|
|
isSubmitting.value = true;
|
|
|
|
|
|
try {
|
|
|
- // 模拟提交过程
|
|
|
- await Future.delayed(const Duration(seconds: 2));
|
|
|
await apiController.uploadApiStatisticsLog([
|
|
|
{
|
|
|
+ "id": const Uuid().v4(),
|
|
|
+ "time": DateTime.now().millisecondsSinceEpoch,
|
|
|
+ "level": LogLevel.info.name,
|
|
|
'module': LogModule.NM_FeedbackLog.name,
|
|
|
- 'feedback': feedbackController.text.trim(),
|
|
|
- 'email': emailController.text.trim(),
|
|
|
+ "category": Configs.productCode,
|
|
|
+ "fields": {
|
|
|
+ 'content': feedbackController.text.trim(),
|
|
|
+ 'email': emailController.text.trim(),
|
|
|
+ },
|
|
|
},
|
|
|
]);
|
|
|
|
|
|
// 提交成功
|
|
|
- Get.snackbar('成功', '反馈已提交,我们会尽快回复您');
|
|
|
+ IXSnackBar.showIXSnackBar(
|
|
|
+ title: Strings.success.tr,
|
|
|
+ message: Strings.feedbackSubmitted.tr,
|
|
|
+ );
|
|
|
|
|
|
// 清空输入框
|
|
|
feedbackController.clear();
|
|
|
emailController.clear();
|
|
|
+
|
|
|
+ // 延迟返回
|
|
|
+ Future.delayed(const Duration(milliseconds: 500), () {
|
|
|
+ Get.back();
|
|
|
+ });
|
|
|
} catch (e) {
|
|
|
- Get.snackbar('错误', '提交失败,请稍后重试');
|
|
|
+ IXSnackBar.showIXErrorSnackBar(
|
|
|
+ title: Strings.error.tr,
|
|
|
+ message: Strings.feedbackSubmitFailed.tr,
|
|
|
+ );
|
|
|
} finally {
|
|
|
isSubmitting.value = false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /// 检查是否可以提交
|
|
|
+ /// 检查是否可以提交(响应式)
|
|
|
bool get canSubmit {
|
|
|
- return feedbackController.text.trim().isNotEmpty &&
|
|
|
- emailController.text.trim().isNotEmpty;
|
|
|
+ // 访问响应式变量以触发 Obx 更新
|
|
|
+ return _feedbackText.value.trim().isNotEmpty &&
|
|
|
+ _emailText.value.trim().isNotEmpty;
|
|
|
}
|
|
|
}
|