This commit is contained in:
parent
9944f86174
commit
00c47f22e0
|
|
@ -213,6 +213,7 @@ class _GuidePageState extends ConsumerState<GuidePage> {
|
||||||
Widget _buildWelcomePage() {
|
Widget _buildWelcomePage() {
|
||||||
return _WelcomePageContent(
|
return _WelcomePageContent(
|
||||||
onNext: _goToOnboarding,
|
onNext: _goToOnboarding,
|
||||||
|
onExit: _goToOnboarding, // 退出也跳转到 onboarding
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -241,8 +242,12 @@ class _GuidePageState extends ConsumerState<GuidePage> {
|
||||||
/// 欢迎加入页面内容 (第5页)
|
/// 欢迎加入页面内容 (第5页)
|
||||||
class _WelcomePageContent extends StatefulWidget {
|
class _WelcomePageContent extends StatefulWidget {
|
||||||
final VoidCallback onNext;
|
final VoidCallback onNext;
|
||||||
|
final VoidCallback onExit;
|
||||||
|
|
||||||
const _WelcomePageContent({required this.onNext});
|
const _WelcomePageContent({
|
||||||
|
required this.onNext,
|
||||||
|
required this.onExit,
|
||||||
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<_WelcomePageContent> createState() => _WelcomePageContentState();
|
State<_WelcomePageContent> createState() => _WelcomePageContentState();
|
||||||
|
|
@ -252,12 +257,55 @@ class _WelcomePageContentState extends State<_WelcomePageContent> {
|
||||||
bool _hasReferrer = true;
|
bool _hasReferrer = true;
|
||||||
final TextEditingController _referralCodeController = TextEditingController();
|
final TextEditingController _referralCodeController = TextEditingController();
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
// 监听输入框变化以更新按钮状态
|
||||||
|
_referralCodeController.addListener(_onReferralCodeChanged);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
|
_referralCodeController.removeListener(_onReferralCodeChanged);
|
||||||
_referralCodeController.dispose();
|
_referralCodeController.dispose();
|
||||||
super.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 {
|
Future<void> _openQrScanner() async {
|
||||||
final result = await Navigator.of(context).push<String>(
|
final result = await Navigator.of(context).push<String>(
|
||||||
|
|
@ -342,10 +390,7 @@ class _WelcomePageContentState extends State<_WelcomePageContent> {
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: EdgeInsets.only(top: 32.h),
|
padding: EdgeInsets.only(top: 32.h),
|
||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
onTap: () {
|
onTap: widget.onExit,
|
||||||
// 退出向导
|
|
||||||
Navigator.of(context).maybePop();
|
|
||||||
},
|
|
||||||
child: Text(
|
child: Text(
|
||||||
'退出 Exit',
|
'退出 Exit',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
|
|
@ -383,7 +428,7 @@ class _WelcomePageContentState extends State<_WelcomePageContent> {
|
||||||
const Spacer(),
|
const Spacer(),
|
||||||
// 下一步按钮
|
// 下一步按钮
|
||||||
GestureDetector(
|
GestureDetector(
|
||||||
onTap: widget.onNext,
|
onTap: _canProceed ? widget.onNext : null,
|
||||||
child: Container(
|
child: Container(
|
||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
padding: EdgeInsets.symmetric(vertical: 16.h),
|
padding: EdgeInsets.symmetric(vertical: 16.h),
|
||||||
|
|
@ -393,7 +438,9 @@ class _WelcomePageContentState extends State<_WelcomePageContent> {
|
||||||
fontSize: 16.sp,
|
fontSize: 16.sp,
|
||||||
fontWeight: FontWeight.w500,
|
fontWeight: FontWeight.w500,
|
||||||
height: 1.5,
|
height: 1.5,
|
||||||
color: const Color(0xFFD9C8A9),
|
color: _canProceed
|
||||||
|
? const Color(0xFFD4A84B) // 金色 - 可点击
|
||||||
|
: const Color(0xFFCCC5B9), // 灰色 - 不可点击
|
||||||
),
|
),
|
||||||
textAlign: TextAlign.right,
|
textAlign: TextAlign.right,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue