feat: 在发送短信前验证推荐码 & 修复按钮响应
前端改进: - 在发送短信验证码之前验证推荐码是否有效 - 新增 verifyReferralCode() 方法到 AccountService - 调用后端 GET /user/by-referral-code/:code API - 手机号输入时立即更新按钮状态(更及时的用户反馈) 流程优化: - 推荐码验证提前到短信发送前,避免用户输入验证码后才发现推荐码无效 - 按钮在手机号输入时即时响应,无需额外点击或失焦 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
00996bf160
commit
8519b9e608
|
|
@ -1411,6 +1411,31 @@ class AccountService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// 验证推荐码是否存在
|
||||||
|
///
|
||||||
|
/// [referralCode] - 推荐码
|
||||||
|
/// 返回用户信息(如果存在),否则抛出异常
|
||||||
|
Future<Map<String, dynamic>> verifyReferralCode(String referralCode) async {
|
||||||
|
debugPrint('$_tag verifyReferralCode() - 验证推荐码: $referralCode');
|
||||||
|
|
||||||
|
try {
|
||||||
|
final response = await _apiClient.get(
|
||||||
|
'/user/by-referral-code/$referralCode',
|
||||||
|
);
|
||||||
|
debugPrint('$_tag verifyReferralCode() - 推荐码有效');
|
||||||
|
|
||||||
|
final responseData = response.data as Map<String, dynamic>;
|
||||||
|
return responseData['data'] as Map<String, dynamic>? ?? responseData;
|
||||||
|
} on ApiException catch (e) {
|
||||||
|
debugPrint('$_tag verifyReferralCode() - 推荐码无效: $e');
|
||||||
|
throw ApiException('推荐码不存在或无效');
|
||||||
|
} catch (e, stackTrace) {
|
||||||
|
debugPrint('$_tag verifyReferralCode() - 未知异常: $e');
|
||||||
|
debugPrint('$_tag verifyReferralCode() - 堆栈: $stackTrace');
|
||||||
|
throw ApiException('推荐码验证失败: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// 发送短信验证码
|
/// 发送短信验证码
|
||||||
///
|
///
|
||||||
/// [phoneNumber] - 手机号(中国大陆格式:1开头,11位)
|
/// [phoneNumber] - 手机号(中国大陆格式:1开头,11位)
|
||||||
|
|
|
||||||
|
|
@ -76,12 +76,12 @@ class _PhoneRegisterPageState extends ConsumerState<PhoneRegisterPage> {
|
||||||
}
|
}
|
||||||
|
|
||||||
void _onPhoneChanged() {
|
void _onPhoneChanged() {
|
||||||
// 清除错误信息
|
// 手机号变化时更新按钮状态
|
||||||
if (_errorMessage != null) {
|
setState(() {
|
||||||
setState(() {
|
if (_errorMessage != null) {
|
||||||
_errorMessage = null;
|
_errorMessage = null;
|
||||||
});
|
}
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 验证手机号格式
|
/// 验证手机号格式
|
||||||
|
|
@ -111,6 +111,14 @@ class _PhoneRegisterPageState extends ConsumerState<PhoneRegisterPage> {
|
||||||
try {
|
try {
|
||||||
final accountService = ref.read(accountServiceProvider);
|
final accountService = ref.read(accountServiceProvider);
|
||||||
|
|
||||||
|
// 验证推荐码(如果有)
|
||||||
|
if (widget.inviterReferralCode != null &&
|
||||||
|
widget.inviterReferralCode!.isNotEmpty) {
|
||||||
|
debugPrint('[PhoneRegisterPage] 验证推荐码: ${widget.inviterReferralCode}');
|
||||||
|
await accountService.verifyReferralCode(widget.inviterReferralCode!);
|
||||||
|
debugPrint('[PhoneRegisterPage] 推荐码验证通过');
|
||||||
|
}
|
||||||
|
|
||||||
// 发送验证码
|
// 发送验证码
|
||||||
debugPrint('[PhoneRegisterPage] 发送验证码...');
|
debugPrint('[PhoneRegisterPage] 发送验证码...');
|
||||||
await accountService.sendSmsCode(phone, SmsCodeType.register);
|
await accountService.sendSmsCode(phone, SmsCodeType.register);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue