From 9983222f4c02b8b2bf3dd67e852a597781a3076e Mon Sep 17 00:00:00 2001 From: htylight Date: Sun, 17 Mar 2024 01:49:08 +0800 Subject: [PATCH] optimize auto login --- lib/router/router.dart | 34 ++---- lib/screens/chat/chat_screen.dart | 2 +- .../more/setting_screen/setting_screen.dart | 2 +- lib/screens/welcome/welcome_screen.dart | 104 ++++++++++-------- 4 files changed, 69 insertions(+), 73 deletions(-) diff --git a/lib/router/router.dart b/lib/router/router.dart index 4c4d2e7..7fee65d 100755 --- a/lib/router/router.dart +++ b/lib/router/router.dart @@ -31,27 +31,9 @@ final GoRouter router = GoRouter( GoRoute( path: '/welcome', name: 'Welcome', - builder: (BuildContext context, GoRouterState state) => - const WelcomeScreen(), - redirect: (context, state) async { - await getIt.get().init(); - if (getIt.get().token.isNotEmpty) { - print(1111111); - try { - Map res = await signinByToken(); - if (res['code'] == 10200) { - await getIt.get().updateToken(res['token']); - getIt.get().init(res['data']); - await HiveDatabase.init(); - return '/chat'; - } else { - return null; - } - } catch (e) { - return null; - } - } - return null; + builder: (BuildContext context, GoRouterState state) { + String? isLogout = state.uri.queryParameters['isLogout']; + return WelcomeScreen(isLogout: isLogout); }, ), GoRoute( @@ -63,10 +45,12 @@ final GoRouter router = GoRouter( child: const SignupScreen(), transitionDuration: const Duration(milliseconds: 200), reverseTransitionDuration: const Duration(milliseconds: 200), - transitionsBuilder: (BuildContext context, - Animation animation, - Animation secondaryAnimation, - Widget child) { + transitionsBuilder: ( + BuildContext context, + Animation animation, + Animation secondaryAnimation, + Widget child, + ) { const begin = Offset(1.0, 0.0); const end = Offset.zero; final tween = Tween(begin: begin, end: end); diff --git a/lib/screens/chat/chat_screen.dart b/lib/screens/chat/chat_screen.dart index dddaeb5..000e013 100755 --- a/lib/screens/chat/chat_screen.dart +++ b/lib/screens/chat/chat_screen.dart @@ -69,7 +69,7 @@ class _ChatScreenState extends State with GetItStateMixin { await _getUnreceivedMsg(userId); } - return Future(() => true); + return true; } Future _getUnreceivedMsg(String userId) async { diff --git a/lib/screens/more/setting_screen/setting_screen.dart b/lib/screens/more/setting_screen/setting_screen.dart index df6e6c3..0c59f69 100644 --- a/lib/screens/more/setting_screen/setting_screen.dart +++ b/lib/screens/more/setting_screen/setting_screen.dart @@ -36,7 +36,7 @@ class SettingScreen extends StatelessWidget { onPressed: () async { await getIt.get().clear(); // ignore: use_build_context_synchronously - context.go('/welcome'); + context.goNamed('Welcome', queryParameters: {'isLogout': '1'}); // ignore: use_build_context_synchronously Timer( const Duration(milliseconds: 200), diff --git a/lib/screens/welcome/welcome_screen.dart b/lib/screens/welcome/welcome_screen.dart index 107ff65..1251133 100755 --- a/lib/screens/welcome/welcome_screen.dart +++ b/lib/screens/welcome/welcome_screen.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; @@ -12,7 +14,12 @@ import '../../models/user_model.dart'; import '../../request/signup_signin.dart'; class WelcomeScreen extends StatefulWidget { - const WelcomeScreen({super.key}); + const WelcomeScreen({ + super.key, + this.isLogout, + }); + + final String? isLogout; @override State createState() => _WelcomeScreenState(); @@ -20,8 +27,12 @@ class WelcomeScreen extends StatefulWidget { 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) { @@ -41,55 +52,56 @@ class _WelcomeScreenState extends State { } } + @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: FutureBuilder( - future: _tryLoginUseToken(), - builder: (BuildContext context, AsyncSnapshot snapshot) { - if (snapshot.hasData) { - int? data = snapshot.data; - if (data == 10200) { - EasyLoading.showSuccess( - '登录成功!', - duration: const Duration(milliseconds: 500), - ); - context.pushNamed('Chat'); - } else if (data == 9999) { - EasyLoading.showInfo( - '登录状态已过期,请重新登录!', - duration: const Duration(milliseconds: 500), - ); - } else if (data == 500) { - EasyLoading.showError( - '连接服务器失败,请稍后再试!', - duration: const Duration(milliseconds: 500), - ); - } else { - EasyLoading.dismiss(); - } - } else { - EasyLoading.show(status: '自动登录中...'); - } - return Column( - children: [ - const SizedBox( - height: kDefaultPadding, - ), - Image.asset('assets/images/welcome_image.png'), - CommonElevatedButton( - onPressed: () => context.push('/signin'), - text: '登录', - ), - CommonElevatedButton( - onPressed: () => context.push('/signup'), - text: '注册', - color: kSecondaryColor, - ), - ], - ); - }), + 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, + ), + ], + ), ), ); }