rwadurian/frontend/mining-app/lib/presentation/pages/splash/splash_page.dart

107 lines
2.8 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import '../../../core/router/routes.dart';
import '../../providers/user_providers.dart';
class SplashPage extends ConsumerStatefulWidget {
const SplashPage({super.key});
@override
ConsumerState<SplashPage> createState() => _SplashPageState();
}
class _SplashPageState extends ConsumerState<SplashPage> {
// 设计色彩 - 与导航页面统一
static const Color _orange = Color(0xFFFF6B00);
static const Color _darkText = Color(0xFF1F2937);
static const Color _grayText = Color(0xFF6B7280);
static const Color _serenade = Color(0xFFFFF7ED);
@override
void initState() {
super.initState();
_initialize();
}
Future<void> _initialize() async {
await Future.delayed(const Duration(seconds: 2));
if (!mounted) return;
// 检查用户登录状态
final userState = ref.read(userNotifierProvider);
if (userState.isLoggedIn) {
// 已登录尝试刷新token
try {
await ref.read(userNotifierProvider.notifier).refreshTokenIfNeeded();
if (mounted) {
context.go(Routes.contribution);
}
} catch (e) {
// token刷新失败跳转到登录页
if (mounted) {
context.go(Routes.login);
}
}
} else {
// 未登录,跳转到登录页
context.go(Routes.login);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
width: 100,
height: 100,
decoration: BoxDecoration(
color: _serenade,
borderRadius: BorderRadius.circular(24),
),
child: const Icon(
Icons.eco,
size: 60,
color: _orange,
),
),
const SizedBox(height: 24),
const Text(
'榴莲生态',
style: TextStyle(
color: _darkText,
fontSize: 28,
fontWeight: FontWeight.bold,
),
),
const SizedBox(height: 8),
const Text(
'绿色财富 共享未来',
style: TextStyle(
color: _grayText,
fontSize: 16,
),
),
const SizedBox(height: 48),
const SizedBox(
width: 24,
height: 24,
child: CircularProgressIndicator(
color: _orange,
strokeWidth: 2,
),
),
],
),
),
);
}
}