This commit is contained in:
Developer 2025-12-01 19:33:05 -08:00
parent 9944f86174
commit 00c47f22e0
1 changed files with 54 additions and 7 deletions

View File

@ -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,
),