This commit is contained in:
parent
9944f86174
commit
00c47f22e0
|
|
@ -213,6 +213,7 @@ class _GuidePageState extends ConsumerState<GuidePage> {
|
|||
Widget _buildWelcomePage() {
|
||||
return _WelcomePageContent(
|
||||
onNext: _goToOnboarding,
|
||||
onExit: _goToOnboarding, // 退出也跳转到 onboarding
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -241,8 +242,12 @@ class _GuidePageState extends ConsumerState<GuidePage> {
|
|||
/// 欢迎加入页面内容 (第5页)
|
||||
class _WelcomePageContent extends StatefulWidget {
|
||||
final VoidCallback onNext;
|
||||
final VoidCallback onExit;
|
||||
|
||||
const _WelcomePageContent({required this.onNext});
|
||||
const _WelcomePageContent({
|
||||
required this.onNext,
|
||||
required this.onExit,
|
||||
});
|
||||
|
||||
@override
|
||||
State<_WelcomePageContent> createState() => _WelcomePageContentState();
|
||||
|
|
@ -252,12 +257,55 @@ class _WelcomePageContentState extends State<_WelcomePageContent> {
|
|||
bool _hasReferrer = true;
|
||||
final TextEditingController _referralCodeController = TextEditingController();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
// 监听输入框变化以更新按钮状态
|
||||
_referralCodeController.addListener(_onReferralCodeChanged);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_referralCodeController.removeListener(_onReferralCodeChanged);
|
||||
_referralCodeController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
/// 输入框内容变化时刷新UI
|
||||
void _onReferralCodeChanged() {
|
||||
setState(() {});
|
||||
}
|
||||
|
||||
/// 验证推荐码是否有效
|
||||
/// 支持: 纯推荐码(至少3个字符) 或 合法URL
|
||||
bool _isValidReferralCode(String code) {
|
||||
final trimmed = code.trim();
|
||||
if (trimmed.isEmpty) return false;
|
||||
|
||||
// 如果是URL格式,检查是否能解析
|
||||
if (trimmed.startsWith('http://') || trimmed.startsWith('https://')) {
|
||||
try {
|
||||
final uri = Uri.parse(trimmed);
|
||||
// URL必须有路径或查询参数
|
||||
return uri.pathSegments.isNotEmpty || uri.queryParameters.isNotEmpty;
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 纯推荐码至少3个字符
|
||||
return trimmed.length >= 3;
|
||||
}
|
||||
|
||||
/// 判断按钮是否可点击
|
||||
bool get _canProceed {
|
||||
// 如果选择"没有推荐人",按钮可点击
|
||||
if (!_hasReferrer) return true;
|
||||
|
||||
// 如果选择"有推荐人",需要填写有效的推荐码
|
||||
return _isValidReferralCode(_referralCodeController.text);
|
||||
}
|
||||
|
||||
/// 打开二维码扫描页面
|
||||
Future<void> _openQrScanner() async {
|
||||
final result = await Navigator.of(context).push<String>(
|
||||
|
|
@ -342,10 +390,7 @@ class _WelcomePageContentState extends State<_WelcomePageContent> {
|
|||
child: Padding(
|
||||
padding: EdgeInsets.only(top: 32.h),
|
||||
child: GestureDetector(
|
||||
onTap: () {
|
||||
// 退出向导
|
||||
Navigator.of(context).maybePop();
|
||||
},
|
||||
onTap: widget.onExit,
|
||||
child: Text(
|
||||
'退出 Exit',
|
||||
style: TextStyle(
|
||||
|
|
@ -383,7 +428,7 @@ class _WelcomePageContentState extends State<_WelcomePageContent> {
|
|||
const Spacer(),
|
||||
// 下一步按钮
|
||||
GestureDetector(
|
||||
onTap: widget.onNext,
|
||||
onTap: _canProceed ? widget.onNext : null,
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
padding: EdgeInsets.symmetric(vertical: 16.h),
|
||||
|
|
@ -393,7 +438,9 @@ class _WelcomePageContentState extends State<_WelcomePageContent> {
|
|||
fontSize: 16.sp,
|
||||
fontWeight: FontWeight.w500,
|
||||
height: 1.5,
|
||||
color: const Color(0xFFD9C8A9),
|
||||
color: _canProceed
|
||||
? const Color(0xFFD4A84B) // 金色 - 可点击
|
||||
: const Color(0xFFCCC5B9), // 灰色 - 不可点击
|
||||
),
|
||||
textAlign: TextAlign.right,
|
||||
),
|
||||
|
|
|
|||
Loading…
Reference in New Issue