diff --git a/star_lock/images/news_not_read.png b/star_lock/images/news_not_read.png new file mode 100644 index 00000000..be7a8779 Binary files /dev/null and b/star_lock/images/news_not_read.png differ diff --git a/star_lock/images/news_read.png b/star_lock/images/news_read.png new file mode 100644 index 00000000..95dc3cb6 Binary files /dev/null and b/star_lock/images/news_read.png differ diff --git a/star_lock/ios/Podfile.lock b/star_lock/ios/Podfile.lock index e962a17c..c1b43709 100644 --- a/star_lock/ios/Podfile.lock +++ b/star_lock/ios/Podfile.lock @@ -316,7 +316,7 @@ SPEC CHECKSUMS: flutter_native_contact_picker: bd430ba0fbf82768bb50c2c52a69a65759a8f907 flutter_pcm_sound: de0572ca4f99091cc2abfcc31601b8a4ddd33c0e flutter_voice_processor: 2b89b93d69b02227ae3fd58589ee0bcfa3ca2a82 - fluttertoast: 9f2f8e81bb5ce18facb9748d7855bf5a756fe3db + fluttertoast: 31b00dabfa7fb7bacd9e7dbee580d7a2ff4bf265 fluwx: daa284756ce53442b3d0417ceeda66e981906811 google_maps_flutter_ios: d1318b4ff711612cab16862d7a87e31a7403d458 GoogleMaps: 20d7b12be49a14287f797e88e0e31bc4156aaeb4 diff --git a/star_lock/lib/flavors.dart b/star_lock/lib/flavors.dart index 19d54133..7cc0ef63 100644 --- a/star_lock/lib/flavors.dart +++ b/star_lock/lib/flavors.dart @@ -109,8 +109,8 @@ class F { case Flavor.sky: return 'https://lock.skychip.top'; case Flavor.xhj: - return 'https://lock.xhjcn.ltd'; - // return 'https://pre.lock.star-lock.cn'; + // return 'https://lock.xhjcn.ltd'; + return 'https://pre.lock.star-lock.cn'; default: throw Exception('flavor[$name] apiPrefix not found'); } diff --git a/star_lock/lib/main/lockMian/lockMain/xhj/lockMain_xhj_page.dart b/star_lock/lib/main/lockMian/lockMain/xhj/lockMain_xhj_page.dart index c7106e91..bc82bb14 100644 --- a/star_lock/lib/main/lockMian/lockMain/xhj/lockMain_xhj_page.dart +++ b/star_lock/lib/main/lockMian/lockMain/xhj/lockMain_xhj_page.dart @@ -10,6 +10,7 @@ import 'package:star_lock/main/lockMian/lockMain/lockMain_page.dart'; import 'package:star_lock/main/lockMian/lockMain/xhj/lockMain_xhj_logic.dart'; import 'package:star_lock/mine/mall/lockMall_page.dart'; import 'package:star_lock/mine/message/messageList/messageList_page.dart'; +import 'package:star_lock/mine/message/messageList/messageList_xhj_page.dart'; import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_page.dart'; import 'package:star_lock/tools/noData.dart'; import 'package:star_lock/tools/submitBtn.dart'; @@ -64,7 +65,7 @@ class _StarLockMainXHJPageState extends State pageView( widget: SafeArea( bottom: false, - child: MessageListPage( + child: MessageListXHJPage( showAppBar: false, ), ), diff --git a/star_lock/lib/mine/message/messageList/messageList_xhj_page.dart b/star_lock/lib/mine/message/messageList/messageList_xhj_page.dart new file mode 100644 index 00000000..9d89898a --- /dev/null +++ b/star_lock/lib/mine/message/messageList/messageList_xhj_page.dart @@ -0,0 +1,235 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:star_lock/tools/noData.dart'; + +import '../../../appRouters.dart'; +import '../../../app_settings/app_colors.dart'; +import '../../../tools/EasyRefreshTool.dart'; +import '../../../tools/dateTool.dart'; +import '../../../tools/showTipView.dart'; +import '../../../tools/storage.dart'; +import '../../../tools/titleAppBar.dart'; +import '../../../translations/trans_lib.dart'; +import 'messageList_entity.dart'; +import 'messageList_logic.dart'; +import 'package:flutter_slidable/flutter_slidable.dart'; + +class MessageListXHJPage extends StatefulWidget { + MessageListXHJPage({Key? key, this.showAppBar = true}) : super(key: key); + bool showAppBar; + + @override + State createState() => _MessageListXHJPageState(); +} + +class _MessageListXHJPageState extends State + with TickerProviderStateMixin { + final logic = Get.put(MessageListLogic()); + final state = Get.find().state; + + void getHttpData() { + logic.messageListDataRequest().then((MessageListEntity value) { + setState(() {}); + }); + } + + @override + void initState() { + super.initState(); + + getHttpData(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.white, + appBar: widget.showAppBar + ? TitleAppBar( + barTitle: TranslationLoader.lanKeys!.message!.tr, + haveBack: true, + actionsList: [ + TextButton( + child: Text( + "清空".tr, + style: TextStyle(color: Colors.white, fontSize: 24.sp), + ), + onPressed: () async { + var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); + if (isDemoMode == false) { + ShowTipView().showIosTipWithContentDialog("是否清空?".tr, + () async { + logic.deletAllMessageDataRequest(); + }); + } else { + logic.showToast("演示模式".tr); + } + }, + ), + ], + backgroundColor: AppColors.mainColor) + : null, + body: Column( + children: [ + Container( + width: 1.sw, + height: 0.2.sw, + margin: EdgeInsets.symmetric(horizontal: 15.w), + padding: EdgeInsets.symmetric(horizontal: 25.w), + decoration: BoxDecoration( + image: const DecorationImage( + image: AssetImage('images/xhj_main_bg.jpg'), + fit: BoxFit.cover, + ), + borderRadius: BorderRadius.circular(20.r), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.15), + offset: const Offset(0, 0), + blurRadius: 10.r, + spreadRadius: 0, + ), + ], + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + '智能分析', + style: TextStyle( + color: AppColors.blackColor, + fontSize: 28.sp, + fontWeight: FontWeight.w600, + ), + ), + Text( + '精准识别设备事件,过滤无效信息', + style: TextStyle( + color: AppColors.blackColor.withOpacity(0.6), + fontSize: 20.sp, + fontWeight: FontWeight.w600, + ), + ), + ], + ), + ), + Expanded( + child: EasyRefreshTool(onRefresh: () { + logic.pageNo = 1; + getHttpData(); + }, onLoad: () { + getHttpData(); + }, child: Obx(() { + return state.itemDataList.isEmpty + ? NoData() + : SlidableAutoCloseBehavior( + child: ListView.builder( + itemCount: state.itemDataList.length, + padding: EdgeInsets.only(top: 20.h), + itemBuilder: (c, index) { + MessageItemEntity messageItemEntity = + state.itemDataList[index]; + return Slidable( + key: ValueKey(messageItemEntity.id), + endActionPane: ActionPane( + extentRatio: 0.2, + motion: const ScrollMotion(), + children: [ + SlidableAction( + onPressed: (BuildContext context) { + logic.deletMessageDataRequest( + messageItemEntity.id!, () { + logic.pageNo = 1; + getHttpData(); + }); + }, + backgroundColor: Colors.red, + foregroundColor: Colors.white, + label: '删除'.tr, + padding: + EdgeInsets.only(left: 5.w, right: 5.w), + ), + ], + ), + child: _messageListItem(messageItemEntity, () { + Get.toNamed(Routers.messageDetailPage, + arguments: { + "messageItemEntity": messageItemEntity + }); + }), + ); + }), + ); + })), + ), + ], + ), + ); + } + + Widget _messageListItem( + MessageItemEntity messageItemEntity, Function() action) { + bool isNotRead = messageItemEntity.readAt! == 0; + return GestureDetector( + onTap: action, + child: Container( + margin: EdgeInsets.symmetric(vertical: 12.h, horizontal: 15.w), + padding: EdgeInsets.symmetric(vertical: 20.h, horizontal: 20.w), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(20.w), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.15), + offset: const Offset(0, 0), + blurRadius: 10.r, + spreadRadius: 0, + ), + ], + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image.asset( + isNotRead ? 'images/news_not_read.png' : 'images/news_read.png', + width: 48.r, + height: 48.r), + SizedBox(width: 15.w), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + messageItemEntity.data!, + maxLines: 1, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.start, + style: TextStyle( + fontSize: 22.sp, + color: messageItemEntity.readAt! == 0 + ? AppColors.blackColor + : AppColors.placeholderTextColor), + ), + SizedBox( + height: 5.h, + ), + Text( + DateTool().dateToYMDHNString( + messageItemEntity.createdAt!.toString()), + style: TextStyle( + fontSize: 18.sp, + color: messageItemEntity.readAt! == 0 + ? AppColors.blackColor + : AppColors.placeholderTextColor)), + ], + ), + ), + ], + ), + ), + ); + } +} diff --git a/star_lock/lib/tools/titleAppBar.dart b/star_lock/lib/tools/titleAppBar.dart index 0f5b3b8a..5d59fec9 100644 --- a/star_lock/lib/tools/titleAppBar.dart +++ b/star_lock/lib/tools/titleAppBar.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:star_lock/app_settings/app_colors.dart'; +import 'package:star_lock/flavors.dart'; class TitleAppBar extends AppBar { @override @@ -38,6 +40,8 @@ class TitleAppBar extends AppBar { class _TitleAppBarState extends State { @override Widget build(BuildContext context) { + Color defaultColor = F.sw( + defaultCall: () => Colors.white, xhjCall: () => AppColors.blackColor); return AppBar( elevation: 0, leading: widget.haveOtherLeftWidget! @@ -45,7 +49,7 @@ class _TitleAppBarState extends State { : (widget.haveBack ?? false ? IconButton( icon: Icon(Icons.arrow_back_ios, - color: widget.iconColor ?? Colors.white), + color: widget.iconColor ?? defaultColor), onPressed: () { if (widget.backAction != null) { widget.backAction!(); @@ -57,12 +61,14 @@ class _TitleAppBarState extends State { } }) : Container()), - backgroundColor: widget.backgroundColor ?? Colors.white, + backgroundColor: F.sw( + defaultCall: () => widget.backgroundColor ?? defaultColor, + xhjCall: () => Colors.white), title: widget.haveTitleWidget! ? widget.titleWidget : Text(widget.barTitle ?? '', style: TextStyle( - color: widget.titleColor ?? Colors.white, + color: widget.titleColor ?? defaultColor, fontSize: 28.sp, fontWeight: FontWeight.w600)), centerTitle: true,