You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
3.1 KiB
114 lines
3.1 KiB
import 'dart:async';
|
|
import 'package:get/get.dart';
|
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
|
import '../../network/user_api.dart';
|
|
import '../global.dart';
|
|
|
|
class PhoneController extends GetxController {
|
|
late UserApi _userApi;
|
|
final phone = ''.obs;
|
|
// 手机号输入
|
|
final phoneNumber = ''.obs;
|
|
// 验证码输入
|
|
final verificationCode = ''.obs;
|
|
// 是否正在发送验证码
|
|
final isSendingCode = false.obs;
|
|
// 倒计时秒数
|
|
final countdownSeconds = 0.obs;
|
|
// 是否正在登录中
|
|
final isLoggingIn = false.obs;
|
|
final tabIndex = 0.obs;
|
|
|
|
@override
|
|
void onInit() {
|
|
super.onInit();
|
|
// 从全局依赖中获取UserApi
|
|
_userApi = Get.find<UserApi>();
|
|
phone.value = GlobalData().userData!.phone!;
|
|
}
|
|
|
|
// 获取验证码
|
|
Future<void> getVerificationCode() async {
|
|
if (countdownSeconds.value > 0) {
|
|
return;
|
|
}
|
|
// 验证手机号格式
|
|
if (phoneNumber.value.isEmpty || phoneNumber.value.length != 11) {
|
|
SmartDialog.showToast('请输入正确的手机号');
|
|
return;
|
|
}
|
|
isSendingCode.value = true;
|
|
try {
|
|
// 构建请求参数
|
|
final params = {
|
|
'purpose': 3, // 认证
|
|
'verifiableAccount': phoneNumber.value,
|
|
'verifiableAccountType': 1, // 手机
|
|
};
|
|
// 调用UserApi中的验证码接口
|
|
final response = await _userApi.getVerificationCode(params);
|
|
// 处理响应
|
|
if (response.data.isSuccess) {
|
|
// 生产环境移除打印,可考虑使用正式的日志框架
|
|
SmartDialog.showToast('验证码发送成功');
|
|
// 开始倒计时
|
|
countdownSeconds.value = 60;
|
|
startCountdown();
|
|
} else {
|
|
SmartDialog.showToast(response.data.message);
|
|
}
|
|
} catch (e) {
|
|
SmartDialog.showToast('网络请求失败,请重试');
|
|
} finally {
|
|
isSendingCode.value = false;
|
|
}
|
|
}
|
|
|
|
// 开始倒计时
|
|
void startCountdown() {
|
|
Future.delayed(const Duration(seconds: 1), () {
|
|
if (countdownSeconds.value > 0) {
|
|
countdownSeconds.value--;
|
|
startCountdown();
|
|
} else {
|
|
isSendingCode.value = false;
|
|
}
|
|
});
|
|
}
|
|
|
|
Future<void> changePhone() async {
|
|
if(isSendingCode.value){
|
|
return;
|
|
}
|
|
if (phoneNumber.value.isEmpty) {
|
|
SmartDialog.showToast('请输入手机号');
|
|
return;
|
|
}
|
|
if (verificationCode.value.isEmpty) {
|
|
SmartDialog.showToast('请输入验证码');
|
|
return;
|
|
}
|
|
isSendingCode.value = true;
|
|
try {
|
|
// 调用登录接口
|
|
SmartDialog.showLoading(msg: '处理中');
|
|
final param = { 'phone': phoneNumber.value, 'captcha': verificationCode.value};
|
|
final response = await _userApi.updatePhone(param);
|
|
// 处理响应
|
|
if (response.data.isSuccess) {
|
|
GlobalData().userData!.phone = phoneNumber.value;
|
|
SmartDialog.showToast('更换成功');
|
|
Get.back(result: 1);
|
|
} else {
|
|
SmartDialog.showToast(response.data.message);
|
|
}
|
|
} catch (e) {
|
|
SmartDialog.showToast('网络请求失败,请检查网络连接');
|
|
} finally {
|
|
SmartDialog.dismiss();
|
|
isSendingCode.value = true;
|
|
}
|
|
}
|
|
|
|
}
|
|
|