109 lines
2.8 KiB
Dart
109 lines
2.8 KiB
Dart
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<WelcomeScreen> createState() => _WelcomeScreenState();
|
|
}
|
|
|
|
class _WelcomeScreenState extends State<WelcomeScreen> {
|
|
Future<int> _tryLoginUseToken() async {
|
|
if (widget.isLogout != null) {
|
|
return 200;
|
|
}
|
|
await getIt.get<Token>().init();
|
|
if (getIt.get<Token>().token.isNotEmpty) {
|
|
EasyLoading.showInfo('自动登录中...');
|
|
try {
|
|
Map<String, dynamic> res = await signinByToken();
|
|
if (res['code'] == 10200) {
|
|
await getIt.get<Token>().updateToken(res['token']);
|
|
getIt.get<UserAccount>().init(res['data']);
|
|
await HiveDatabase.init();
|
|
return 10200;
|
|
} else {
|
|
getIt.get<Token>().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,
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|