rwadurian/frontend/mining-app/lib/main.dart

74 lines
1.9 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'core/di/injection.dart';
import 'core/router/app_router.dart';
import 'core/constants/app_colors.dart';
import 'core/network/api_client.dart';
import 'core/router/routes.dart';
import 'presentation/providers/user_providers.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 Hive
await Hive.initFlutter();
// 初始化依赖注入
await configureDependencies();
runApp(const ProviderScope(child: MiningApp()));
}
class MiningApp extends ConsumerStatefulWidget {
const MiningApp({super.key});
@override
ConsumerState<MiningApp> createState() => _MiningAppState();
}
class _MiningAppState extends ConsumerState<MiningApp> {
@override
void initState() {
super.initState();
// 设置 401 全局处理回调
ApiClient.onUnauthorized = _handleUnauthorized;
}
void _handleUnauthorized() {
// 清除用户状态
ref.read(userNotifierProvider.notifier).logout();
// 跳转到登录页
final router = ref.read(appRouterProvider);
router.go(Routes.login);
}
@override
Widget build(BuildContext context) {
final router = ref.watch(appRouterProvider);
return MaterialApp.router(
title: '榴莲挖矿',
debugShowCheckedModeBanner: false,
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(
seedColor: AppColors.primary,
brightness: Brightness.light,
),
useMaterial3: true,
appBarTheme: const AppBarTheme(
centerTitle: true,
elevation: 0,
),
cardTheme: const CardThemeData(
elevation: 2,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(12)),
),
),
),
routerConfig: router,
);
}
}