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位)
|
||||
|
|
|
|||
|
|
@ -76,12 +76,12 @@ class _PhoneRegisterPageState extends ConsumerState<PhoneRegisterPage> {
|
|||
}
|
||||
|
||||
void _onPhoneChanged() {
|
||||
// 清除错误信息
|
||||
if (_errorMessage != null) {
|
||||
setState(() {
|
||||
// 手机号变化时更新按钮状态
|
||||
setState(() {
|
||||
if (_errorMessage != null) {
|
||||
_errorMessage = null;
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/// 验证手机号格式
|
||||
|
|
@ -111,6 +111,14 @@ class _PhoneRegisterPageState extends ConsumerState<PhoneRegisterPage> {
|
|||
try {
|
||||
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] 发送验证码...');
|
||||
await accountService.sendSmsCode(phone, SmsCodeType.register);
|
||||
|
|
|
|||
Loading…
Reference in New Issue