import 'dart:async'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import '/common/constants.dart'; import '/components/common_widgets.dart' show CommonElevatedButton; import '/database/hive_database.dart'; import '/models/init_get_it.dart'; import '/models/token_model.dart'; import '/models/user_model.dart'; import '/request/signup_signin.dart'; class WelcomeScreen extends StatefulWidget { const WelcomeScreen({ super.key, this.isLogout, }); final String? isLogout; @override State createState() => _WelcomeScreenState(); } class _WelcomeScreenState extends State { Future _tryLoginUseToken() async { if (widget.isLogout != null) { return 200; } await getIt.get().init(); if (getIt.get().token.isNotEmpty) { EasyLoading.showInfo('自动登录中...'); try { Map res = await signinByToken(); if (res['code'] == 10200) { await getIt.get().updateToken(res['token']); getIt.get().init(res['data']); await HiveDatabase.init(); return 10200; } else { getIt.get().clear(); return 9999; } } catch (e) { return 500; } } else { return 200; } } @override void initState() { super.initState(); _tryLoginUseToken().then((value) { if (value == 10200) { EasyLoading.showSuccess( '登录成功!', duration: const Duration(seconds: 3), dismissOnTap: true, ); context.pushNamed('Chat'); } else if (value == 9999) { EasyLoading.showInfo( '登录状态已过期,请重新登录!', duration: const Duration(seconds: 3), dismissOnTap: true, ); } else if (value == 500) { EasyLoading.showError( '连接服务器失败,请稍后再试!', duration: const Duration(seconds: 3), dismissOnTap: true, ); } else { EasyLoading.dismiss(); } }); } @override Widget build(BuildContext context) { return Scaffold( body: SafeArea( child: Column( children: [ const SizedBox( height: kDefaultPadding, ), Image.asset('assets/images/welcome_image.png'), CommonElevatedButton( onPressed: () => context.pushNamed('SignIn'), text: '登录', ), CommonElevatedButton( onPressed: () => context.pushNamed('SignUp'), text: '注册', color: kSecondaryColor, ), ], ), ), ); } }