1、添加开完锁之后数据上传

2、打包apk上传到pre下载页
3、完成App启动数据请求优化问题
This commit is contained in:
魏少阳 2024-09-02 18:09:57 +08:00
parent b241008de8
commit a7336b79cc
28 changed files with 296 additions and 289 deletions

BIN
.DS_Store vendored

Binary file not shown.

BIN
ios/.DS_Store vendored

Binary file not shown.

View File

@ -28,8 +28,6 @@ PODS:
- AMapFoundation (>= 1.8.0) - AMapFoundation (>= 1.8.0)
- app_settings (5.1.1): - app_settings (5.1.1):
- Flutter - Flutter
- audio_service (0.0.1):
- Flutter
- audio_session (0.0.1): - audio_session (0.0.1):
- Flutter - Flutter
- audioplayers_darwin (0.0.1): - audioplayers_darwin (0.0.1):
@ -166,7 +164,6 @@ DEPENDENCIES:
- amap_flutter_location (from `.symlinks/plugins/amap_flutter_location/ios`) - amap_flutter_location (from `.symlinks/plugins/amap_flutter_location/ios`)
- amap_flutter_map (from `.symlinks/plugins/amap_flutter_map/ios`) - amap_flutter_map (from `.symlinks/plugins/amap_flutter_map/ios`)
- app_settings (from `.symlinks/plugins/app_settings/ios`) - app_settings (from `.symlinks/plugins/app_settings/ios`)
- audio_service (from `.symlinks/plugins/audio_service/ios`)
- audio_session (from `.symlinks/plugins/audio_session/ios`) - audio_session (from `.symlinks/plugins/audio_session/ios`)
- audioplayers_darwin (from `.symlinks/plugins/audioplayers_darwin/ios`) - audioplayers_darwin (from `.symlinks/plugins/audioplayers_darwin/ios`)
- auto_orientation (from `.symlinks/plugins/auto_orientation/ios`) - auto_orientation (from `.symlinks/plugins/auto_orientation/ios`)
@ -237,8 +234,6 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/amap_flutter_map/ios" :path: ".symlinks/plugins/amap_flutter_map/ios"
app_settings: app_settings:
:path: ".symlinks/plugins/app_settings/ios" :path: ".symlinks/plugins/app_settings/ios"
audio_service:
:path: ".symlinks/plugins/audio_service/ios"
audio_session: audio_session:
:path: ".symlinks/plugins/audio_session/ios" :path: ".symlinks/plugins/audio_session/ios"
audioplayers_darwin: audioplayers_darwin:
@ -318,7 +313,6 @@ SPEC CHECKSUMS:
AMapFoundation: 9885c48fc3a78fdfb84a0299a2293e56ea3c9fec AMapFoundation: 9885c48fc3a78fdfb84a0299a2293e56ea3c9fec
AMapLocation: 5248aec2455ebb5d104b367813c946430a2ee033 AMapLocation: 5248aec2455ebb5d104b367813c946430a2ee033
app_settings: 017320c6a680cdc94c799949d95b84cb69389ebc app_settings: 017320c6a680cdc94c799949d95b84cb69389ebc
audio_service: f509d65da41b9521a61f1c404dd58651f265a567
audio_session: 088d2483ebd1dc43f51d253d4a1c517d9a2e7207 audio_session: 088d2483ebd1dc43f51d253d4a1c517d9a2e7207
audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40 audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40
auto_orientation: 102ed811a5938d52c86520ddd7ecd3a126b5d39d auto_orientation: 102ed811a5938d52c86520ddd7ecd3a126b5d39d

View File

@ -3,18 +3,12 @@ import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/blue/blue_manage.dart'; import 'package:star_lock/blue/blue_manage.dart';
import 'package:star_lock/flavors.dart'; import 'package:star_lock/flavors.dart';
import 'package:star_lock/login/login/app_get_version.dart';
import 'package:star_lock/main/lockMian/lockMain/lockMain_logic.dart'; import 'package:star_lock/main/lockMian/lockMain/lockMain_logic.dart';
import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/appFirstEnterHandle.dart'; import 'package:star_lock/tools/appFirstEnterHandle.dart';
import 'package:star_lock/tools/app_manager.dart'; import 'package:star_lock/tools/app_manager.dart';
import 'package:star_lock/tools/bindings/app_binding.dart'; import 'package:star_lock/tools/bindings/app_binding.dart';
import 'package:star_lock/tools/customer_tool.dart';
import 'package:star_lock/tools/pay/wx_pay_tool.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
import 'package:star_lock/translations/app_dept.dart'; import 'package:star_lock/translations/app_dept.dart';

View File

