159 lines
5.0 KiB
Dart
159 lines
5.0 KiB
Dart
import 'dart:convert';
|
||
|
||
import 'package:flutter/material.dart';
|
||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||
import 'package:get/get.dart';
|
||
import 'package:school_asignment_app/common/job/user_info.dart';
|
||
import 'package:school_asignment_app/common/job/user_info_detail.dart';
|
||
import 'package:school_asignment_app/common/mixins/request_tool_mixin.dart';
|
||
import 'package:school_asignment_app/common/store/app_storage_key.dart';
|
||
import 'package:school_asignment_app/common/store/user_store.dart';
|
||
import 'package:school_asignment_app/common/utils/toast_utils.dart';
|
||
import 'package:school_asignment_app/page/home_page/children/my_info.dart';
|
||
import 'package:school_asignment_app/page/home_page/home_logic.dart';
|
||
import 'package:school_asignment_app/page/home_page/home_view.dart';
|
||
import 'package:school_asignment_app/page/work_page/work_logic.dart';
|
||
import 'package:school_asignment_app/page/work_page/work_view.dart';
|
||
import 'package:school_asignment_app/routes/app_pages.dart';
|
||
|
||
import '../../common/utils/storage.dart';
|
||
|
||
class StartPage extends StatefulWidget {
|
||
const StartPage({Key? key}) : super(key: key);
|
||
|
||
@override
|
||
State<StartPage> createState() => _StartPageState();
|
||
}
|
||
|
||
class _StartPageState extends State<StartPage> {
|
||
DateTime? lastPopTime;
|
||
final _pageController = Get.find<PageIndexController>();
|
||
late final List<Widget> _bodyList;
|
||
|
||
@override
|
||
void initState() {
|
||
super.initState();
|
||
Get.put(HomeLogic());
|
||
Get.put(WorkLogic());
|
||
|
||
_bodyList = [
|
||
const HomePage(),
|
||
const WorkPage(),
|
||
const MyInfo(),
|
||
];
|
||
|
||
String? token = UserStore.to.token;
|
||
UserInfo? userInfo = UserStore.to.userInfo.value;
|
||
UserInfoDetail? userInfoDetail = UserStore.to.userDetailInfo.value;
|
||
|
||
if ((token?.isNotEmpty ?? false) && userInfo != null) {
|
||
// Future.delayed(const Duration(milliseconds: 200)).then((e) {
|
||
// Get.toNamed(Routes.home);
|
||
// });
|
||
// 更新用户信息
|
||
if (userInfoDetail == null) UserStore.to.updateUserInfo();
|
||
} else {
|
||
Future.delayed(const Duration(milliseconds: 100)).then((e) => Get.offAllNamed(Routes.login));
|
||
}
|
||
}
|
||
|
||
@override
|
||
void dispose() {
|
||
Get.delete<PageIndexController>();
|
||
super.dispose();
|
||
}
|
||
|
||
/// 获取项目 icon
|
||
Widget getItemIcon(String icon) {
|
||
return Image.asset(
|
||
icon,
|
||
fit: BoxFit.contain,
|
||
width: 24.w,
|
||
height: 24.h,
|
||
);
|
||
}
|
||
|
||
@override
|
||
Widget build(BuildContext context) {
|
||
return WillPopScope(
|
||
child: Scaffold(
|
||
body: PageView(
|
||
controller: _pageController._pageIndexState.pageController,
|
||
physics: const BouncingScrollPhysics(),
|
||
onPageChanged: (index) {
|
||
_pageController._pageIndexState.pageIndex.value = index;
|
||
},
|
||
children: _bodyList,
|
||
),
|
||
bottomNavigationBar: Obx(() {
|
||
return BottomNavigationBar(
|
||
items: <BottomNavigationBarItem>[
|
||
BottomNavigationBarItem(
|
||
label: '首页',
|
||
icon: getItemIcon('assets/images/ic_home_normal.png'),
|
||
activeIcon: getItemIcon('assets/images/ic_home_press.png'),
|
||
),
|
||
BottomNavigationBarItem(
|
||
label: '考试',
|
||
icon: getItemIcon('assets/images/ic_work_normal.png'),
|
||
activeIcon: getItemIcon('assets/images/ic_work_press.png'),
|
||
),
|
||
BottomNavigationBarItem(
|
||
label: '我的',
|
||
icon: getItemIcon('assets/images/ic_mine_normal.png'),
|
||
activeIcon: getItemIcon('assets/images/ic_mine_press.png'),
|
||
),
|
||
],
|
||
//设置显示的模式
|
||
type: BottomNavigationBarType.fixed,
|
||
//设置当前的索引
|
||
currentIndex: _pageController._pageIndexState.pageIndex.value,
|
||
//tabBottom的点击监听
|
||
onTap: (index) {
|
||
print('appbar下标:${index}');
|
||
_pageController._pageIndexState.pageController.jumpToPage(index);
|
||
},
|
||
);
|
||
}),
|
||
),
|
||
onWillPop: () async {
|
||
if (lastPopTime == null || DateTime.now().difference(lastPopTime!) > const Duration(seconds: 1)) {
|
||
lastPopTime = DateTime.now();
|
||
ToastUtils.getFluttertoast(context: context, msg: '连续两次返回就退出');
|
||
return Future.value(false);
|
||
} else {
|
||
lastPopTime = DateTime.now();
|
||
// 退出app
|
||
return Future.value(true);
|
||
}
|
||
},
|
||
);
|
||
}
|
||
}
|
||
|
||
class PageIndexState {
|
||
PageIndexState({required this.pageController});
|
||
|
||
RxInt pageIndex = 0.obs;
|
||
|
||
//文本输入框控制器
|
||
final PageController pageController;
|
||
}
|
||
|
||
class PageIndexController extends GetxController with RequestToolMixin {
|
||
late PageIndexState _pageIndexState;
|
||
|
||
@override
|
||
void onInit() {
|
||
_pageIndexState = PageIndexState(pageController: PageController());
|
||
super.onInit();
|
||
}
|
||
}
|
||
|
||
class StartPageIndexBinding extends Bindings {
|
||
@override
|
||
void dependencies() {
|
||
Get.lazyPut(() => PageIndexController());
|
||
}
|
||
}
|