diff --git a/circle_app/lib/app/chat/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_chat_history_message_list_item.dart b/circle_app/lib/app/chat/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_chat_history_message_list_item.dart index f806c17..6adea08 100644 --- a/circle_app/lib/app/chat/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_chat_history_message_list_item.dart +++ b/circle_app/lib/app/chat/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_chat_history_message_list_item.dart @@ -3,6 +3,7 @@ import 'dart:math'; import 'package:circle_app/app/chat/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_text_elem.dart'; import 'package:circle_app/app/chat/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_merger_message_elem.dart'; +import 'package:circle_app/router/app_routers.dart'; import 'package:circle_app/util/util.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/gestures.dart'; @@ -402,11 +403,10 @@ class _TIMUIKItHistoryMessageListItemState if (messageItem.customElem?.extension?.contains('cardData') ?? false) { Map info = jsonDecode(messageItem.customElem?.data ?? ''); return Container( - height: info.containsKey('city') ? 175 : 140, + height: info.containsKey('city') ? 175.sp : 135.sp, width: Get.width, - - margin: EdgeInsets.only(left: 20), - decoration: BoxDecoration( + margin: EdgeInsets.only(left: isFromSelf ? 16 : 0, right: isFromSelf ? 0 : 16), + decoration: BoxDecoration( image: DecorationImage( fit: BoxFit.fill, image: AssetImage( @@ -415,43 +415,78 @@ class _TIMUIKItHistoryMessageListItemState child: Column( children: [ Container( - padding: EdgeInsets.only(left: 12,right: 12), + padding: EdgeInsets.only(left: 12.sp, right: 12.sp), // height: 60, child: Column( children: [ if (info.containsKey('city')) Container( - margin: EdgeInsets.only(top: 10), + margin: EdgeInsets.only(top: 10.sp), child: Row( children: [ Container( - margin: EdgeInsets.only(right: 5),width: 3,height: 3,decoration: BoxDecoration(borderRadius: BorderRadius.circular(1.5),color: Color(0xFF00FFF4)),), - Text(info['city'],style: TextStyle(color: Colors.white,fontSize: 14,fontWeight: FontWeight.w500),) + margin: EdgeInsets.only(right: 5.sp), + width: 3.sp, + height: 3.sp, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(1.5.sp), + color: Color(0xFF00FFF4)), + ), + Text( + info['city'], + style: TextStyle( + color: Colors.white, + fontSize: 14.sp, + fontWeight: FontWeight.w500), + ) ], ), ), if (info.containsKey('both_interests')) Container( - margin: EdgeInsets.only(top: 16), + margin: EdgeInsets.only(top: 16.sp), child: Row( children: [ Container( - margin: EdgeInsets.only(right: 5),width: 3,height: 3,decoration: BoxDecoration(borderRadius: BorderRadius.circular(1.5),color: Color(0xFF00FFF4)),), - Text(info['both_interests'],style: TextStyle(color: Colors.white,fontSize: 14,fontWeight: FontWeight.w500),) + margin: EdgeInsets.only(right: 5.sp), + width: 3, + height: 3, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(1.5), + color: Color(0xFF00FFF4)), + ), + Text( + info['both_interests'], + style: TextStyle( + color: Colors.white, + fontSize: 14.sp, + fontWeight: FontWeight.w500), + ) ], ), ), Container( - margin: EdgeInsets.only(top: 10,bottom: 10), + margin: EdgeInsets.only(top: 10.sp, bottom: 10.sp), alignment: Alignment.centerLeft, - child: Text(isFromSelf ? info['user']['signature'] : info['my']['signature'],style: TextStyle(color: Colors.white,fontSize: 14,fontWeight: FontWeight.w500),maxLines: 2,overflow: TextOverflow.ellipsis,), + child: Text( + isFromSelf + ? info['user']['signature'] + : info['my']['signature'], + style: TextStyle( + color: Colors.white, + fontSize: 14.sp, + fontWeight: FontWeight.w500), + maxLines: 2, + overflow: TextOverflow.ellipsis, + ), ), Image.asset( getCircleImage('line'), width: Get.width, fit: BoxFit.fill, ), - interestWdiget(isFromSelf ? info['interests'] : info['myInterests']) + interestWdiget( + isFromSelf ? info['interests'] : info['myInterests']) ], ), ) @@ -460,7 +495,6 @@ class _TIMUIKItHistoryMessageListItemState ); } - return TIMUIKitCustomElem( message: messageItem, customElem: messageItem.customElem, @@ -656,41 +690,47 @@ class _TIMUIKItHistoryMessageListItemState itemCount: data.length, padding: EdgeInsets.symmetric(vertical: 11.sp), itemBuilder: (context, index) { - return Container( - margin: EdgeInsets.only(right: 11.sp), // 替换为实际的 item 间距 + return GestureDetector( + onTap: () { + Get.toNamed(AppRoutes.Signal_circle_list, + arguments: data[index]['id']); + }, child: Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(17.0), // 设置圆角半径 - gradient: LinearGradient( - colors: [ - Color(0xFF06F9FA), - Color(0xFFDC5BFD), - ], - ), - color: Color(0xFF392D53), - ), + margin: EdgeInsets.only(right: 11.sp), // 替换为实际的 item 间距 child: Container( - margin: EdgeInsets.all(0.5.sp), decoration: BoxDecoration( - borderRadius: BorderRadius.circular(17.0), - // shape: BoxShape.circle, + borderRadius: BorderRadius.circular(17.0), // 设置圆角半径 + gradient: LinearGradient( + colors: [ + Color(0xFF06F9FA), + Color(0xFFDC5BFD), + ], + ), color: Color(0xFF392D53), ), - child: Padding( - padding: EdgeInsets.only( - top: 2.sp, bottom: 2.sp, left: 15.sp, right: 15.sp), - child: Center( - child: Text( - data[index]['title'], - style: TextStyle( - fontSize: 11.0, - color: Colors.white, + child: Container( + margin: EdgeInsets.all(0.5.sp), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(17.0), + // shape: BoxShape.circle, + color: Color(0xFF392D53), + ), + child: Padding( + padding: EdgeInsets.only( + top: 2.sp, bottom: 2.sp, left: 15.sp, right: 15.sp), + child: Center( + child: Text( + data[index]['title'], + style: TextStyle( + fontSize: 11.0, + color: Colors.white, + ), ), ), ), ), - ), - ), // 替换为实际的列表项小部件 + ), // 替换为实际的列表项小部件 + ), ); }, ), @@ -1114,7 +1154,6 @@ class _TIMUIKItHistoryMessageListItemState context, widget.message, model, theme, details, true, false); }, ), - ]; } @@ -1308,7 +1347,8 @@ class _TIMUIKItHistoryMessageListItemState children: [ if (model.isMultiSelect) Container( - margin: EdgeInsets.only(right: 12, top: 10, left: isSelf ? 16 : 0), + margin: + EdgeInsets.only(right: 12, top: 10, left: isSelf ? 16 : 0), child: CheckBoxButton( isChecked: model.multiSelectedMessageList.contains(message), onChanged: (value) { @@ -1350,225 +1390,251 @@ class _TIMUIKItHistoryMessageListItemState } } }, - child: - (message.customElem?.extension?.contains('cardData') ?? false) ? _getMessageItemBuilder(message, 1, model) : Row( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: isSelf - ? MainAxisAlignment.end - : MainAxisAlignment.start, - children: [ - - - - if (!isSelf && widget.showAvatar) - InkWell( - onLongPress: () { - if (widget.onLongPressForOthersHeadPortrait != - null) {} - if (model.chatConfig.isAllowLongPressAvatarToAt) { - widget.onLongPressForOthersHeadPortrait!( - message.sender, message.nickName); - } - }, - onTapDown: isDesktopScreen - ? (details) { - if (widget.onTapForOthersPortrait != null && - widget.allowAvatarTap) { - widget.onTapForOthersPortrait!( - message.sender ?? "", details); - } - } - : null, - onTap: isDesktopScreen - ? null - : () { - if (widget.onTapForOthersPortrait != null && - widget.allowAvatarTap) { - widget.onTapForOthersPortrait!( - message.sender ?? "", TapDownDetails()); + child: (message.customElem?.extension?.contains('cardData') ?? + false) + ? _getMessageItemBuilder(message, 1, model) + : Row( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: isSelf + ? MainAxisAlignment.end + : MainAxisAlignment.start, + children: [ + if (!isSelf && widget.showAvatar) + InkWell( + onLongPress: () { + if (widget.onLongPressForOthersHeadPortrait != + null) {} + if (model + .chatConfig.isAllowLongPressAvatarToAt) { + widget.onLongPressForOthersHeadPortrait!( + message.sender, message.nickName); } }, - child: widget.userAvatarBuilder != null - ? widget.userAvatarBuilder!(context, message) - : Container( - margin: (isSelf && isShowNickNameForSelf) || - (!isSelf && isShowNickNameForOthers) - ? const EdgeInsets.only(top: 2) - : null, - child: SizedBox( - width: 40, - height: 40, - child: Avatar( - faceUrl: message.faceUrl ?? "", - showName: - MessageUtils.getDisplayName(message), - ), - ), - ), - ), - Container( - margin: widget.showAvatar - ? (isSelf - ? const EdgeInsets.only(right: 13) - : const EdgeInsets.only(left: 13)) - : null, - child: Column( - crossAxisAlignment: isSelf - ? CrossAxisAlignment.end - : CrossAxisAlignment.start, - children: [ - if ((isSelf && isShowNickNameForSelf) || - (!isSelf && isShowNickNameForOthers)) - widget.topRowBuilder != null - ? widget.topRowBuilder!(context, message) - : Container( - margin: const EdgeInsets.only(bottom: 4), - child: ConstrainedBox( + onTapDown: isDesktopScreen + ? (details) { + if (widget.onTapForOthersPortrait != + null && + widget.allowAvatarTap) { + widget.onTapForOthersPortrait!( + message.sender ?? "", details); + } + } + : null, + onTap: isDesktopScreen + ? null + : () { + if (widget.onTapForOthersPortrait != + null && + widget.allowAvatarTap) { + widget.onTapForOthersPortrait!( + message.sender ?? "", + TapDownDetails()); + } + }, + child: widget.userAvatarBuilder != null + ? widget.userAvatarBuilder!( + context, message) + : Container( + margin: + (isSelf && isShowNickNameForSelf) || + (!isSelf && + isShowNickNameForOthers) + ? const EdgeInsets.only(top: 2) + : null, + child: SizedBox( + width: 40, + height: 40, + child: Avatar( + faceUrl: message.faceUrl ?? "", + showName: + MessageUtils.getDisplayName( + message), + ), + ), + ), + ), + Container( + margin: widget.showAvatar + ? (isSelf + ? const EdgeInsets.only(right: 13) + : const EdgeInsets.only(left: 13)) + : null, + child: Column( + crossAxisAlignment: isSelf + ? CrossAxisAlignment.end + : CrossAxisAlignment.start, + children: [ + if ((isSelf && isShowNickNameForSelf) || + (!isSelf && isShowNickNameForOthers)) + widget.topRowBuilder != null + ? widget.topRowBuilder!( + context, message) + : Container( + margin: const EdgeInsets.only( + bottom: 4), + child: ConstrainedBox( + constraints: BoxConstraints( + maxWidth: + MediaQuery.of(context) + .size + .width / + 1.7), + child: Text( + MessageUtils.getDisplayName( + message), + overflow: TextOverflow.ellipsis, + style: widget.themeData + ?.nickNameTextStyle ?? + TextStyle( + fontSize: 12, + color: theme + .weakTextColor), + ), + )), + Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + if (isSelf && message.elemType != 2) + renderHoverTipAndReadStatus(model, + isSelf, message, isPeerRead, theme), + Container( constraints: BoxConstraints( - maxWidth: MediaQuery.of(context) - .size - .width / - 1.7), - child: Text( - MessageUtils.getDisplayName(message), - overflow: TextOverflow.ellipsis, - style: widget.themeData - ?.nickNameTextStyle ?? - TextStyle( - fontSize: 12, - color: theme.weakTextColor), + maxWidth: constraints.maxWidth * 0.77, ), - )), - Row( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - if (isSelf && message.elemType != 2) - renderHoverTipAndReadStatus(model, isSelf, - message, isPeerRead, theme), - Container( - constraints: BoxConstraints( - maxWidth: constraints.maxWidth * 0.77, + child: Builder(builder: (context) { + return Column( + crossAxisAlignment: + (message.isSelf ?? true) + ? CrossAxisAlignment.end + : CrossAxisAlignment.start, + children: [ + GestureDetector( + child: IgnorePointer( + ignoring: + model.isMultiSelect, + child: + _getMessageItemBuilder( + message, + message.status, + model)), + onSecondaryTapDown: (details) { + if (widget.onLongPress != + null) { + widget.onLongPress!( + context, message); + return; + } + if (!PlatformUtils() + .isMobile) { + if (widget.allowLongPress) { + _onOpenToolTip( + context, + message, + model, + theme, + details, + false, + false); + } + } + }, + onLongPress: () { + if (widget.onLongPress != + null) { + widget.onLongPress!( + context, message); + return; + } + if (widget.allowLongPress && + PlatformUtils() + .isMobile) { + _onOpenToolTip( + context, + message, + model, + theme, + null, + false, + false); + } + }, + onTapDown: (details) { + _tapDetails = details; + }, + ), + TIMUIKitTextTranslationElem( + message: message, + isUseDefaultEmoji: + widget.isUseDefaultEmoji, + customEmojiStickerList: widget + .customEmojiStickerList, + isFromSelf: + message.isSelf ?? true, + isShowJump: false, + clearJump: () {}, + chatModel: model) + ], + ); + }), + ), + if (!isSelf && + message.elemType == + MessageElemType + .V2TIM_ELEM_TYPE_SOUND && + message.localCustomInt != null && + message.localCustomInt != + HistoryMessageDartConstant.read) + Padding( + padding: const EdgeInsets.only( + left: 5, bottom: 12), + child: Icon(Icons.circle, + color: theme.cautionColor, + size: 10)), + if (!isSelf && message.elemType != 2) + renderHoverTipAndReadStatus(model, + isSelf, message, isPeerRead, theme), + ], ), - child: Builder(builder: (context) { - return Column( - crossAxisAlignment: - (message.isSelf ?? true) - ? CrossAxisAlignment.end - : CrossAxisAlignment.start, - children: [ - GestureDetector( - child: IgnorePointer( - ignoring: model.isMultiSelect, - child: _getMessageItemBuilder( - message, - message.status, - model)), - onSecondaryTapDown: (details) { - if (widget.onLongPress != null) { - widget.onLongPress!( - context, message); - return; - } - if (!PlatformUtils().isMobile) { - if (widget.allowLongPress) { - _onOpenToolTip( - context, - message, - model, - theme, - details, - false, - false); - } - } - }, - onLongPress: () { - if (widget.onLongPress != null) { - widget.onLongPress!( - context, message); - return; - } - if (widget.allowLongPress && - PlatformUtils().isMobile) { - _onOpenToolTip( - context, - message, - model, - theme, - null, - false, - false); - } - }, - onTapDown: (details) { - _tapDetails = details; - }, - ), - TIMUIKitTextTranslationElem( - message: message, - isUseDefaultEmoji: - widget.isUseDefaultEmoji, - customEmojiStickerList: - widget.customEmojiStickerList, - isFromSelf: message.isSelf ?? true, - isShowJump: false, - clearJump: () {}, - chatModel: model) - ], - ); - }), - ), - if (!isSelf && - message.elemType == - MessageElemType.V2TIM_ELEM_TYPE_SOUND && - message.localCustomInt != null && - message.localCustomInt != - HistoryMessageDartConstant.read) - Padding( - padding: const EdgeInsets.only( - left: 5, bottom: 12), - child: Icon(Icons.circle, - color: theme.cautionColor, size: 10)), - if (!isSelf && message.elemType != 2) - renderHoverTipAndReadStatus(model, isSelf, - message, isPeerRead, theme), - ], + if (widget.bottomRowBuilder != null) + widget.bottomRowBuilder!(context, message) + ], + ), ), - if (widget.bottomRowBuilder != null) - widget.bottomRowBuilder!(context, message) - ], - ), - ), - if (widget.message.elemType == 6 && isDownloadWaiting) - Container( - margin: const EdgeInsets.only(top: 24, left: 6), - child: LoadingAnimationWidget.threeArchedCircle( - color: theme.weakTextColor ?? Colors.grey, - size: 20, - ), - ), - if (isSelf && widget.showAvatar && message.elemType != 2) - widget.userAvatarBuilder != null - ? widget.userAvatarBuilder!(context, message) - : SizedBox( - width: 40, - height: 40, - child: InkWell( - onTapDown: (details) { - if (widget.onTapForOthersPortrait != null && - widget.allowAvatarTap) { - widget.onTapForOthersPortrait!( - message.sender ?? "", details); - } - }, - child: Avatar( - faceUrl: message.faceUrl ?? "", - showName: - MessageUtils.getDisplayName(message)), + if (widget.message.elemType == 6 && + isDownloadWaiting) + Container( + margin: const EdgeInsets.only(top: 24, left: 6), + child: LoadingAnimationWidget.threeArchedCircle( + color: theme.weakTextColor ?? Colors.grey, + size: 20, ), ), - ], - ), + if (isSelf && + widget.showAvatar && + message.elemType != 2) + widget.userAvatarBuilder != null + ? widget.userAvatarBuilder!(context, message) + : SizedBox( + width: 40, + height: 40, + child: InkWell( + onTapDown: (details) { + if (widget.onTapForOthersPortrait != + null && + widget.allowAvatarTap) { + widget.onTapForOthersPortrait!( + message.sender ?? "", details); + } + }, + child: Avatar( + faceUrl: message.faceUrl ?? "", + showName: + MessageUtils.getDisplayName( + message)), + ), + ), + ], + ), ), ), ), diff --git a/circle_app/lib/app/signal_circle_list/logic.dart b/circle_app/lib/app/signal_circle_list/logic.dart index 8408f51..9e79331 100644 --- a/circle_app/lib/app/signal_circle_list/logic.dart +++ b/circle_app/lib/app/signal_circle_list/logic.dart @@ -1,7 +1,44 @@ +import 'package:circle_app/app/circle/logic.dart'; +import 'package:circle_app/network/api.dart'; +import 'package:circle_app/network/dio_manager.dart'; +import 'package:circle_app/util/util.dart'; import 'package:get/get.dart'; import 'state.dart'; class Signal_circle_listLogic extends GetxController { final Signal_circle_listState state = Signal_circle_listState(); + + Circle? circle; + + @override + void onInit() { + // TODO: implement onInit + super.onInit(); + loadData(); + } + + void loadData() async { + var data = await DioManager.instance + .get(url: 'up-service/interest/${Get.arguments}'); + if (data['code'] == 200) { + circle = Circle.fromJson(data['data']); + update(); + } + } + + outCircle(String interest_id, bool isStatus) async { + var data = await DioManager.instance.post( + url: Api.outCrrcle + interest_id + "/join", + params: {"status": isStatus ? "0" : "1"}); + var bean = BaseResponse.fromJson(data, (data) => data); + if (bean.code == 200) { + + circle!.isJoin = !isStatus; + update(); + + } + showToast(bean.msg); + } + } diff --git a/circle_app/lib/app/signal_circle_list/view.dart b/circle_app/lib/app/signal_circle_list/view.dart index 0f0420c..9423011 100644 --- a/circle_app/lib/app/signal_circle_list/view.dart +++ b/circle_app/lib/app/signal_circle_list/view.dart @@ -3,6 +3,7 @@ import 'package:circle_app/app/circle/widgets/info_list_view.dart'; import 'package:circle_app/components/my_app_bar.dart'; import 'package:circle_app/util/util.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'logic.dart'; @@ -15,8 +16,7 @@ class Signal_circle_listPage extends StatelessWidget { @override Widget build(BuildContext context) { - - return Container( + return Container( width: MediaQuery.of(context).size.width, height: MediaQuery.of(context).size.height, decoration: BoxDecoration( @@ -24,34 +24,32 @@ class Signal_circle_listPage extends StatelessWidget { image: DecorationImage( fit: BoxFit.fill, image: AssetImage(getBaseImage('home_back')))), - child: Scaffold( - backgroundColor: Colors.transparent, - body: SafeArea( - child: GetBuilder(builder: (Signal_circle_listLogic controller) { - return Stack( - children: [ - Container( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.height, - child: Column(children: [ - backNavigatorItem(), - // Text(controller.state.msg), - //组件使用 - // Expanded( - // child: InfoListView(0, Circle(id: Get.arguments['id']), controller)); - ]), - ), - ], - ); - }), - ), - )); - - } - - backNavigatorItem() { - return MyAppBar( - centerTitle: Get.arguments['title'], - ); + child: GetBuilder(builder: (Signal_circle_listLogic controller) { + return Scaffold( + backgroundColor: Colors.transparent, + appBar: MyAppBar( + centerTitle: logic.circle?.title ?? '', + ), + body: Container( + padding: EdgeInsets.only(left: 15.sp, right: 15.sp), + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height, + child: Column(children: [ + // backNavigatorItem(), + // Text(controller.state.msg), + //组件使用 + Expanded( + child: controller.circle == null + ? loaddingWidget(true) + : InfoListView(0, controller.circle!, controller)) + ]), + )); + })); } + // + // backNavigatorItem() { + // return MyAppBar( + // centerTitle: , + // ); + // } } diff --git a/circle_app/lib/router/app_pages.dart b/circle_app/lib/router/app_pages.dart index c7c3ad2..9026328 100644 --- a/circle_app/lib/router/app_pages.dart +++ b/circle_app/lib/router/app_pages.dart @@ -44,6 +44,8 @@ import 'package:circle_app/app/setup/binding.dart'; import 'package:circle_app/app/setup/view.dart'; import 'package:circle_app/app/login/complete_material/binding.dart'; import 'package:circle_app/app/login/complete_material/view.dart'; +import 'package:circle_app/app/signal_circle_list/binding.dart'; +import 'package:circle_app/app/signal_circle_list/view.dart'; import 'package:circle_app/app/splash/binding.dart'; import 'package:circle_app/app/swiper/binding.dart'; import 'package:circle_app/app/swiper/view.dart'; @@ -207,5 +209,11 @@ class AppPages { page: () => PrivacyPage(), binding: PrivacyBinding(), ), + GetPage( + name: AppRoutes.Signal_circle_list, + page: () => Signal_circle_listPage(), + binding: Signal_circle_listBinding(), + ), + ]; } diff --git a/circle_app/lib/router/app_routers.dart b/circle_app/lib/router/app_routers.dart index 74e0e42..63a3954 100644 --- a/circle_app/lib/router/app_routers.dart +++ b/circle_app/lib/router/app_routers.dart @@ -32,6 +32,8 @@ abstract class AppRoutes { static const PrivacyActivity = '/user/PrivacyActivity'; + static const Signal_circle_list = '/msg/chat/signal_circle_list'; + } \ No newline at end of file