@ -6,7 +6,7 @@ import 'package:get/get.dart';
import 'package:star_lock/flavors.dart'; import 'package:star_lock/flavors.dart';
import 'package:star_lock/login/login/starLock_login_state.dart'; import 'package:star_lock/login/login/starLock_login_state.dart';
import 'package:star_lock/tools/appFirstEnterHandle.dart'; import 'package:star_lock/tools/appFirstEnterHandle.dart';
import 'package:star_lock/tools/customer_tool.dart'; import 'package:star_lock/tools/wechat/customer_tool.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
import '../../appRouters.dart'; import '../../appRouters.dart';
@ -16,6 +16,7 @@ import '../../tools/commonItem.dart';
import '../../tools/submitBtn.dart'; import '../../tools/submitBtn.dart';
import '../../tools/tf_loginInput.dart'; import '../../tools/tf_loginInput.dart';
import '../../tools/titleAppBar.dart'; import '../../tools/titleAppBar.dart';
import '../../tools/wechat/wechatManageTool.dart';
import 'starLock_login_logic.dart'; import 'starLock_login_logic.dart';
class StarLockLoginPage extends StatefulWidget { class StarLockLoginPage extends StatefulWidget {
@ -47,9 +48,11 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
haveBack: false, haveBack: false,
backgroundColor: AppColors.mainColor, backgroundColor: AppColors.mainColor,
actionsList: <Widget>[ actionsList: <Widget>[
const IconButton( IconButton(
onPressed: CustomerTool.openCustomerService, onPressed: (){
icon: Icon( WechatManageTool.getAppInfo(CustomerTool.openCustomerService);
},
icon: const Icon(
Icons.support_agent, Icons.support_agent,
color: Colors.white, color: Colors.white,
)), )),

View File

@ -6,7 +6,7 @@ import 'package:get/get.dart';
import 'package:star_lock/flavors.dart'; import 'package:star_lock/flavors.dart';
import 'package:star_lock/login/login/starLock_login_state.dart'; import 'package:star_lock/login/login/starLock_login_state.dart';
import 'package:star_lock/tools/appFirstEnterHandle.dart'; import 'package:star_lock/tools/appFirstEnterHandle.dart';
import 'package:star_lock/tools/customer_tool.dart'; import 'package:star_lock/tools/wechat/customer_tool.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
import '../../appRouters.dart'; import '../../appRouters.dart';
@ -14,6 +14,7 @@ import '../../app_settings/app_colors.dart';
import '../../common/XSConstantMacro/XSConstantMacro.dart'; import '../../common/XSConstantMacro/XSConstantMacro.dart';
import '../../tools/submitBtn.dart'; import '../../tools/submitBtn.dart';
import '../../tools/tf_loginInput.dart'; import '../../tools/tf_loginInput.dart';
import '../../tools/wechat/wechatManageTool.dart';
import 'starLock_login_logic.dart'; import 'starLock_login_logic.dart';
class StarLockLoginXHJPage extends StatefulWidget { class StarLockLoginXHJPage extends StatefulWidget {
@ -64,7 +65,9 @@ class _StarLockLoginPageState extends State<StarLockLoginXHJPage> {
), ),
), ),
IconButton( IconButton(
onPressed: CustomerTool.openCustomerService, onPressed: (){
WechatManageTool.getAppInfo(CustomerTool.openCustomerService);
},
icon: Icon( icon: Icon(
Icons.support_agent, Icons.support_agent,
color: AppColors.mainColor, color: AppColors.mainColor,

View File

@ -7,14 +7,11 @@ import 'package:flutter/services.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:path/path.dart' as path; import 'package:path/path.dart' as path;
import 'package:star_lock/flavors.dart'; import 'package:star_lock/flavors.dart';
import 'package:star_lock/login/login/app_get_version.dart';
import 'package:star_lock/mine/about/debug/debug_tool.dart'; import 'package:star_lock/mine/about/debug/debug_tool.dart';
import 'package:star_lock/network/api_provider.dart'; import 'package:star_lock/network/api_provider.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/bugly/bugly_tool.dart'; import 'package:star_lock/tools/bugly/bugly_tool.dart';
import 'package:star_lock/tools/customer_tool.dart';
import 'package:star_lock/tools/device_info_service.dart'; import 'package:star_lock/tools/device_info_service.dart';
import 'package:star_lock/tools/pay/wx_pay_tool.dart';
import 'package:star_lock/tools/platform_info_services.dart'; import 'package:star_lock/tools/platform_info_services.dart';
import 'package:star_lock/tools/push/xs_jPhush.dart'; import 'package:star_lock/tools/push/xs_jPhush.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
@ -36,14 +33,6 @@ FutureOr<void> main() async {
final bool isLogin = await getLoginStatus(); final bool isLogin = await getLoginStatus();
if (isLogin) { if (isLogin) {
await privacySDKInitialization(); await privacySDKInitialization();
Future<void>.delayed(const Duration(milliseconds: 500), () async {
// AppLog.log('main函数调用了获取App信息接口');
final GetAppInfo entity = await ApiRepository.to.getAppInfo();
CustomerTool.init(entity.data?.wechatServiceUrl ?? '');
if (entity.data?.appSiteUrl != null) {
WxPayTool.setAssociationUrl(entity.data!.appSiteUrl!);
}
});
} }
WidgetsBinding.instance.addPostFrameCallback((_) async { WidgetsBinding.instance.addPostFrameCallback((_) async {

View File

@ -18,6 +18,7 @@ import 'package:star_lock/widget/permission/permission_dialog.dart';
import '../../../app_settings/app_settings.dart'; import '../../../app_settings/app_settings.dart';
import '../../../blue/blue_manage.dart'; import '../../../blue/blue_manage.dart';
import '../../../blue/io_protocol/io_openLock.dart'; import '../../../blue/io_protocol/io_openLock.dart';
import '../../../blue/io_protocol/io_referEventRecordTime.dart';
import '../../../blue/io_reply.dart'; import '../../../blue/io_reply.dart';
import '../../../blue/io_tool/io_tool.dart'; import '../../../blue/io_tool/io_tool.dart';
import '../../../blue/io_tool/manager_event_bus.dart'; import '../../../blue/io_tool/manager_event_bus.dart';
@ -28,6 +29,7 @@ import '../../../tools/commonDataManage.dart';
import '../../../tools/eventBusEventManage.dart'; import '../../../tools/eventBusEventManage.dart';
import '../../../tools/storage.dart'; import '../../../tools/storage.dart';
import '../lockOperatingRecord/keyOperationRecord_entity.dart'; import '../lockOperatingRecord/keyOperationRecord_entity.dart';
import '../lockOperatingRecord/lockOperatingRecordGetLastRecordTime_entity.dart';
import '../lockSet/basicInformation/uploadElectricQuantity/uploadElectricQuantity_entity.dart'; import '../lockSet/basicInformation/uploadElectricQuantity/uploadElectricQuantity_entity.dart';
import 'lockDetail_state.dart'; import 'lockDetail_state.dart';
import 'lockNetToken_entity.dart'; import 'lockNetToken_entity.dart';
@ -41,18 +43,17 @@ class LockDetailLogic extends BaseGetXController {
// //
void initReplySubscription() { void initReplySubscription() {
state.replySubscription = state.replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async {
EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async {
// //
if (reply is OpenDoorReply && state.ifCurrentScreen.value == true) { if (reply is OpenDoorReply && state.ifCurrentScreen.value == true) {
_replyOpenLock(reply); _replyOpenLock(reply);
} }
// //
// if (reply is SenderReferEventRecordTimeReply && if (reply is SenderReferEventRecordTimeReply &&
// state.ifCurrentScreen.value == true) { state.ifCurrentScreen.value == true) {
// _replyReferEventRecordTime(reply); _replyReferEventRecordTime(reply);
// } }
}); });
} }
@ -95,7 +96,7 @@ class LockDetailLogic extends BaseGetXController {
state.animationController!.stop(); state.animationController!.stop();
// //
// getLockRecordLastUploadDataTime(); getLockRecordLastUploadDataTime();
break; break;
case 0x06: case 0x06:
// //
@ -178,7 +179,6 @@ class LockDetailLogic extends BaseGetXController {
} }
} }
Future<void> loadData({ required LockListInfoItemEntity lockListInfoItemEntity,required bool isOnlyOneData}) async { Future<void> loadData({ required LockListInfoItemEntity lockListInfoItemEntity,required bool isOnlyOneData}) async {
state.keyInfos.value = lockListInfoItemEntity; state.keyInfos.value = lockListInfoItemEntity;
CommonDataManage().currentLockUserNo = state.keyInfos.value.lockUserNo!; CommonDataManage().currentLockUserNo = state.keyInfos.value.lockUserNo!;
@ -254,71 +254,70 @@ class LockDetailLogic extends BaseGetXController {
} }
// //
// Future<void> _replyReferEventRecordTime(Reply reply) async { Future<void> _replyReferEventRecordTime(Reply reply) async {
// final int status = reply.data[2]; final int status = reply.data[2];
// switch (status) { switch (status) {
// case 0x00: case 0x00:
// // //
// final int dataLength = (reply.data[5] << 8) + reply.data[6]; final int dataLength = (reply.data[5] << 8) + reply.data[6];
// AppLog.log('dataLength:$dataLength'); AppLog.log('dataLength:$dataLength');
// if (dataLength > 0) { if (dataLength > 0) {
// reply.data.removeRange(0, 7); reply.data.removeRange(0, 7);
// // 17 // 17
// if (reply.data.length < 17) { if (reply.data.length < 17) {
// return; return;
// } }
// final List<List<int>> getList = splitList(reply.data, 17); final List<List<int>> getList = splitList(reply.data, 17);
// AppLog.log('getList:$getList'); AppLog.log('getList:$getList');
// final List uploadList = []; final List uploadList = [];
// for (int i = 0; i < getList.length; i++) { for (int i = 0; i < getList.length; i++) {
// final List<int> indexList = getList[i]; final List<int> indexList = getList[i];
// AppLog.log('indexList:$indexList'); // AppLog.log("indexList:$indexList");
// final Map indexMap = {}; final Map indexMap = {};
// indexMap['type'] = indexList[0].toString(); indexMap['type'] = indexList[0].toString();
// int operateDate = 0;
// // if (indexList[0] == 2) { final int userNo = (indexList[1] * 256) + indexList[2];
// final List<int> passwordData = indexList.sublist(7, 17); indexMap['user'] = userNo.toString();
// final String password = utf8String(passwordData); // AppLog.log('userNouserNouserNouserNo:$userNo');
// AppLog.log('passwordData:$passwordData password:$password');
// indexMap['user'] = password.toString(); final List<int> passwordData = indexList.sublist(7, 17);
// // } else { final String password = utf8String(passwordData);
// // final int userNo = (indexList[1] * 256) + indexList[2]; indexMap['password'] = password.toString();
// // indexMap['user'] = userNo.toString(); // AppLog.log('passwordpasswordpassword:$password');
// // }
// indexMap['success'] = '1';
// indexMap['success'] = '1';
// final int time = (0xff & indexList[3]) << 24 |
// final int time = (0xff & indexList[3]) << 24 | (0xff & indexList[4]) << 16 |
// (0xff & indexList[4]) << 16 | (0xff & indexList[5]) << 8 |
// (0xff & indexList[5]) << 8 | (0xFF & indexList[6]);
// (0xFF & indexList[6]); indexMap['date'] = '${time * 1000}';
// operateDate = time * 1000; uploadList.add(indexMap);
// indexMap['date'] = '$operateDate';
// uploadList.add(indexMap); final int operateDate = time * 1000;
// if (i == getList.length - 1) {
// if (i == getList.length - 1) { //
// // state.operateDate = operateDate;
// state.operateDate = operateDate; }
// } }
// } lockRecordUploadData(uploadList);
// lockRecordUploadData(uploadList);
// if (dataLength == state.logCountPage) {
// if (dataLength == state.logCountPage) { senderReferEventRecordTime();
// senderReferEventRecordTime(); } else {
// } else { await blueManageDisconnect();
// await blueManageDisconnect(); }
// } }
// } break;
// break; case 0x06:
// case 0x06: //
// // blueManageDisconnect();
// blueManageDisconnect(); break;
// break; default:
// default: blueManageDisconnect();
// blueManageDisconnect(); break;
// break; }
// } }
// }
// //
Future<void> openDoorAction() async { Future<void> openDoorAction() async {
@ -374,42 +373,43 @@ class LockDetailLogic extends BaseGetXController {
} }
// () // ()
// void senderReferEventRecordTime() { void senderReferEventRecordTime() {
// showBlueConnetctToastTimer( showBlueConnetctToastTimer(
// isShowBlueConnetctToast: false, isShowBlueConnetctToast: false,
// action: () { action: () {
// blueManageDisconnect(); blueManageDisconnect();
// }); });
// BlueManage().blueSendData(BlueManage().connectDeviceName, BlueManage().blueSendData(BlueManage().connectDeviceName,
// (BluetoothConnectionState connectionState) async { (BluetoothConnectionState connectionState) async {
// if (connectionState == BluetoothConnectionState.connected) { if (connectionState == BluetoothConnectionState.connected) {
// final List<String>? privateKey = final List<String>? privateKey =
// await Storage.getStringList(saveBluePrivateKey); await Storage.getStringList(saveBluePrivateKey);
// final List<int> getPrivateKeyList = final List<int> getPrivateKeyList =
// changeStringListToIntList(privateKey!); changeStringListToIntList(privateKey!);
//
// final List<String>? token = await Storage.getStringList(saveBlueToken); final List<String>? token = await Storage.getStringList(saveBlueToken);
// final List<int> getTokenList = changeStringListToIntList(token!); final List<int> getTokenList = changeStringListToIntList(token!);
//
// final List<String>? publicKey = final List<String>? publicKey =
// await Storage.getStringList(saveBluePublicKey); await Storage.getStringList(saveBluePublicKey);
// final List<int> getPublicKeyList = final List<int> getPublicKeyList =
// changeStringListToIntList(publicKey!); changeStringListToIntList(publicKey!);
//
// IoSenderManage.senderReferEventRecordTimeCommand( IoSenderManage.senderReferEventRecordTimeCommand(
// keyID: BlueManage().connectDeviceName, keyID: BlueManage().connectDeviceName,
// userID: await Storage.getUid(), userID: await Storage.getUid(),
// logsCount: state.logCountPage, logsCount: state.logCountPage,
// // time:DateTime.now().millisecondsSinceEpoch~/1000, // time:DateTime.now().millisecondsSinceEpoch~/1000,
// time: state.operateDate, time: state.operateDate,
// token: getTokenList, currentDate: getUTCNetTime(),
// needAuthor: 1, token: getTokenList,
// publicKey: getPublicKeyList, needAuthor: 1,
// privateKey: getPrivateKeyList, publicKey: getPublicKeyList,
// ); privateKey: getPrivateKeyList,
// } );
// }); }
// } });
}
// //
Future<void> getServerDatetime() async { Future<void> getServerDatetime() async {
@ -467,15 +467,15 @@ class LockDetailLogic extends BaseGetXController {
} }
// //
// Future<void> getLockRecordLastUploadDataTime() async { Future<void> getLockRecordLastUploadDataTime() async {
// final LockOperatingRecordGetLastRecordTimeEntity entity = final LockOperatingRecordGetLastRecordTimeEntity entity =
// await ApiRepository.to.getLockRecordLastUploadDataTime( await ApiRepository.to.getLockRecordLastUploadDataTime(
// lockId: state.keyInfos.value.lockId.toString()); lockId: state.keyInfos.value.lockId.toString());
// if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
// state.operateDate = entity.data!.operateDate! ~/ 1000; state.operateDate = entity.data!.operateDate! ~/ 1000;
// senderReferEventRecordTime(); senderReferEventRecordTime();
// } }
// } }
// //
Future<void> lockRecordUploadData(List list) async { Future<void> lockRecordUploadData(List list) async {

View File

@ -323,7 +323,7 @@ class LockListLogic extends BaseGetXController {
@override @override
void onInit() { void onInit() {
super.onInit(); super.onInit();
AppLog.log('onInit调用了 setLockListInfoGroupEntity'); // AppLog.log('onInit调用了 setLockListInfoGroupEntity');
setLockListInfoGroupEntity(entity!); setLockListInfoGroupEntity(entity!);
} }

View File

@ -41,7 +41,7 @@ class LockMainLogic extends BaseGetXController {
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
// AppLog.log('请求列表调用 loadMainDataLogic'); // AppLog.log('请求列表调用 loadMainDataLogic');
await loadMainDataLogic(entity.data!); await loadMainDataLogic(entity.data!);
updateZoneOffsetsAndLanguages(); // updateZoneOffsetsAndLanguages();
} }
return entity; return entity;
} }
@ -94,24 +94,24 @@ class LockMainLogic extends BaseGetXController {
} }
/// ///
Future<void> getConnectType() async { // Future<void> _getConnectType() async {
final ConnectivityResult connectResult = // final ConnectivityResult connectResult =
await Connectivity().checkConnectivity(); // await Connectivity().checkConnectivity();
if (connectResult == ConnectivityResult.mobile) { // if (connectResult == ConnectivityResult.mobile) {
// _netType = "4G"; // // _netType = "4G";
state.networkConnectionStatus.value = 1; // state.networkConnectionStatus.value = 1;
AppLog.log('网络连接: 4G 4G 4G 4G 4G'); // AppLog.log('网络连接: 4G 4G 4G 4G 4G');
} else if (connectResult == ConnectivityResult.wifi) { // } else if (connectResult == ConnectivityResult.wifi) {
// _netType = "wifi"; // // _netType = "wifi";
state.networkConnectionStatus.value = 1; // state.networkConnectionStatus.value = 1;
AppLog.log('网络连接: wifi wifi wifi wifi wifi'); // AppLog.log('网络连接: wifi wifi wifi wifi wifi');
} else { // } else {
// _netType = "未连接"; // // _netType = "未连接";
state.networkConnectionStatus.value = 0; // state.networkConnectionStatus.value = 0;
AppLog.log('网络连接: 未连接 未连接 未连接 未连接 未连接'); // AppLog.log('网络连接: 未连接 未连接 未连接 未连接 未连接');
// showToast("网络访问失败,请检查网络是否正常"); // // showToast("网络访问失败,请检查网络是否正常");
} // }
} // }
/// ///
Future<bool> isConnected() async { Future<bool> isConnected() async {
@ -121,19 +121,18 @@ class LockMainLogic extends BaseGetXController {
} }
/// ///
Future<void> connectListener() async { // Future<void> connectListener() async {
Connectivity().onConnectivityChanged.listen((ConnectivityResult result) { // Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
AppLog.log('设置网络切换监听:$result'); // AppLog.log('设置网络切换监听:$result');
if (state.networkConnectionStatus.value == 0 && // if (state.networkConnectionStatus.value == 0 && result != ConnectivityResult.none) {
result != ConnectivityResult.none) { // //
// // state.networkConnectionStatus.value = 1;
state.networkConnectionStatus.value = 1; // getStarLockInfo(isUnShowLoading: true);
getStarLockInfo(isUnShowLoading: true); // } else if (result == ConnectivityResult.none) {
} else if (result == ConnectivityResult.none) { // state.networkConnectionStatus.value = 0;
state.networkConnectionStatus.value = 0; // }
} // });
}); // }
}
/// ///
Future<bool> judgeTheNetwork() async { Future<bool> judgeTheNetwork() async {
@ -300,7 +299,7 @@ class LockMainLogic extends BaseGetXController {
super.onInit(); super.onInit();
checkWhetherPushIsEnabled(); checkWhetherPushIsEnabled();
_initSubscription(); _initSubscription();
connectListener(); // connectListener();
// AppLog.log('onInit() updateZoneOffsetsAndLanguages'); // AppLog.log('onInit() updateZoneOffsetsAndLanguages');
// updateZoneOffsetsAndLanguages(); // updateZoneOffsetsAndLanguages();

View File

@ -34,8 +34,7 @@ class StarLockMainPage extends StatefulWidget {
State<StarLockMainPage> createState() => _StarLockMainPageState(); State<StarLockMainPage> createState() => _StarLockMainPageState();
} }
class _StarLockMainPageState extends State<StarLockMainPage> class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget, AutomaticKeepAliveClientMixin, WidgetsBindingObserver {
with BaseWidget, AutomaticKeepAliveClientMixin {
final LockMainLogic logic = Get.put(LockMainLogic()); final LockMainLogic logic = Get.put(LockMainLogic());
final LockMainState state = Get.find<LockMainLogic>().state; final LockMainState state = Get.find<LockMainLogic>().state;
@ -243,6 +242,32 @@ class _StarLockMainPageState extends State<StarLockMainPage>
}); });
} }
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
// AppLog.log('App--->state$state');
switch (state) {
case AppLifecycleState.inactive:
// AppLog.log('App--->进入非活动状态');
break;
case AppLifecycleState.paused:
// AppLog.log('App--->进入后台');
BlueManage().disconnect();
break;
case AppLifecycleState.resumed:
// AppLog.log('App--->进入前台');
logic.pageNo = 1;
getHttpData();
break;
case AppLifecycleState.detached:
// AppLog.log('App--->挂起');
break;
case AppLifecycleState.hidden:
// AppLog.log('App--->隐藏');
break;
}
}
@override @override
void dispose() { void dispose() {
super.dispose(); super.dispose();

View File

@ -27,9 +27,15 @@ class LockMainXHJLogic extends BaseGetXController {
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
final String languageCodeAndCountryCode = entity.data!.lang ?? 'zh-CN'; final String languageCodeAndCountryCode = entity.data!.lang ?? 'zh-CN';
if(languageCodeAndCountryCode.contains('-')){
final List<String> parts = languageCodeAndCountryCode.split('-'); final List<String> parts = languageCodeAndCountryCode.split('-');
final Locale locale = Locale(parts[0], parts[1]); final Locale locale = Locale(parts[0], parts[1]);
Get.updateLocale(locale); Get.updateLocale(locale);
}else if(languageCodeAndCountryCode.contains('_')){
final List<String> parts = languageCodeAndCountryCode.split('_');
final Locale locale = Locale(parts[0], parts[1]);
Get.updateLocale(locale);
}
Storage.setBool(saveIsVip, entity.data!.isVip == 1); Storage.setBool(saveIsVip, entity.data!.isVip == 1);
if (entity.data!.deviceId != null) { if (entity.data!.deviceId != null) {

View File

@ -1,4 +1,3 @@
import 'app_settings/app_settings.dart';
import 'flavors.dart'; import 'flavors.dart';
import 'main.dart' as runner; import 'main.dart' as runner;

View File

@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:package_info_plus/package_info_plus.dart'; import 'package:package_info_plus/package_info_plus.dart';
@ -97,7 +98,7 @@ class _AboutPageState extends State<AboutPage> {
endIndent: 20.w, endIndent: 20.w,
), ),
CommonItem( CommonItem(
leftTitel: '隐私政策'.tr, leftTitel: '用户协议'.tr,
rightTitle: '', rightTitle: '',
isHaveLine: false, isHaveLine: false,
isHaveDirection: true, isHaveDirection: true,
@ -210,7 +211,9 @@ class _AboutPageState extends State<AboutPage> {
), ),
), ),
), ),
ClipRRect( GestureDetector(
onTap: logic.handleTap,
child: ClipRRect(
borderRadius: BorderRadius.circular(20.r), borderRadius: BorderRadius.circular(20.r),
child: Image.asset( child: Image.asset(
F.sw( F.sw(
@ -219,6 +222,7 @@ class _AboutPageState extends State<AboutPage> {
width: 160.w, width: 160.w,
height: 160.w), height: 160.w),
), ),
),
SizedBox(height: 20.h), SizedBox(height: 20.h),
Text( Text(
'${F.title} $version+$buildNumber', '${F.title} $version+$buildNumber',

View File

@ -9,10 +9,11 @@ import 'package:star_lock/mine/mall/lockMall_entity.dart';
import 'package:star_lock/mine/mall/lockMall_state.dart'; import 'package:star_lock/mine/mall/lockMall_state.dart';
import 'package:star_lock/mine/mall/webview/webview_logic.dart'; import 'package:star_lock/mine/mall/webview/webview_logic.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/pay/wx_pay_tool.dart';
import 'package:webview_flutter/webview_flutter.dart'; import 'package:webview_flutter/webview_flutter.dart';
import '../../tools/baseGetXController.dart'; import '../../tools/baseGetXController.dart';
import '../../tools/wechat/pay/wx_pay_tool.dart';
import '../../tools/wechat/wechatManageTool.dart';
class LockMallLogic extends BaseGetXController { class LockMallLogic extends BaseGetXController {
late LockMallState state; late LockMallState state;
@ -73,7 +74,10 @@ class LockMallLogic extends BaseGetXController {
switch (action) { switch (action) {
case 'WechatPayParams': case 'WechatPayParams':
// //
WechatManageTool.getAppInfo(() {
wxPay(data, callFun); wxPay(data, callFun);
});
// wxPay(data, callFun);
break; break;
} }
} }

View File

@ -5,13 +5,14 @@ import 'package:get/get.dart';
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/flavors.dart'; import 'package:star_lock/flavors.dart';
import 'package:star_lock/mine/mine/starLockMine_state.dart'; import 'package:star_lock/mine/mine/starLockMine_state.dart';
import 'package:star_lock/tools/customer_tool.dart'; import 'package:star_lock/tools/wechat/customer_tool.dart';
import '../../appRouters.dart'; import '../../appRouters.dart';
import '../../app_settings/app_colors.dart'; import '../../app_settings/app_colors.dart';
import '../../baseWidget.dart'; import '../../baseWidget.dart';
import '../../tools/customNetworkImage.dart'; import '../../tools/customNetworkImage.dart';
import '../../tools/submitBtn.dart'; import '../../tools/submitBtn.dart';
import '../../tools/wechat/wechatManageTool.dart';
import 'starLockMine_logic.dart'; import 'starLockMine_logic.dart';
class StarLockMinePage extends StatefulWidget { class StarLockMinePage extends StatefulWidget {
@ -207,7 +208,7 @@ class StarLockMinePageState extends State<StarLockMinePage> with BaseWidget {
mineItem('images/mine/icon_mine_main_shoppingcart.png', mineItem('images/mine/icon_mine_main_shoppingcart.png',
'客服'.tr, () { '客服'.tr, () {
Get.back(); Get.back();
CustomerTool.openCustomerService(); WechatManageTool.getAppInfo(CustomerTool.openCustomerService);
}), }),
mineItem('images/mine/icon_mine_main_about.png', '关于'.tr, () { mineItem('images/mine/icon_mine_main_about.png', '关于'.tr, () {
Get.back(); Get.back();

View File

@ -102,8 +102,8 @@ class MineSetLogic extends BaseGetXController {
//退 //退
Future<void> userLogoutRequest() async { Future<void> userLogoutRequest() async {
var getPushDeviceID = ''; String getPushDeviceID = '';
await Storage.getString(pushDeviceID).then((value) { await Storage.getString(pushDeviceID).then((String? value) {
if (value != null && value.isNotEmpty) { if (value != null && value.isNotEmpty) {
getPushDeviceID = value; getPushDeviceID = value;
} }
@ -118,7 +118,7 @@ class MineSetLogic extends BaseGetXController {
BlueManage().disconnect(); BlueManage().disconnect();
XSJPushProvider().initLocalNotification(isCancelLocalPush: true); XSJPushProvider().initLocalNotification(isCancelLocalPush: true);
Get.offNamedUntil(Routers.starLockLoginPage, (route) => false); Get.offNamedUntil(Routers.starLockLoginPage, (Route route) => false);
} }
} }
@ -129,7 +129,7 @@ class MineSetLogic extends BaseGetXController {
// //
Future<void> updateTouchUnlockRequest() async { Future<void> updateTouchUnlockRequest() async {
ExpireLockListEntity entity = await ApiRepository.to final ExpireLockListEntity entity = await ApiRepository.to
.setTouchUnlockFlag(state.isTouchUnlock.value == true ? '1' : '2'); .setTouchUnlockFlag(state.isTouchUnlock.value == true ? '1' : '2');
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
showToast('设置成功'.tr); showToast('设置成功'.tr);
@ -141,16 +141,18 @@ class MineSetLogic extends BaseGetXController {
StreamSubscription? _getNumberEvent; StreamSubscription? _getNumberEvent;
void _initLoadDataAction() { void _initLoadDataAction() {
// eventBus // eventBus
_getNumberEvent = eventBus.on<ChangeLanguageBlockLastLanguageEvent>().listen((event) { _getNumberEvent = eventBus.on<ChangeLanguageBlockLastLanguageEvent>().listen((ChangeLanguageBlockLastLanguageEvent event) {
state.currentLanguage.value = _getCurrentLanguage(); state.currentLanguage.value = _getCurrentLanguage();
}); });
} }
String _getCurrentLanguage() { String _getCurrentLanguage() {
String currentLanguage = ExtensionLanguageType.fromLocale(appDept.deptSupportedLocales.where((Locale element) => String? languageCode = StoreService.to.getLanguageCode();
element.languageCode == StoreService.to.getLanguageCode()).first).lanTitle; if(languageCode!.isEmpty){
// AppLog.log('currentLanguagecurrentLanguage:$currentLanguage StoreService.to.getLanguageCode():${StoreService.to.getLanguageCode()}'); languageCode = Get.deviceLocale!.languageCode;
return currentLanguage ??''; }
final String currentLanguage = ExtensionLanguageType.fromLocale(appDept.deptSupportedLocales.where((Locale element) => element.languageCode == languageCode).first).lanTitle;
return currentLanguage;
} }
@override @override

View File

@ -10,13 +10,14 @@ import 'package:permission_handler/permission_handler.dart';
import 'package:star_lock/flavors.dart'; import 'package:star_lock/flavors.dart';
import 'package:star_lock/mine/mineSet/mineSet/mineSet_logic.dart'; import 'package:star_lock/mine/mineSet/mineSet/mineSet_logic.dart';
import 'package:star_lock/mine/mineSet/mineSet/mineSet_state.dart'; import 'package:star_lock/mine/mineSet/mineSet/mineSet_state.dart';
import 'package:star_lock/tools/customer_tool.dart'; import 'package:star_lock/tools/wechat/customer_tool.dart';
import '../../../appRouters.dart'; import '../../../appRouters.dart';
import '../../../app_settings/app_colors.dart'; import '../../../app_settings/app_colors.dart';
import '../../../tools/commonItem.dart'; import '../../../tools/commonItem.dart';
import '../../../tools/showTipView.dart'; import '../../../tools/showTipView.dart';
import '../../../tools/submitBtn.dart'; import '../../../tools/submitBtn.dart';
import '../../../tools/titleAppBar.dart'; import '../../../tools/titleAppBar.dart';
import '../../../tools/wechat/wechatManageTool.dart';
import '../../../translations/trans_lib.dart'; import '../../../translations/trans_lib.dart';
class MineSetPage extends StatefulWidget { class MineSetPage extends StatefulWidget {
@ -366,7 +367,9 @@ class _MineSetPageState extends State<MineSetPage>
leftTitel: '客服'.tr, leftTitel: '客服'.tr,
isHaveLine: widget.showAbout, isHaveLine: widget.showAbout,
isHaveDirection: true, isHaveDirection: true,
action: CustomerTool.openCustomerService, action: (){
WechatManageTool.getAppInfo(CustomerTool.openCustomerService);
},
), ),
if (widget.showAbout) if (widget.showAbout)
CommonItem( CommonItem(

View File

@ -3,7 +3,6 @@ import 'dart:convert';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:fluwx/fluwx.dart'; import 'package:fluwx/fluwx.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/flavors.dart'; import 'package:star_lock/flavors.dart';
import 'package:star_lock/mine/mall/webview/webview_logic.dart'; import 'package:star_lock/mine/mall/webview/webview_logic.dart';
@ -11,9 +10,11 @@ import 'package:star_lock/mine/valueAddedServices/advancedFeaturesWeb/advancedFe
import 'package:star_lock/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_state.dart'; import 'package:star_lock/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_state.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/pay/wx_pay_tool.dart';
import 'package:webview_flutter/webview_flutter.dart'; import 'package:webview_flutter/webview_flutter.dart';
import '../../../tools/wechat/pay/wx_pay_tool.dart';
import '../../../tools/wechat/wechatManageTool.dart';
class AdvancedFeaturesWebLogic extends BaseGetXController { class AdvancedFeaturesWebLogic extends BaseGetXController {
late AdvancedFeaturesWebState state = AdvancedFeaturesWebState(); late AdvancedFeaturesWebState state = AdvancedFeaturesWebState();
@ -86,7 +87,10 @@ class AdvancedFeaturesWebLogic extends BaseGetXController {
switch (action) { switch (action) {
case 'WechatPayParams': case 'WechatPayParams':
// //
WechatManageTool.getAppInfo(() {
wxPay(data, callFun); wxPay(data, callFun);
});
// wxPay(data, callFun);
break; break;
} }
} }

View File

@ -5,6 +5,6 @@ import 'package:star_lock/app_settings/app_settings.dart';
FutureOr<Request> requestLogInterceptor(Request request) async { FutureOr<Request> requestLogInterceptor(Request request) async {
// AppLog.log('GET HTTP REQUEST \n${request.url} \n${request.headers} ${request.toString()} '); // AppLog.log('GET HTTP REQUEST \n${request.url} \n${request.headers} ${request.toString()} ');
AppLog.log('请求头:${request.headers.toString()}'); // AppLog.log('请求头:${request.headers.toString()}');
return request; return request;
} }

View File

@ -8,7 +8,7 @@ import 'package:star_lock/main/lockMian/lockMain/xhj/lockMain_xhj_page.dart';
import 'package:star_lock/mine/about/debug/debug_tool.dart'; import 'package:star_lock/mine/about/debug/debug_tool.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/appFirstEnterHandle.dart'; import 'package:star_lock/tools/appFirstEnterHandle.dart';
import 'package:star_lock/tools/customer_tool.dart'; import 'package:star_lock/tools/wechat/customer_tool.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
import '../main/lockMian/lockMain/lockMain_page.dart'; import '../main/lockMian/lockMain/lockMain_page.dart';

View File

@ -1,22 +1,22 @@
// Audio player task implementation // Audio player task implementation
import 'package:audio_service/audio_service.dart'; // import 'package:audio_service/audio_service.dart';
class AudioPlayerTask extends BackgroundAudioTask { // class AudioPlayerTask extends BackgroundAudioTask {
@override // @override
Future<void> onStart(Map<String, dynamic>? params) async { // Future<void> onStart(Map<String, dynamic>? params) async {
// Load and play audio here // // Load and play audio here
// Example: // // Example:
// AudioPlayer audioPlayer = AudioPlayer(); // // AudioPlayer audioPlayer = AudioPlayer();
// await audioPlayer.play('path_to_audio.mp3'); // // await audioPlayer.play('path_to_audio.mp3');
} // }
//
@override // @override
Future<void> onStop() async { // Future<void> onStop() async {
// Stop audio playback and clean up resources // // Stop audio playback and clean up resources
} // }
//
@override // @override
Future<void> onPause() async { // Future<void> onPause() async {
// Pause audio playback // // Pause audio playback
} // }
} // }

View File

@ -6,20 +6,16 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/appRouters.dart'; import 'package:star_lock/appRouters.dart';
import 'package:star_lock/app_settings/app_colors.dart'; import 'package:star_lock/app_settings/app_colors.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/flavors.dart'; import 'package:star_lock/flavors.dart';
import 'package:star_lock/login/login/app_get_version.dart'; import 'package:star_lock/login/login/app_get_version.dart';
import 'package:star_lock/login/login/starLock_login_logic.dart'; import 'package:star_lock/login/login/starLock_login_logic.dart';
import 'package:star_lock/main.dart'; import 'package:star_lock/main.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/customer_tool.dart';
import 'package:star_lock/tools/pay/wx_pay_tool.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
import 'package:star_lock/tools/wechat/customer_tool.dart';
import '../versionUndate/versionUndateTool.dart'; import '../versionUndate/versionUndateTool.dart';
import 'bugly/bugly_tool.dart';
import 'push/xs_jPhush.dart';
class AppFirstEnterHandle { class AppFirstEnterHandle {
Future<void> getAppFirstEnter(String flagStr) async { Future<void> getAppFirstEnter(String flagStr) async {
@ -29,7 +25,6 @@ class AppFirstEnterHandle {
if (getFlag != isAgreePrivacy) { if (getFlag != isAgreePrivacy) {
await showPrivacyAgreementAlert(); await showPrivacyAgreementAlert();
} }
getAppInfo();
await privacySDKInitialization(); await privacySDKInitialization();
if (Get.isRegistered<StarLockLoginLogic>()) { if (Get.isRegistered<StarLockLoginLogic>()) {
Get.find<StarLockLoginLogic>().flushedDeviceInfo(); Get.find<StarLockLoginLogic>().flushedDeviceInfo();
@ -69,13 +64,6 @@ class AppFirstEnterHandle {
); );
} }
Future<void> getAppInfo() async {
// AppLog.log('AppFirstEnterHandle调用了获取App信息接口');
final GetAppInfo entity = await ApiRepository.to.getAppInfo();
CustomerTool.init(entity.data?.wechatServiceUrl ?? '');
WxPayTool.setAssociationUrl(entity.data!.appSiteUrl!);
}
// //
Widget _defaultPrivacyAgreementAlert(BuildContext context) { Widget _defaultPrivacyAgreementAlert(BuildContext context) {
return CupertinoAlertDialog( return CupertinoAlertDialog(

View File

@ -0,0 +1,24 @@
import '../../login/login/app_get_version.dart';
import '../../network/api_repository.dart';
import 'customer_tool.dart';
import 'pay/wx_pay_tool.dart';
class WechatManageTool {
static void init(String wechatServiceUrl) {
// CustomerTool.init(wechatServiceUrl);
}
static Future<void> getAppInfo(void Function() action) async {
// AppLog.log('AppFirstEnterHandle调用了获取App信息接口');
final GetAppInfo entity = await ApiRepository.to.getAppInfo();
if(entity.errorCode == 0) {
CustomerTool.init(entity.data?.wechatServiceUrl ?? '');
WxPayTool.setAssociationUrl(entity.data!.appSiteUrl!);
action();
}
}
}

View File

@ -2,47 +2,10 @@ part of lib_trans;
class TranslationMessage extends Translations { class TranslationMessage extends Translations {
// LAN_ZH_CN="zh" #
// LAN_EN_US="en" #
// LAN_ZH_TW="tw" #
// LAN_Fr_FR="fr" #
// LAN_RU_RU="ru" #
// LAN_DE_DE="de" #
// LAN_ZH_JA="ja" #
// LAN_ZH_KO="ko" #
// LAN_ZH_IT="it" #
// #LAN_ZH_TW="uk" #
// LAN_ZH_PT="pt" #
// LAN_ZH_ES="es" # 西
// LAN_ZH_AR="ar" #
// LAN_ZH_vi="vi" #
// LAN_ZH_MS="ms" #
// LAN_ZH_NL="nl" #
// LAN_ZH_RO="ro" #
// LAN_ZH_LT="lt" #
// LAN_ZH_SV="sv" #
// LAN_ZH_ET="et" #
// LAN_ZH_PL="pl" #
// LAN_ZH_SK="sk" #
// LAN_ZH_CS="cs" #
// LAN_ZH_EL="el" #
// LAN_ZH_HE="he" #
// #LAN_ZH_TW="sr" #
// LAN_ZH_TR="tr" #
// LAN_ZH_HU="hu" #
// LAN_ZH_BG="bg" #
// LAN_ZH_KK="kk" # ===
// LAN_ZH_BN="bn" #
// LAN_ZH_HBS="hr" #
// LAN_ZH_TH="th" #
// LAN_ZH_ID="id" # 西
// LAN_ZH_FI="fi" #
// LAN_ZH_DA="da" #
@override @override
Map<String, Map<String, String>> get keys => { Map<String, Map<String, String>> get keys => {
'en_US' : TranslationLoader.enDic,
'zh_CN': TranslationLoader.zhDic, 'zh_CN': TranslationLoader.zhDic,
'en_US' : TranslationLoader.enDic,
'zh_TW': TranslationLoader.twDic, 'zh_TW': TranslationLoader.twDic,
'fr_FR': TranslationLoader.frDic, 'fr_FR': TranslationLoader.frDic,
'ru_RU': TranslationLoader.ruDic, 'ru_RU': TranslationLoader.ruDic,

View File

@ -87,8 +87,10 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# 1.0.75+2024081001锁定版本上架商城 # 1.0.75+2024081001锁定版本上架商城
# 1.0.76+2024081201锁定版本上架商城--最新版本 # 1.0.76+2024081201锁定版本上架商城--最新版本
# 1.0.78+2024082701测试国际化功能 # 1.0.78+2024082701测试国际化功能
# 1.0.79+2024083001测试所有国家国际化功能
# 1.0.79+2024083001测试开完锁数据上传功能
version: 1.0.78+2024082701 version: 1.0.79+2024090201
environment: environment:
sdk: '>=2.12.0 <3.0.0' sdk: '>=2.12.0 <3.0.0'
@ -220,7 +222,7 @@ dependencies:
timelines: ^0.1.0 timelines: ^0.1.0
#侧滑删除 #侧滑删除
flutter_slidable: ^3.0.1 flutter_slidable: ^3.0.1
audio_service: ^0.18.12 # audio_service: ^0.18.12
app_settings: ^5.1.1 app_settings: ^5.1.1
flutter_local_notifications: ^17.0.0 flutter_local_notifications: ^17.0.0
fluwx: ^4.5.5 fluwx: ^4.5.5