From 6efa96a0d6b544eb3eb6d0b21ef2097ed1282103 Mon Sep 17 00:00:00 2001 From: CYH <13923927013@163.com> Date: Wed, 6 Mar 2024 15:01:18 +0800 Subject: [PATCH] =?UTF-8?q?2.0.2=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- circle_app/android/app/build.gradle | 4 +- .../assets/images/circle/search_bg_icon.png | Bin 0 -> 68528 bytes .../assets/images/circle/search_icon.png | Bin 0 -> 2527 bytes circle_app/ios/Podfile.lock | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 +- .../tim_uikit_text_field_layout/narrow.dart | 25 +- circle_app/lib/app/chat/view.dart | 542 +++++++++++------- circle_app/lib/app/circle/logic.dart | 2 - circle_app/lib/app/circle/view.dart | 4 +- .../lib/app/circle/widgets/discover.dart | 4 +- .../lib/app/circle/widgets/discover_item.dart | 3 +- .../app/circle/widgets/info_list_view.dart | 58 +- .../lib/app/circle/widgets/like_view.dart | 18 +- .../lib/app/circle/widgets/vicinity.dart | 3 +- .../lib/app/msg/sys_notify_list/logic.dart | 1 + circle_app/lib/app/quick/view.dart | 7 +- circle_app/lib/app/swiper/logic.dart | 6 +- circle_app/lib/app/swiper/view.dart | 47 +- circle_app/lib/app/userinfo/logic.dart | 5 +- .../common/Widgets/today_people_dialog.dart | 45 +- circle_app/lib/view/notice.dart | 189 ++++-- circle_app/pubspec.yaml | 2 +- 22 files changed, 621 insertions(+), 352 deletions(-) create mode 100644 circle_app/assets/images/circle/search_bg_icon.png create mode 100644 circle_app/assets/images/circle/search_icon.png diff --git a/circle_app/android/app/build.gradle b/circle_app/android/app/build.gradle index a803b88..5941416 100644 --- a/circle_app/android/app/build.gradle +++ b/circle_app/android/app/build.gradle @@ -71,8 +71,8 @@ android { // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion 21 targetSdkVersion flutter.targetSdkVersion - versionCode 52 - versionName "2.0.2" + versionCode 53 + versionName "2.0.3" manifestPlaceholders = [ vivo_APPID: "105669716", vivo_APPKEY:"84f750207787376b310ca5b0d5969122", diff --git a/circle_app/assets/images/circle/search_bg_icon.png b/circle_app/assets/images/circle/search_bg_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..13c1681f5c458f65e2f4204899af7b706f3a9c42 GIT binary patch literal 68528 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 literal 0 HcmV?d00001 diff --git a/circle_app/ios/Podfile.lock b/circle_app/ios/Podfile.lock index d74bbf1..0359ca2 100644 --- a/circle_app/ios/Podfile.lock +++ b/circle_app/ios/Podfile.lock @@ -315,7 +315,7 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/webview_flutter_wkwebview/ios" SPEC CHECKSUMS: - app_settings: 54b8813f690b34f757c0bf97a46637bed5acc76c + app_settings: d103828c9f5d515c4df9ee754dabd443f7cedcf3 audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40 BMKLocationKit: a93bc412af3a601f12d243f4fb83f77650103e56 Bugly: b8715e6ec4004b7f7fbffab0643ba80545aee3da diff --git a/circle_app/ios/Runner.xcodeproj/project.pbxproj b/circle_app/ios/Runner.xcodeproj/project.pbxproj index 388aa94..57db7c9 100644 --- a/circle_app/ios/Runner.xcodeproj/project.pbxproj +++ b/circle_app/ios/Runner.xcodeproj/project.pbxproj @@ -383,7 +383,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.4.5; + MARKETING_VERSION = 2.0.1; PRODUCT_BUNDLE_IDENTIFIER = com.example.kyApp; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; @@ -534,7 +534,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.4.5; + MARKETING_VERSION = 2.0.1; PRODUCT_BUNDLE_IDENTIFIER = com.example.kyApp; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; @@ -579,7 +579,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.4.5; + MARKETING_VERSION = 2.0.1; PRODUCT_BUNDLE_IDENTIFIER = com.example.kyApp; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; diff --git a/circle_app/lib/app/chat/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart b/circle_app/lib/app/chat/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart index 12604d9..cf03153 100644 --- a/circle_app/lib/app/chat/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart +++ b/circle_app/lib/app/chat/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart @@ -743,7 +743,8 @@ class _TIMTextFieldLayoutNarrowState getImageFile(); }, child: - Image.asset(getMsgImage('photo'), width: 40.sp), + Opacity(opacity: 0.75, + child: Image.asset(getMsgImage('photo'), width: 40.sp)), ), GestureDetector( onTap: () { @@ -754,8 +755,10 @@ class _TIMTextFieldLayoutNarrowState } getTakeImageFile(); }, - child: Image.asset(getMsgImage('take_photo'), - width: 40.sp), + child: Opacity(opacity: 0.75, + child: Image.asset(getMsgImage('take_photo'), + width: 40.sp), + ), ), GestureDetector( onTap: () async { @@ -780,8 +783,10 @@ class _TIMTextFieldLayoutNarrowState } getVideoFile(ImageSource.gallery); }, - child: Image.asset(getMsgImage('icon_video'), - width: 40.sp), + child: Opacity(opacity: 0.75, + child: Image.asset(getMsgImage('icon_video'), + width: 40.sp), + ), ), GestureDetector( onTap: () { @@ -792,8 +797,10 @@ class _TIMTextFieldLayoutNarrowState } getVideoFile(ImageSource.camera); }, - child: Image.asset(getMsgImage('icon_video_camera'), - width: 40.sp), + child: Opacity(opacity: 0.75, + child: Image.asset(getMsgImage('icon_video_camera'), + width: 40.sp), + ), ), ], ), @@ -884,6 +891,10 @@ class _TIMTextFieldLayoutNarrowState ); } + opacityWidget(Widget child) { + return Opacity(opacity: 0.75,child: widget,); + } + chatActionWidget(String img, String action, GestureTapCallback onTap) { return GestureDetector( onTap: onTap, diff --git a/circle_app/lib/app/chat/view.dart b/circle_app/lib/app/chat/view.dart index b7328c7..8b1a969 100644 --- a/circle_app/lib/app/chat/view.dart +++ b/circle_app/lib/app/chat/view.dart @@ -9,6 +9,7 @@ import 'package:circle_app/network/api.dart'; import 'package:circle_app/network/dio_manager.dart'; import 'package:circle_app/router/app_routers.dart'; import 'package:circle_app/util/util.dart'; +import 'package:circle_app/view/notice.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; @@ -16,13 +17,12 @@ import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_chat_glo import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; import 'package:tencent_cloud_chat_uikit/ui/controller/tim_uikit_chat_controller.dart'; +import '../../common/colors/app_color.dart'; import '../../util/eventBus.dart'; import '../userinfo/logic.dart'; class ChatPage extends StatefulWidget { - - ChatPage({Key? key}) - : super(key: key); + ChatPage({Key? key}) : super(key: key); @override State createState() => _ChatPageState(); @@ -32,6 +32,10 @@ class _ChatPageState extends State { // final logic = Get.find(); // // final state = Get.find().state; + + bool isShowTip = false; + String tip = 'Ta主页形象质量不错哦,您也完善一下呗,点击前往'; + @override void dispose() { // TODO: implement dispose @@ -40,9 +44,9 @@ class _ChatPageState extends State { } final TIMUIKitChatController _timuiKitChatController = - TIMUIKitChatController(); + TIMUIKitChatController(); V2TimConversation con = Get.arguments; - User? userInfoBean; + UserBean? userInfoBean; UserBean? otherUserBean; String conversationID = ''; bool isBlack = false; @@ -54,25 +58,26 @@ class _ChatPageState extends State { super.initState(); initEventBus(); loadMyInfo(); - loadUserData(); } - - void loadIsShowSendGiftDialogData() async { - var data = await DioManager.instance.get(url: Api.isShow_give_gift + conversationID.split('_').last); + var data = await DioManager.instance + .get(url: Api.isShow_give_gift + conversationID.split('_').last); if (data['code'] == 200) { if (data['data']) { - Get.bottomSheet(SendGiftDialog(accid: conversationID,title: data['msg'],), isScrollControlled: true, + Get.bottomSheet( + SendGiftDialog( + accid: conversationID, + title: data['msg'], + ), + isScrollControlled: true, enableDrag: false); } } } - loadUserData() async { - conversationID = con!.conversationID!; String url = "${Api.getUserInfoTA + conversationID.split('_').last}/home"; var data = await DioManager.instance.get(url: url); @@ -82,48 +87,71 @@ class _ChatPageState extends State { if (bean.isSuccess()) { otherUserBean = bean.data.user; + if (!isShowTip) { - setState(() { - - }); + fetchMyAlbum(Api.getMyAlbum); + } + setState(() {}); } loadIsShowSendGiftDialogData(); } + Future fetchMyAlbum(String url) async { + var myAlbumData = await DioManager.instance.get(url: url); + var myAlbumBean = BaseResponse.fromJson( + myAlbumData, (myAlbumData) => AlbumResponseBean.fromJson(myAlbumData)); - initEventBus()async{ - sub = EventBusManager.on().listen((event) async{ - V2TimValueCallback? sendMessageRes = - await _timuiKitChatController.sendMessage( - messageInfo: event.createCustomMessageRes?.data?.messageInfo); - if (sendMessageRes!.code == 0) { - // 发送成功 - if (sendMessageRes.data?.customElem?.extension != 'cardData') { - showOKToast('发送成功'); - } - // - sendMessageRes.data?.customElem?.data; //自定义data - sendMessageRes.data?.customElem?.desc; //自定义desc - sendMessageRes.data?.customElem?.extension; //自定义extension - } - }); + if (myAlbumBean.isSuccess()) { + List list = myAlbumBean.data.lists ?? []; + if (list.isEmpty) { + isShowTip = true; + tip = '您还没上传照片,上传后更方便了解,点击前往'; + setState(() { + }); + } else { + if (otherUserBean!.userType == 1 && userInfoBean!.userType != 1) { + isShowTip = true; + setState(() { + + }); + } + } + } } - Widget renderCustomStickerPanel({ - sendTextMessage, - sendFaceMessage, - deleteText, - addCustomEmojiText, - addText, - List defaultCustomEmojiStickerList = const [], - double? height, - double? width - }) { + + initEventBus() async { + sub = EventBusManager.on().listen((event) async { + V2TimValueCallback? sendMessageRes = + await _timuiKitChatController.sendMessage( + messageInfo: event.createCustomMessageRes?.data?.messageInfo); + if (sendMessageRes!.code == 0) { + // 发送成功 + if (sendMessageRes.data?.customElem?.extension != 'cardData') { + showOKToast('发送成功'); + } + // + sendMessageRes.data?.customElem?.data; //自定义data + sendMessageRes.data?.customElem?.desc; //自定义desc + sendMessageRes.data?.customElem?.extension; //自定义extension + } + }); + } + + Widget renderCustomStickerPanel( + {sendTextMessage, + sendFaceMessage, + deleteText, + addCustomEmojiText, + addText, + List defaultCustomEmojiStickerList = const [], + double? height, + double? width}) { final defaultEmojiList = - defaultCustomEmojiStickerList.map((customEmojiPackage) { + defaultCustomEmojiStickerList.map((customEmojiPackage) { return CustomStickerPackage( name: customEmojiPackage.name, baseUrl: "assets/custom_face_resource/${customEmojiPackage.name}", @@ -133,7 +161,7 @@ class _ChatPageState extends State { .asMap() .keys .map((idx) => - CustomSticker(index: idx, name: customEmojiPackage.list[idx])) + CustomSticker(index: idx, name: customEmojiPackage.list[idx])) .toList(), menuItem: CustomSticker( index: 0, @@ -141,8 +169,8 @@ class _ChatPageState extends State { )); }).toList(); return StickerPanel( - // height: 100.sp, - backgroundColor:Colors.transparent, + // height: 100.sp, + backgroundColor: Colors.transparent, showBottomContainer: true, sendTextMsg: sendTextMessage, sendFaceMsg: (index, data) => @@ -158,103 +186,185 @@ class _ChatPageState extends State { @override Widget build(BuildContext context) { // - return TIMChat( - conversation: con, - customStickerPanel: renderCustomStickerPanel, - // onTapAvatar :(String userId,TapDownDetails tapDownDetails)async{ - // var data = await Get.toNamed(AppRoutes.UserInfoActivity,arguments: userId.toString().split('_').last,preventDuplicates: false); - // // setState(() { - // // - // // }); - // }, - controller : _timuiKitChatController, - config: TIMUIKitChatConfig( + return Stack( + fit: StackFit.expand, + children: [ + TIMChat( + conversation: con, + customStickerPanel: renderCustomStickerPanel, + // onTapAvatar :(String userId,TapDownDetails tapDownDetails)async{ + // var data = await Get.toNamed(AppRoutes.UserInfoActivity,arguments: userId.toString().split('_').last,preventDuplicates: false); + // // setState(() { + // // + // // }); + // }, + controller: _timuiKitChatController, + config: TIMUIKitChatConfig( + // 仅供演示,非全部配置项,实际使用中,可只传和默认项不同的参数,无需传入所有开关 + isAllowClickAvatar: true, + isUseDefaultEmoji: true, + isAllowLongPressMessage: true, + isShowReadingStatus: true, + isShowGroupReadingStatus: true, + notificationTitle: "", + isUseMessageReaction: true, + notificationBody: + (V2TimMessage message, String convID, ConvType convType) { + // V2TIM_ELEM_TYPE_NONE = 0, ///< 未知消息 + // V2TIM_ELEM_TYPE_TEXT = 1, ///< 文本消息 + // V2TIM_ELEM_TYPE_CUSTOM = 2, ///< 自定义消息 + // V2TIM_ELEM_TYPE_IMAGE = 3, ///< 图片消息 + // V2TIM_ELEM_TYPE_SOUND = 4, ///< 语音消息 + // V2TIM_ELEM_TYPE_VIDEO = 5, ///< 视频消息 + // V2TIM_ELEM_TYPE_FILE = 6, ///< 文件消息 + // V2TIM_ELEM_TYPE_LOCATION = 7, ///< 地理位置消息 + // V2TIM_ELEM_TYPE_FACE = 8, ///< 表情消息 + // V2TIM_ELEM_TYPE_GROUP_TIPS = 9, ///< 群 Tips 消息 + // V2TIM_ELEM_TYPE_MERGER = 10, ///< 合并消息 - // 仅供演示,非全部配置项,实际使用中,可只传和默认项不同的参数,无需传入所有开关 - isAllowClickAvatar: true, - isUseDefaultEmoji: true, - isAllowLongPressMessage: true, - isShowReadingStatus: true, - isShowGroupReadingStatus: true, - notificationTitle: "", - isUseMessageReaction: true, - notificationBody: (V2TimMessage message, String convID, ConvType convType) { - // V2TIM_ELEM_TYPE_NONE = 0, ///< 未知消息 - // V2TIM_ELEM_TYPE_TEXT = 1, ///< 文本消息 - // V2TIM_ELEM_TYPE_CUSTOM = 2, ///< 自定义消息 - // V2TIM_ELEM_TYPE_IMAGE = 3, ///< 图片消息 - // V2TIM_ELEM_TYPE_SOUND = 4, ///< 语音消息 - // V2TIM_ELEM_TYPE_VIDEO = 5, ///< 视频消息 - // V2TIM_ELEM_TYPE_FILE = 6, ///< 文件消息 - // V2TIM_ELEM_TYPE_LOCATION = 7, ///< 地理位置消息 - // V2TIM_ELEM_TYPE_FACE = 8, ///< 表情消息 - // V2TIM_ELEM_TYPE_GROUP_TIPS = 9, ///< 群 Tips 消息 - // V2TIM_ELEM_TYPE_MERGER = 10, ///< 合并消息 + if (userInfoBean == null) { + loadMyInfo(); + } - if (userInfoBean == null) { - loadMyInfo(); - } - - if (message.elemType ==1) { - return ((userInfoBean!.nickname ?? '昵称待审核').isNotEmpty ? (userInfoBean!.nickname ?? '昵称待审核') +':' : '') + message.textElem!.text! ?? ''; - } else if (message.elemType == 3) { - return ((userInfoBean!.nickname ?? '昵称待审核').isNotEmpty ? (userInfoBean!.nickname ?? '昵称待审核') +':' : '') + '发了一张图片'; - } else if (message.elemType == 4) { - return ((userInfoBean!.nickname ?? '昵称待审核').isNotEmpty ? (userInfoBean!.nickname ?? '昵称待审核') +':' : '') + '发了一条语音'; - } else if (message.elemType == 5) { - return ((userInfoBean!.nickname ?? '昵称待审核').isNotEmpty ? (userInfoBean!.nickname ?? '昵称待审核') +':' : '') + '发了一条视频'; - } else { - return ((userInfoBean!.nickname ?? '昵称待审核').isNotEmpty ? (userInfoBean!.nickname ?? '昵称待审核') +':' : '') + '发了一条消息'; - } - - }, - groupReadReceiptPermissionList: [ - GroupReceiptAllowType.work, - GroupReceiptAllowType.meeting, - GroupReceiptAllowType.public - ], - ), - customAppBar:MyAppBar( - centerTitle: '', - actionWdiget: GestureDetector( - onTap: () { - Get.bottomSheet( - MoreDialog( + if (message.elemType == 1) { + return ((userInfoBean!.nickname ?? '昵称待审核').isNotEmpty + ? (userInfoBean!.nickname ?? '昵称待审核') + ':' + : '') + + message.textElem!.text! ?? + ''; + } else if (message.elemType == 3) { + return ((userInfoBean!.nickname ?? '昵称待审核').isNotEmpty + ? (userInfoBean!.nickname ?? '昵称待审核') + ':' + : '') + + '发了一张图片'; + } else if (message.elemType == 4) { + return ((userInfoBean!.nickname ?? '昵称待审核').isNotEmpty + ? (userInfoBean!.nickname ?? '昵称待审核') + ':' + : '') + + '发了一条语音'; + } else if (message.elemType == 5) { + return ((userInfoBean!.nickname ?? '昵称待审核').isNotEmpty + ? (userInfoBean!.nickname ?? '昵称待审核') + ':' + : '') + + '发了一条视频'; + } else { + return ((userInfoBean!.nickname ?? '昵称待审核').isNotEmpty + ? (userInfoBean!.nickname ?? '昵称待审核') + ':' + : '') + + '发了一条消息'; + } + }, + groupReadReceiptPermissionList: [ + GroupReceiptAllowType.work, + GroupReceiptAllowType.meeting, + GroupReceiptAllowType.public + ], + ), + customAppBar: MyAppBar( + centerTitle: '', + actionWdiget: GestureDetector( + onTap: () { + Get.bottomSheet( + MoreDialog( sessionId: conversationID, - userId: (otherUserBean?.id ?? 0) > 0 ? otherUserBean!.id!.toString() : '', + userId: (otherUserBean?.id ?? 0) > 0 + ? otherUserBean!.id!.toString() + : '', deleteMsgCallBack: () { // context.read().clearMsg(); // ChatViewModel viewModel = context.read(); // viewModel.messageList.clear(); // viewModel.notifyListeners(); - },blackCallBack: () { + }, + blackCallBack: () { loadUserData(); - },), - isScrollControlled: true); - // defaultAvatarTap(widget.sessionId, isSelf:false); - }, - child: Image.asset( - getMsgImage('msg_more'), - width: 24.sp, - )), - onPressed: () {}, + }, + ), + isScrollControlled: true); + // defaultAvatarTap(widget.sessionId, isSelf:false); + }, + child: Image.asset( + getMsgImage('msg_more'), + width: 24.sp, + )), + onPressed: () {}, + ), + + userAvatarBuilder: (BuildContext context, V2TimMessage message) { + return avatarWidget( + (message.faceUrl?.isNotEmpty ?? false) + ? message.faceUrl! + : 'https://qiniuyun.leyuan666.com/quanzi/avatar/default.png', + message!); + }, ), - - userAvatarBuilder: (BuildContext context, V2TimMessage message) { - return avatarWidget((message.faceUrl?.isNotEmpty ?? false) ? message.faceUrl! : 'https://qiniuyun.leyuan666.com/quanzi/avatar/default.png',message!); - }, - + if (isShowTip) + Positioned(child: tipWidget(tip)), + ], ); } - avatarWidget(String url,V2TimMessage message, {double width = 34}) { + tipWidget(String tip) { + return Column( + children: [ + GestureDetector( + onTap: () { + Get.toNamed(AppRoutes.UserInfoActivity)!.then((value) { + loadMyInfo(); + }); + }, + child: Container( + width: Get.width - 16, + height: 40.sp, + margin: EdgeInsets.only(top:MediaQuery.of(context).padding.top + 45), + padding: EdgeInsets.fromLTRB(16.sp, 0.sp, 16.sp, 0.sp), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: Color(0xFF353443), + ), + child: Row( + children: [ + Expanded( + child: Text( + tip, + style: TextStyle( + color: Colors.white, + fontSize: 13.sp, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + )), + GestureDetector( + onTap: () { + isShowTip = false; + setState(() { + + }); + }, + child: Icon( + Icons.close, + size: 20, + color: AppColor.mainColor, + ), + ) + ], + ), + ), + ), + ], + ); + } + + avatarWidget(String url, V2TimMessage message, {double width = 34}) { print(url); return GestureDetector( - onTap: () async { - // V2TimConversation con = Get.arguments; - // if (message.sender == con.userID.toString()) return; - var data = await Get.toNamed(AppRoutes.UserInfoActivity,arguments: message.sender!.toString().split('_').last,preventDuplicates: false); - }, + onTap: () async { + // V2TimConversation con = Get.arguments; + // if (message.sender == con.userID.toString()) return; + var data = await Get.toNamed(AppRoutes.UserInfoActivity, + arguments: message.sender!.toString().split('_').last, + preventDuplicates: false); + }, child: Stack( alignment: Alignment.center, children: [ @@ -262,27 +372,31 @@ class _ChatPageState extends State { getCircleImage('avatar_bg'), width: width.sp, ), - url.contains("http") ? ClipOval( - child: CachedNetworkImage( - imageUrl:url, - width: (width - 2).sp, - height: (width - 2).sp, - fit: BoxFit.cover, - ), - ) : Text(url,style: TextStyle(color: Color(0xffF756FF),fontSize: 12.sp),) + url.contains("http") + ? ClipOval( + child: CachedNetworkImage( + imageUrl: url, + width: (width - 2).sp, + height: (width - 2).sp, + fit: BoxFit.cover, + ), + ) + : Text( + url, + style: TextStyle(color: Color(0xffF756FF), fontSize: 12.sp), + ) ], )); } void loadMyInfo() async { var data = await DioManager.instance.get(url: Api.getUserMine); - if (data['code'] == 200) { - var bean = BaseResponse.fromJson( - data, (data) => MineResponseBean.fromJson(data)); - if (bean.isSuccess()) { - userInfoBean = bean.data.user!; + var bean = BaseResponse.fromJson( + data, (data) => ResponseBean.fromJson(data)); - } + if (bean.code == 200) { + userInfoBean = bean.data.user!; + loadUserData(); } } @@ -290,82 +404,78 @@ class _ChatPageState extends State { return userInfoBean == null ? Container() : GestureDetector( - onTap: () { - Get.toNamed(AppRoutes.UserInfoActivity, - arguments: userInfoBean!.id!.toString()); - }, - child: Container( - margin: - EdgeInsets.only(left: 0 > 99 ? 80.sp : 65.sp), - child: Row( - children: [ - ClipOval( - child: Image.network( - otherUserBean!.avatar!, - width: 40.sp, - height: 40.sp, - fit: BoxFit.cover, - )), - SizedBox( - width: 4.sp, + onTap: () { + Get.toNamed(AppRoutes.UserInfoActivity, + arguments: userInfoBean!.id!.toString()); + }, + child: Container( + margin: EdgeInsets.only(left: 0 > 99 ? 80.sp : 65.sp), + child: Row( + children: [ + ClipOval( + child: Image.network( + otherUserBean!.avatar!, + width: 40.sp, + height: 40.sp, + fit: BoxFit.cover, + )), + SizedBox( + width: 4.sp, + ), + // Column( + // mainAxisAlignment: MainAxisAlignment.center, + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // Text( + // userInfoBean!.nickname ?? '昵称待审核', + // style: TextStyle( + // color: Colors.white, + // fontSize: + // ((otherUserBean!.onlineFlag ?? '').isNotEmpty) + // ? 14.sp + // : 16.sp), + // ), + // if ((otherUserBean!.onlineFlag ?? '').isNotEmpty) + // Text( + // otherUserBean!.onlineFlag ?? '', + // style: TextStyle( + // color: Colors.white.withOpacity(0.75), + // fontSize: 12.sp), + // ), + // ], + // ), + // if (otherUserBean!.! <= 1 )) + // GestureDetector( + // onTap: () { + // if (userInfoBean!.followStatus! <= 1) { + // setFollow(); + // } else { + // addFollowHeader(); + // } + // }, + // child: Container( + // margin: EdgeInsets.only( + // left: 5.sp, + // ), + // padding: EdgeInsets.only(left: 4.sp, right: 4.sp), + // height: 22.sp, + // decoration: BoxDecoration( + // gradient: AppColor.newMainVerLinearGradient, + // borderRadius: BorderRadius.circular(14), + // ), + // child: Center( + // child: Text( + // userInfoBean!.followStatus! <= 1 ? '关注' : '+特别关心', + // style: TextStyle( + // fontSize: 12.sp, color: Colors.white)), + // ), + // ), + // ), + ], + ), ), - // Column( - // mainAxisAlignment: MainAxisAlignment.center, - // crossAxisAlignment: CrossAxisAlignment.start, - // children: [ - // Text( - // userInfoBean!.nickname ?? '昵称待审核', - // style: TextStyle( - // color: Colors.white, - // fontSize: - // ((otherUserBean!.onlineFlag ?? '').isNotEmpty) - // ? 14.sp - // : 16.sp), - // ), - // if ((otherUserBean!.onlineFlag ?? '').isNotEmpty) - // Text( - // otherUserBean!.onlineFlag ?? '', - // style: TextStyle( - // color: Colors.white.withOpacity(0.75), - // fontSize: 12.sp), - // ), - // ], - // ), - // if (otherUserBean!.! <= 1 )) - // GestureDetector( - // onTap: () { - // if (userInfoBean!.followStatus! <= 1) { - // setFollow(); - // } else { - // addFollowHeader(); - // } - // }, - // child: Container( - // margin: EdgeInsets.only( - // left: 5.sp, - // ), - // padding: EdgeInsets.only(left: 4.sp, right: 4.sp), - // height: 22.sp, - // decoration: BoxDecoration( - // gradient: AppColor.newMainVerLinearGradient, - // borderRadius: BorderRadius.circular(14), - // ), - // child: Center( - // child: Text( - // userInfoBean!.followStatus! <= 1 ? '关注' : '+特别关心', - // style: TextStyle( - // fontSize: 12.sp, color: Colors.white)), - // ), - // ), - // ), - ], - ), - ), - ); + ); } } - -class ChatLoadUserInfoData { - -} \ No newline at end of file +class ChatLoadUserInfoData {} diff --git a/circle_app/lib/app/circle/logic.dart b/circle_app/lib/app/circle/logic.dart index eb1b473..8722bb9 100644 --- a/circle_app/lib/app/circle/logic.dart +++ b/circle_app/lib/app/circle/logic.dart @@ -522,8 +522,6 @@ class CircleLogic extends GetxController { if (info.isNotEmpty) { newPeopleList.addAll(info); } - - newPeopleList.addAll(list); pageIndex = pageIndex + 1; } else { peopleRefreshController.loadNoData(); diff --git a/circle_app/lib/app/circle/view.dart b/circle_app/lib/app/circle/view.dart index 8919e3b..c20557f 100644 --- a/circle_app/lib/app/circle/view.dart +++ b/circle_app/lib/app/circle/view.dart @@ -688,7 +688,7 @@ class _CirclePageState extends State }, child: Image.asset( getCircleImage('clocked_icon'), - width: 50.sp, + width: 65.sp, ), )), Container( @@ -813,7 +813,7 @@ class _CirclePageState extends State // SizedBox(width: 2.sp,), Container( margin: EdgeInsets.only(top: 4.sp), - + child: Text( '30', style: TextStyle( diff --git a/circle_app/lib/app/circle/widgets/discover.dart b/circle_app/lib/app/circle/widgets/discover.dart index c8bd0bb..d3dbfff 100644 --- a/circle_app/lib/app/circle/widgets/discover.dart +++ b/circle_app/lib/app/circle/widgets/discover.dart @@ -387,7 +387,9 @@ class _DiscoverState extends State Get.toNamed(AppRoutes.Swiper, arguments: { 'imaglist': imgList, - 'index': index + 'index': index, + 'userId':user.userId.toString() + }); }, child: CachedNetworkImage( diff --git a/circle_app/lib/app/circle/widgets/discover_item.dart b/circle_app/lib/app/circle/widgets/discover_item.dart index 8fdf72f..f9aae45 100644 --- a/circle_app/lib/app/circle/widgets/discover_item.dart +++ b/circle_app/lib/app/circle/widgets/discover_item.dart @@ -98,7 +98,8 @@ class _DiscoverItemState extends State { Get.toNamed(AppRoutes.Swiper, arguments: { 'imaglist': imgList, - 'index': index + 'index': index, + 'userId':user.id.toString() }); }, child: CachedNetworkImage( diff --git a/circle_app/lib/app/circle/widgets/info_list_view.dart b/circle_app/lib/app/circle/widgets/info_list_view.dart index 0b19762..c8f54b9 100644 --- a/circle_app/lib/app/circle/widgets/info_list_view.dart +++ b/circle_app/lib/app/circle/widgets/info_list_view.dart @@ -697,12 +697,7 @@ class InfoListViewState extends State with AutomaticKeepAliveClien for (var element in lists.chat!.users!) { widgets.add(Positioned( left: 12.sp * index, - child: GestureDetector( - onTap: () { - // pushOtherPeopleHomePage(element.id.toString()); - }, - child: circleWidget(element.avatar!,element.id.toString(), width: 24), - ), + child: circleWidget(element.avatar!,element.id.toString(), width: 24), )); index++; } @@ -723,14 +718,14 @@ class InfoListViewState extends State with AutomaticKeepAliveClien Album info = lists.album!.first; if (info.type == 1) { - double picWidth = (Get.width - (widget.logic.runtimeType == LikeLogic ? 100.sp : 60.sp))/3; + double picWidth = (Get.width - (widget.logic.runtimeType == LikeLogic ? 100.sp : 60.sp))/3 + 45; if (lists.album!.length > 3) { picHeight = picWidth * 2; } else { picHeight = picWidth; } } else { - picHeight = 140.sp; + picHeight = 200.sp; } } } @@ -937,15 +932,6 @@ class InfoListViewState extends State with AutomaticKeepAliveClien borderRadius: BorderRadius.circular(6.sp), child: CachedNetworkImage( imageUrl: album.url!, - // placeholder: (context, url) => - // SizedBox( - // width: 30.sp, - // height: 30.sp, - // child: CircularProgressIndicator( - // color: Color(0xFF07FAFB), - // strokeWidth: 2.sp, - // ), - // ), errorWidget: (context, url, error) => const Icon(Icons.error), fit: BoxFit.cover, @@ -990,8 +976,6 @@ class InfoListViewState extends State with AutomaticKeepAliveClien GestureDetector( onTap: () { pushMsgPage(lists, widget.bean.id.toString(),); - // pushHomePage( - // lists, widget.bean.id.toString()); }, child: Image.asset( getCircleImage('chat'), @@ -1016,19 +1000,19 @@ class InfoListViewState extends State with AutomaticKeepAliveClien ); double picHeight = 0.0; + double picWidth = (Get.width - (widget.logic.runtimeType == LikeLogic ? 100.sp : 60.sp))/3 + 45; if (lists.album != null) { if (lists.album!.isNotEmpty) { Album info = lists.album!.first; if (info.type == 1) { - double picWidth = (Get.width - (widget.logic.runtimeType == LikeLogic ? 100.sp : 60.sp))/3; if (lists.album!.length > 3) { picHeight = picWidth * 2; } else { picHeight = picWidth; } } else { - picHeight = 140.sp; + picHeight = 200.sp; } } } @@ -1038,11 +1022,7 @@ class InfoListViewState extends State with AutomaticKeepAliveClien lists.chat!.users!.forEach((element) { widgets.add(Positioned( left: 12.sp * index, - child: GestureDetector( - onTap: () { - }, - child: circleWidget(element.avatar!,element.id.toString(), width: 24), - ), + child: circleWidget(element.avatar!,element.id.toString(), width: 24), )); index++; }); @@ -1224,7 +1204,7 @@ class InfoListViewState extends State with AutomaticKeepAliveClien height: picHeight, alignment: Alignment.centerLeft, margin: EdgeInsets.only(top: 5.sp), - child: picHeight == 140.sp + child: picHeight == 200.sp ? ClipRRect( borderRadius: BorderRadius.circular(6.sp), child: VideoItemWidget(lists.album![0].url!)) @@ -1236,7 +1216,7 @@ class InfoListViewState extends State with AutomaticKeepAliveClien crossAxisCount: 3, //横轴三个子widget crossAxisSpacing: 8.sp, mainAxisSpacing: 8.sp, - childAspectRatio: 1.0 //宽高比为1时,子widget + childAspectRatio:0.7 //宽高比为1时,子widget ), itemBuilder: (contentxt, currentIndex) { Album album = lists.album![currentIndex]; @@ -1459,7 +1439,27 @@ class InfoListViewState extends State with AutomaticKeepAliveClien circleWidget(String url, String userId,{double width = 24}) { return GestureDetector( - onTap: (){ + onTap: () async { + if (widget.bean.is_limit&&widget.bean.amount > 0) { + await refreshCircleData(); + } + if (widget.bean.is_limit&&widget.bean.amount>0) { + showJoinCiclePiker(widget.bean.id.toString(),widget.bean.amount.toString(),widget.bean.oldAmount.toString(),1,(payResult){ + widget.bean.is_limit = false; + if (Get.isRegistered()) { + var logic = Get.find(); + for (var element in logic.circle.lists) { + if (element.id == widget.bean.id) { + element.is_limit = false; + element.isJoin = true; + } + } + logic.update(); + } + Get.back(); + },widget.bean.ios_item); + return; + } Get.toNamed(AppRoutes.UserInfoActivity, arguments: userId); }, child: Stack( diff --git a/circle_app/lib/app/circle/widgets/like_view.dart b/circle_app/lib/app/circle/widgets/like_view.dart index 88c169e..0de878c 100644 --- a/circle_app/lib/app/circle/widgets/like_view.dart +++ b/circle_app/lib/app/circle/widgets/like_view.dart @@ -596,14 +596,14 @@ class _LikeViewState extends State Album info = lists.album!.first; if (info.type == 1) { - double picWidth = (Get.width - 20.sp) / 3; + double picWidth = (Get.width - 100.sp) / 3 + 40; if (lists.album!.length > 3) { picHeight = picWidth * 2; } else { picHeight = picWidth; } } else { - picHeight = 140.sp; + picHeight = 200.sp; } } } @@ -787,7 +787,7 @@ class _LikeViewState extends State crossAxisCount: 3, //横轴三个子widget crossAxisSpacing: 8.sp, mainAxisSpacing: 8.sp, - childAspectRatio: 1.0 //宽高比为1时,子widget + childAspectRatio: 0.7 //宽高比为1时,子widget ), itemBuilder: (contentxt, currentIndex) { Album album = lists.album![currentIndex]; @@ -799,7 +799,8 @@ class _LikeViewState extends State } Get.toNamed(AppRoutes.Swiper, arguments: { 'imaglist': imgList, - 'index': currentIndex + 'index': currentIndex, + 'userId':lists.user!.id.toString() }); }, child: ClipRRect( @@ -902,14 +903,14 @@ class _LikeViewState extends State Album info = lists.album!.first; if (info.type == 1) { - double picWidth = (Get.width - 20.sp) / 3; + double picWidth = (Get.width - 100.sp) / 3 + 40; if (lists.album!.length > 3) { picHeight = picWidth * 2; } else { picHeight = picWidth; } } else { - picHeight = 140.sp; + picHeight = 200.sp; } } } @@ -1103,7 +1104,7 @@ class _LikeViewState extends State crossAxisSpacing: 8.sp, mainAxisSpacing: 8.sp, childAspectRatio: - 1.0 //宽高比为1时,子widget + 0.7 //宽高比为1时,子widget ), itemBuilder: (contentxt, currentIndex) { Album album = lists.album![currentIndex]; @@ -1122,7 +1123,8 @@ class _LikeViewState extends State Get.toNamed(AppRoutes.Swiper, arguments: { 'imaglist': imgList, - 'index': currentIndex + 'index': currentIndex, + 'userId':lists.user!.id.toString() }); }, child: ClipRRect( diff --git a/circle_app/lib/app/circle/widgets/vicinity.dart b/circle_app/lib/app/circle/widgets/vicinity.dart index 7d49213..0215d75 100644 --- a/circle_app/lib/app/circle/widgets/vicinity.dart +++ b/circle_app/lib/app/circle/widgets/vicinity.dart @@ -374,7 +374,8 @@ class _VicinityState extends State with AutomaticKeepAliveClientMixin Get.toNamed(AppRoutes.Swiper, arguments: { 'imaglist': item.images, - 'index': i + 'index': i, + // 'userId': item.id.toString() }); }, child: ListAlbumItem(item.images[i], i)), diff --git a/circle_app/lib/app/msg/sys_notify_list/logic.dart b/circle_app/lib/app/msg/sys_notify_list/logic.dart index 82184dc..1735bcb 100644 --- a/circle_app/lib/app/msg/sys_notify_list/logic.dart +++ b/circle_app/lib/app/msg/sys_notify_list/logic.dart @@ -177,6 +177,7 @@ class Sys_notify_listLogic extends GetxController { void onRefresh() async { page = 0; next = 0; + lists.clear(); initList(); } diff --git a/circle_app/lib/app/quick/view.dart b/circle_app/lib/app/quick/view.dart index d363c94..48e93c7 100644 --- a/circle_app/lib/app/quick/view.dart +++ b/circle_app/lib/app/quick/view.dart @@ -281,7 +281,7 @@ class QuickPage extends StatelessWidget { child: _buildInterestsListView(item.interests)), if (item.images.isNotEmpty) Container( - height: 98, + height: 130, margin: EdgeInsets.only( top: 6.sp, left: 10.sp, right: 10.sp, bottom: 10.sp), child: SingleChildScrollView( @@ -295,7 +295,8 @@ class QuickPage extends StatelessWidget { onTap: () { Get.toNamed(AppRoutes.Swiper, arguments: { 'imaglist': item.images, - 'index': i + 'index': i, + 'userId':item.id.toString() }); }, child: ListAlbumItem(item.images[i], i)), @@ -315,7 +316,7 @@ class QuickPage extends StatelessWidget { borderRadius: BorderRadius.circular(8.sp), child: CachedNetworkImage( width: 88.sp, - height: 88.sp, + height: 130.sp, fit: BoxFit.cover, imageUrl: item + "?imageView2/1/w/176/h/176/q/75", ), diff --git a/circle_app/lib/app/swiper/logic.dart b/circle_app/lib/app/swiper/logic.dart index ec7716f..52f1afb 100644 --- a/circle_app/lib/app/swiper/logic.dart +++ b/circle_app/lib/app/swiper/logic.dart @@ -7,11 +7,15 @@ class SwiperLogic extends GetxController { final SwiperState state = SwiperState(); List imgList = Get.arguments['imaglist'] ; int index = Get.arguments['index'] ; + String userId = ''; SwiperController swiperController = SwiperController(); @override void onInit() { super.onInit(); - + Map arg = Get.arguments; + if (arg.containsKey('userId')) { + userId = arg['userId']; + } } @override void onReady() { diff --git a/circle_app/lib/app/swiper/view.dart b/circle_app/lib/app/swiper/view.dart index 1658fc8..6868062 100644 --- a/circle_app/lib/app/swiper/view.dart +++ b/circle_app/lib/app/swiper/view.dart @@ -13,6 +13,7 @@ import 'package:get/get_state_manager/src/simple/get_state.dart'; import 'package:image_gallery_saver/image_gallery_saver.dart'; import 'package:qr_flutter/qr_flutter.dart'; +import '../../router/app_routers.dart'; import '../home/logic.dart'; import 'logic.dart'; import 'dart:ui' as ui; @@ -113,7 +114,51 @@ class _SwiperPageState extends State { size: 25.sp, ), ), - )) + )), + if (logic.userId.isNotEmpty) + Positioned( + right: 16.sp, + top: 16.sp, + child: SafeArea( + child: GestureDetector( + onTap: () { + Get.toNamed(AppRoutes.UserInfoActivity, + arguments: logic.userId); + Get.delete(); + }, + child: Container( + width: 73.sp, + height: 25.sp, + decoration: BoxDecoration( + gradient: + AppColor.mainVerLinearGradient, + borderRadius: + BorderRadius.circular(12.5.sp)), + child: Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + Container( + margin: EdgeInsets.only(left: 5.sp), + child: Text( + '查看主页', + style: TextStyle( + color: Colors.white, + fontSize: 10.sp, + ), + ), + ), + Image( + width: 15.sp, + image: AssetImage( + getDisCoverImage("right_icon")), + // width: 44.sp, + ), + ], + ), + ), + ), + )), ], ), ), diff --git a/circle_app/lib/app/userinfo/logic.dart b/circle_app/lib/app/userinfo/logic.dart index c4b19d5..9faf5cc 100644 --- a/circle_app/lib/app/userinfo/logic.dart +++ b/circle_app/lib/app/userinfo/logic.dart @@ -429,6 +429,7 @@ class UserBean { int role; int mark; int orientation; + int userType; List interests; List orientations; double lng; @@ -449,6 +450,7 @@ class UserBean { required this.age, required this.signature, required this.vip, + required this.userType, required this.gender, required this.hide_wx_num, required this.orientations, @@ -471,6 +473,7 @@ class UserBean { factory UserBean.fromJson(Map json) { return UserBean( id: json['id'], + userType: json['userType'] ?? 0, currentCity: json['currentCity'] ?? '', hide_wx_num: json['hide_wx_num'] ?? 0, orientations: json['orientations'] ?? [], @@ -488,7 +491,7 @@ class UserBean { gender: json['gender'], role: json['role'], orientation: json['orientation'], - interests: List.from( + interests: json['interests'] == null ? [] : List.from( json['interests'].map((x) => Interest.fromJson(x)), ), lng: json['lng'], diff --git a/circle_app/lib/common/Widgets/today_people_dialog.dart b/circle_app/lib/common/Widgets/today_people_dialog.dart index 660539b..e22fba1 100644 --- a/circle_app/lib/common/Widgets/today_people_dialog.dart +++ b/circle_app/lib/common/Widgets/today_people_dialog.dart @@ -672,28 +672,31 @@ class _SearchAnimationWidgetState extends State crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: [ - AnimatedBuilder( - animation: _controller, - builder: (context, child) { - return Transform.translate( - offset: Offset( - 30.0 * math.cos(2 * math.pi * _controller.value), - 30.0 * math.sin(2 * math.pi * _controller.value), - ), - child: IconButton( - icon: Icon( - Icons.search, - color: Colors.white, - size: 50.sp, - ), - onPressed: () { - // 处理点击事件 - }, - ), - ); - }), + Stack( + children: [ + Image.asset(getCircleImage('search_bg_icon'),width: 90.sp,), + AnimatedBuilder( + animation: _controller, + builder: (context, child) { + return Container( + margin: EdgeInsets.only(left: 30.sp,top: 30.sp), + child: Transform.translate( + offset: Offset( + 30.0 * math.cos(2 * math.pi * _controller.value), + 30.0 * math.sin(2 * math.pi * _controller.value), + ), + child: Image.asset( + getCircleImage('search_icon'), + + width: 27.sp, + ), + ), + ); + }), + ], + ), Container( - margin: EdgeInsets.only(top: 50.sp), + margin: EdgeInsets.only(top: 20.sp), child: Text( '正在为您匹配合适的那个Ta~', style: TextStyle(color: Colors.white, fontSize: 16.sp), diff --git a/circle_app/lib/view/notice.dart b/circle_app/lib/view/notice.dart index 7c83370..a7a2074 100644 --- a/circle_app/lib/view/notice.dart +++ b/circle_app/lib/view/notice.dart @@ -9,34 +9,30 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import '../main.dart'; +import '../router/app_routers.dart'; + typedef void NoticeCallback(); - -void showFloatingButtonOverlay( - BuildContext context, String nickname, String ageMsg, String avatar,int event,NoticeCallback noticeCallback) { - - +void showFloatingButtonOverlay(BuildContext context, String nickname, + String ageMsg, String avatar, int event, NoticeCallback noticeCallback) { OverlayState? overlayState = Overlay.of(context); late OverlayEntry overlayEntry; bool showMessage = false; int countdownSeconds = 5; // 倒计时秒数 - - // 创建 Timer late Timer countdownTimer; // 创建 OverlayEntry overlayEntry = OverlayEntry( builder: (BuildContext context) { - return Stack( alignment: Alignment.center, children: [ Positioned( top: MediaQuery.of(context).padding.top, - // right: 16, + // right: 16, child: AnimatedContainer( duration: const Duration(milliseconds: 500), curve: Curves.easeInOut, @@ -109,13 +105,14 @@ void showFloatingButtonOverlay( ], ), const SizedBox(height: 4), - Text( event == 0 - ? "看了这么久,给我点个喜欢呗~" - : event == 1 - ? "我喜欢了你,可以喜欢我一下吗?" - : event == 2 - ? "你喜欢的人上线啦,赶紧找他聊天吧!" - : "我也喜欢了你,一起聊聊呗~", + Text( + event == 0 + ? "看了这么久,给我点个喜欢呗~" + : event == 1 + ? "我喜欢了你,可以喜欢我一下吗?" + : event == 2 + ? "你喜欢的人上线啦,赶紧找他聊天吧!" + : "我也喜欢了你,一起聊聊呗~", style: TextStyle( color: Colors.grey, fontSize: 13.sp, @@ -131,9 +128,7 @@ void showFloatingButtonOverlay( countdownTimer.cancel(); try { overlayEntry!.remove(); - } catch (e) { - - } + } catch (e) {} mainOverlayEntry = null; noticeCallback(); @@ -162,10 +157,10 @@ void showFloatingButtonOverlay( event == 0 ? "喜欢" : event == 1 - ? "回关" - : event == 2 - ? "私聊" - : "私聊", + ? "回关" + : event == 2 + ? "私聊" + : "私聊", style: TextStyle( color: Colors.white, fontSize: 14.sp, @@ -181,31 +176,34 @@ void showFloatingButtonOverlay( ), ), if (event == 0) - Positioned( - top: MediaQuery.of(context).padding.top, - right: 8, - child: GestureDetector( - onTap: () { - countdownTimer.cancel(); - // 取消计时器 - try { - overlayEntry!.remove(); - } catch (e) { - - } - mainOverlayEntry = null; - }, - child: Container( - height: 20, - width: 30, - decoration: BoxDecoration( - borderRadius: BorderRadius.only(topRight: Radius.circular(10),bottomLeft: Radius.circular(10)), - gradient: AppColor.mainVerLinearGradient + Positioned( + top: MediaQuery.of(context).padding.top, + right: 8, + child: GestureDetector( + onTap: () { + countdownTimer.cancel(); + // 取消计时器 + try { + overlayEntry!.remove(); + } catch (e) {} + mainOverlayEntry = null; + }, + child: Container( + height: 20, + width: 30, + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + topRight: Radius.circular(10), + bottomLeft: Radius.circular(10)), + gradient: AppColor.mainVerLinearGradient), + alignment: Alignment.center, + child: Icon( + Icons.close, + size: 20, + color: Colors.white, + ), ), - alignment: Alignment.center, - child: Icon(Icons.close,size: 20,color: Colors.white,), - ), - )) + )) ], ); }, @@ -216,16 +214,105 @@ void showFloatingButtonOverlay( countdownTimer = Timer.periodic(Duration(seconds: 1), (timer) { if (countdownSeconds > 0) { countdownSeconds--; - // overlayEntry.markNeedsBuild(); // 刷新 OverlayEntry + // overlayEntry.markNeedsBuild(); // 刷新 OverlayEntry } else { // 取消计时器 timer.cancel(); try { overlayEntry!.remove(); - } catch (e) { - - } + } catch (e) {} + mainOverlayEntry = null; + } + }); + // 将 OverlayEntry 添加到 Overlay 中 + overlayState?.insert(overlayEntry!); +} + +void showTipFloatingButtonOverlay(BuildContext context, String tip) { + OverlayState? overlayState = Overlay.of(context); + late OverlayEntry overlayEntry; + bool showMessage = false; + + int countdownSeconds = 5; // 倒计时秒数 + + // 创建 Timer + late Timer countdownTimer; + + // 创建 OverlayEntry + overlayEntry = OverlayEntry( + builder: (BuildContext context) { + return Column( + children: [ + GestureDetector( + onTap: () { + countdownTimer.cancel(); + // 取消计时器 + try { + overlayEntry!.remove(); + } catch (e) {} + mainOverlayEntry = null; + Get.toNamed(AppRoutes.UserInfoActivity); + }, + child: Container( + width: Get.width - 16, + height: 40.sp, + margin: EdgeInsets.only(top:MediaQuery.of(context).padding.top + 45), + padding: EdgeInsets.fromLTRB(16.sp, 0.sp, 16.sp, 0.sp), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: Color(0xFF353443).withOpacity(0.5), + ), + child: Row( + + children: [ + Expanded( + child: Text( + tip, + style: TextStyle( + color: Colors.grey, + fontSize: 13.sp, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + )), + GestureDetector( + onTap: () { + countdownTimer.cancel(); + // 取消计时器 + try { + overlayEntry!.remove(); + } catch (e) {} + mainOverlayEntry = null; + }, + child: Icon( + Icons.close, + size: 20, + color: AppColor.mainColor, + ), + ) + ], + ), + ), + ), + ], + ); + }, + ); + // setState(() {}); + showMessage = true; + mainOverlayEntry = overlayEntry; + countdownTimer = Timer.periodic(Duration(seconds: 1), (timer) { + if (countdownSeconds > 0) { + countdownSeconds--; + // overlayEntry.markNeedsBuild(); // 刷新 OverlayEntry + } else { + // 取消计时器 + timer.cancel(); + + try { + overlayEntry!.remove(); + } catch (e) {} mainOverlayEntry = null; } }); diff --git a/circle_app/pubspec.yaml b/circle_app/pubspec.yaml index 16f9afc..a84af43 100644 --- a/circle_app/pubspec.yaml +++ b/circle_app/pubspec.yaml @@ -112,7 +112,7 @@ dependencies: #边框渐变 gradient_borders: ^1.0.0 #系统设置 - app_settings: 4.0.4 + app_settings: 4.3.1 #百度定位插件 flutter_bmflocation: ^3.6.0