优化批阅升级流程

This commit is contained in:
DESKTOP-I3JPKHK\wy 2025-04-28 15:11:57 +08:00
parent 57ec197956
commit ef2684ca5d
7 changed files with 59 additions and 80 deletions

View File

@ -19,6 +19,7 @@ import 'package:get/get.dart';
import 'package:making_school_asignment_app/common/utils/app_upgrade/DownloadApk.dart';
import 'package:making_school_asignment_app/common/utils/app_upgrade/UpgradePermission.dart';
import 'package:making_school_asignment_app/common/utils/app_upgrade/upgradeLogic.dart';
import 'package:making_school_asignment_app/common/utils/utils.dart';
import 'package:making_school_asignment_app/page/global_widget/my_text.dart';
import 'package:percent_indicator/linear_percent_indicator.dart';
import 'package:flutter/material.dart';
@ -33,14 +34,13 @@ class UpdateDialog extends Dialog {
final UpdateAppEvent updateAppEvent;
final String deviceInfo;
const UpdateDialog(
{super.key, required this.updateAppEvent, required this.deviceInfo});
const UpdateDialog({super.key, required this.updateAppEvent, required this.deviceInfo});
@override
Widget build(BuildContext context) {
return Center(
child: Container(
width: 319.w,
width: isPad() ? ScreenUtil().screenWidth * 0.62 : 319.w,
height: 440.h,
padding: EdgeInsets.symmetric(vertical: 8.h),
decoration: BoxDecoration(
@ -61,7 +61,7 @@ class UpdateDialog extends Dialog {
children: [
Container(
alignment: Alignment.center,
margin: EdgeInsets.only(top: 128.h, bottom: 10.h),
margin: EdgeInsets.only(top:isPad()? 136.h : 128.h, bottom: 10.h),
child: quickText(
updateAppEvent.title,
size: 18.sp,
@ -72,17 +72,11 @@ class UpdateDialog extends Dialog {
HtmlWidget(
updateAppEvent.description,
customStylesBuilder: (element) {
return {
'color': '#666666',
'font-weight': 'normal',
'text-decoration': 'none'
};
return {'color': '#666666', 'font-weight': 'normal', 'text-decoration': 'none'};
},
onLoadingBuilder: (context, element, loadingProgress) =>
const CircularProgressIndicator(),
onLoadingBuilder: (context, element, loadingProgress) => const CircularProgressIndicator(),
renderMode: RenderMode.column,
textStyle:
TextStyle(fontSize: 14.sp, color: Colors.black87),
textStyle: TextStyle(fontSize: 14.sp, color: Colors.black87),
)
],
),
@ -103,9 +97,7 @@ class UpdateDialog extends Dialog {
builder: (BuildContext context) {
return WillPopScope(
onWillPop: () async => false,
child: UpdateDialog(
updateAppEvent: updateAppEvent,
deviceInfo: updateAppEvent.deviceInfo),
child: UpdateDialog(updateAppEvent: updateAppEvent, deviceInfo: updateAppEvent.deviceInfo),
);
},
);
@ -128,7 +120,7 @@ class DownloadProgress extends StatelessWidget {
children: [
LinearPercentIndicator(
alignment: MainAxisAlignment.center,
width: 245.w,
width: isPad() ? ScreenUtil().screenWidth * 0.55 : 245.w,
animation: false,
lineHeight: 20.0.h,
percent: logic.downloadRatio.value,
@ -144,10 +136,7 @@ class DownloadProgress extends StatelessWidget {
Container(
height: 6.h,
),
quickText('更新中...',
size: 12.sp,
fontWeight: FontWeight.w500,
color: const Color.fromRGBO(90, 90, 90, 1))
quickText('更新中...', size: 12.sp, fontWeight: FontWeight.w500, color: const Color.fromRGBO(90, 90, 90, 1))
],
);
});
@ -189,23 +178,18 @@ class DownloadButton extends StatelessWidget {
return Container(
height: 38.h,
width: 245.w,
width: isPad() ? ScreenUtil().screenWidth * 0.45 : 245.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(42.h)),
gradient: LinearGradient(
colors: [primaryColor, primaryColor.withOpacity(0.7)]),
gradient: LinearGradient(colors: [primaryColor, primaryColor.withOpacity(0.7)]),
),
child: MaterialButton(
onPressed: () => easyThrottle('DownloadButton_App_Upgrade',
duration: const Duration(milliseconds: 1000), () async {
if (deviceInfo == "android" &&
updateAppEvent.equipment == Equipment.android) {
onPressed: () => easyThrottle('DownloadButton_App_Upgrade', duration: const Duration(milliseconds: 1000), () async {
if (deviceInfo == "android" && updateAppEvent.equipment == Equipment.android) {
//
bool flag = await UpgradePermission(updateAppEvent.deviceInfo)
.checkPermission(context, updateAppEvent);
bool flag = await UpgradePermission(updateAppEvent.deviceInfo).checkPermission(context, updateAppEvent);
if (flag) {
flag = await DownloadApk.installApk(
context, updateAppEvent, logic);
flag = await DownloadApk.installApk(context, updateAppEvent, logic);
if (!flag) {
print('执行到了重置更新按钮的地方....');
logic.downloadRatio.value = 0.0; //
@ -217,8 +201,7 @@ class DownloadButton extends StatelessWidget {
}
// await FlutterClipboard.copy(updateAppEvent.link);
// setTimeOut(1000, () => ToastUtils.showInfo('下载链接已经复制到设备,可前往浏览器下载安装'));
} else if (deviceInfo == "ios" &&
updateAppEvent.equipment == Equipment.ios) {
} else if (deviceInfo == "ios" && updateAppEvent.equipment == Equipment.ios) {
try {
print(updateAppEvent.link);
await launchUrlString(updateAppEvent.link);
@ -232,8 +215,7 @@ class DownloadButton extends StatelessWidget {
// await autoUpdater.setScheduledCheckInterval(0);
// }
}),
child: quickText(!logic.loadingApk.value ? '立即体验' : '正在下载...',
size: 16.sp, color: Colors.white, fontWeight: FontWeight.w500),
child: quickText(!logic.loadingApk.value ? '立即体验' : '正在下载...', size: 16.sp, color: Colors.white, fontWeight: FontWeight.w500),
),
);
});

View File

@ -23,7 +23,7 @@ class UpgradeLogic extends GetxController with RequestToolMixin {
// super.onInit();
// }
void getAppUpgrade(BuildContext context) async {
Future<void> getAppUpgrade(BuildContext context) async {
if (!const bool.fromEnvironment('dart.vm.product')) return;
try {

View File

@ -39,12 +39,13 @@ class _StartPageState extends State<StartPage> with RequestToolMixin {
Future.delayed(const Duration(seconds: 3), () => FlutterNativeSplash.remove());
Get.put(HomeLogic());
Get.put(WorkLogic());
// const WorkPage(),
_bodyList = [const HomePage(), const MyInfo()];
// APP
if (!_upgradeLogic.showUpgrade.value) _upgradeLogic.getAppUpgrade(context);
WidgetsBinding.instance.addPostFrameCallback((e) {
/// 40APP
if (!_upgradeLogic.showUpgrade.value && UserStore.to.userDetailInfo.value != null) _upgradeLogic.getAppUpgrade(context);
});
_timer?.cancel();
_timer = Timer.periodic(const Duration(seconds: 40), (e) {
if (Get.currentRoute == Routes.login) return; // APP

View File

@ -143,7 +143,14 @@ class _MyInfoState extends State<MyInfo> with AutomaticKeepAliveClientMixin {
onTap: () {
_showAlertDialog(context);
},
child: Image.asset('assets/images/out_icon.png'),
child: Container(
padding: EdgeInsets.all(2.r),
decoration: BoxDecoration(
color: const Color.fromRGBO(255, 255, 255, 1),
borderRadius: BorderRadius.circular(50.r),
),
child: Image.asset('assets/images/out_icon.png',fit: BoxFit.cover),
),
)
],
),

View File

@ -4,6 +4,7 @@ import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart';
import 'package:making_school_asignment_app/common/mixins/request_tool_mixin.dart';
import 'package:making_school_asignment_app/common/store/user_store.dart';
import 'package:making_school_asignment_app/common/utils/app_upgrade/upgradeLogic.dart';
import 'package:making_school_asignment_app/common/utils/storage.dart';
import 'package:making_school_asignment_app/common/utils/toast_utils.dart';
import 'package:making_school_asignment_app/common/utils/utils.dart';
@ -55,13 +56,17 @@ class LoginLogic extends GetxController with RequestToolMixin {
}
///
void toLogin(BuildContext context) async {
void toLogin(BuildContext context, UpgradeLogic upgradeLogic) async {
if (!state.canLogin.value) return;
Utils.hideKeyboard();
state.canLogin.value = false;
void toMsg(msg) {
ToastUtils.showError(msg);
void toMsg(msg, [bool error = true]) {
if (error) {
ToastUtils.showError(msg);
} else {
ToastUtils.showInfo(msg);
}
state.canLogin.value = true;
}
@ -78,6 +83,11 @@ class LoginLogic extends GetxController with RequestToolMixin {
EasyLoading.show(status: 'loading...');
try {
/// APP
if (userName != 'AppleTester' && const bool.fromEnvironment('dart.vm.product')) {
upgradeLogic.getAppUpgrade(Get.context ?? context);
return toMsg('请在升级APP后再次登陆', false);
}
await getClient().toLogin(userName, userPwd);
String? nameidentifier = UserStore.to.userInfo.value?.nameidentifier;
if (nameidentifier == null) {
@ -88,7 +98,6 @@ class LoginLogic extends GetxController with RequestToolMixin {
throw Exception('用户信息获取失败');
}
UserStore.to.setUserDetailInfo(data);
EasyLoading.dismiss();
if (state.keepPwd.value) {
StorageService.to.write(AppStorageKey.account.value, userName);
@ -96,39 +105,8 @@ class LoginLogic extends GetxController with RequestToolMixin {
}
Get.offAllNamed(Routes.startPage);
// if (resultData.code != 200 || userData?.accessToken == null || userData?.accessToken == '') {
// return toMsg(resultData.message ?? '登录失败,请重试');
// }
// UserStore.to.setToken(userData!.accessToken);
// state.canLogin.value = true;
// BaseStructureResult<UserInfo> userRes = await UserApi.getUserInfo();
// print('99999999999');
// print(userRes.data!.userName);
// if (userRes.code != 200 || userRes.data == null) {
// throw Exception('登录失败,请重试');
// } else {
// UserStore.to.setUserInfo(userRes.data!);
// Get.offAllNamed(Routes.home);
// }
/* fastData.setUser(userRes.data!).then((value) {
//
if (keepPwd) {
fastData.setUserPwdAndAccount({'pwd': userPwd, 'account': userName});
}
//
ref.read(userProvider.notifier).initUserInfo();
ref.read(userTokenProvider.notifier).initToken();
//
Get.toNamed(Routes.login);
// RouterManager.router.navigateTo(context, RouterManager.root, clearStack: true, transition: getTransition());
});*/
} catch (e) {
print('进来异常');
EasyLoading.dismiss();
UserStore.to.erase();
StorageService.to.erase();
if (e is Exception) {
@ -147,6 +125,7 @@ class LoginLogic extends GetxController with RequestToolMixin {
toMsg('登录失败,请重试');
} finally {
state.canLogin.value = true;
EasyLoading.dismiss();
}
}

View File

@ -33,7 +33,8 @@ class _LoginPageState extends State<LoginPage> {
WidgetsBinding.instance.addPostFrameCallback((_) async {
await sysProtocol(context);
await Future.delayed(Duration.zero, () => upgradeLogic.getAppUpgrade(context));
/// 便
// await Future.delayed(Duration.zero, () => upgradeLogic.getAppUpgrade(context));
});
super.initState();
}
@ -171,7 +172,7 @@ class _LoginPageState extends State<LoginPage> {
onSubmitted: (_) => easyThrottle('LOGIN_EASYTHROTTLE', () async{
Utils.hideKeyboard();
await Future.delayed(const Duration(milliseconds: 300));
WidgetsBinding.instance.addPostFrameCallback((_) => logic.toLogin(context));
WidgetsBinding.instance.addPostFrameCallback((_) => logic.toLogin(context,upgradeLogic));
}),
style: TextStyle(
color: const Color(0xFF434343),
@ -290,7 +291,7 @@ class _LoginPageState extends State<LoginPage> {
onTap: () => easyThrottle('LOGIN_EASYTHROTTLE', () async{
Utils.hideKeyboard();
await Future.delayed(Duration.zero);
WidgetsBinding.instance.addPostFrameCallback((_) => logic.toLogin(context));
WidgetsBinding.instance.addPostFrameCallback((_) => logic.toLogin(context,upgradeLogic));
}),
child: Obx(() {
return Container(

View File

@ -49,7 +49,16 @@ abstract class AppPages {
GetPage(name: Routes.register, page: () => const Register(), transition: getTransition()),
GetPage(name: Routes.agreementPage, page: () => const AgreementPage(), binding: LoginBinding(), transition: getTransition()),
GetPage(name: Routes.home, page: () => const HomePage(), binding: HomeBinding(), transition: getTransition()),
GetPage(name: Routes.startPage, page: () => const StartPage(), binding: StartPageIndexBinding(), transition: getTransition()),
GetPage(
name: Routes.startPage,
page: () => const StartPage(),
bindings: [
HomeBinding(),
WorkBinding(),
StartPageIndexBinding(),
],
transition: getTransition(),
),
GetPage(name: Routes.myInfo, page: () => const MyInfo(), transition: getTransition()),
GetPage(name: Routes.work, page: () => const WorkPage(), binding: WorkBinding(), transition: getTransition()),
GetPage(name: Routes.otherPage, page: () => const OhterPage(), transition: getTransition()),