feat: 在向导页添加推荐码API验证

在用户点击"继续"按钮时,调用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:
hailin 2025-12-21 05:47:02 -08:00
parent a188d7629f
commit 2a5cb0d2ec
1 changed files with 40 additions and 13 deletions

View File

@ -343,22 +343,49 @@ class _WelcomePageContentState extends ConsumerState<_WelcomePageContent> {
Future<void> _saveReferralCodeAndProceed() async {
if (!_canProceed) return;
//
final inviterCode = _referralCodeController.text.trim();
final secureStorage = ref.read(secureStorageProvider);
await secureStorage.write(
key: StorageKeys.inviterReferralCode,
value: inviterCode,
);
debugPrint('[GuidePage] 保存邀请人推荐码: $inviterCode');
if (!mounted) return;
// API验证推荐码是否有效
try {
final accountService = ref.read(accountServiceProvider);
final isValid = await accountService.verifyReferralCode(inviterCode);
//
context.push(
RoutePaths.phoneRegister,
extra: PhoneRegisterParams(inviterReferralCode: inviterCode),
);
if (!isValid) {
if (!mounted) return;
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('推荐码不存在或已失效'),
backgroundColor: Colors.redAccent,
),
);
return;
}
//
final secureStorage = ref.read(secureStorageProvider);
await secureStorage.write(
key: StorageKeys.inviterReferralCode,
value: inviterCode,
);
debugPrint('[GuidePage] 保存邀请人推荐码: $inviterCode');
if (!mounted) return;
//
context.push(
RoutePaths.phoneRegister,
extra: PhoneRegisterParams(inviterReferralCode: inviterCode),
);
} catch (e) {
debugPrint('[GuidePage] 验证推荐码失败: $e');
if (!mounted) return;
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('网络错误,请稍后重试'),
backgroundColor: Colors.redAccent,
),
);
}
}
///