From 030041e5ca595ed7ff9e05ac1d39556b70814ede Mon Sep 17 00:00:00 2001 From: YangYuhao Date: Thu, 10 Aug 2023 12:28:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=88=E5=AD=90=E7=9B=B8=E5=85=B3=E7=82=B9?= =?UTF-8?q?=E5=87=BB=E6=BB=91=E5=8A=A8=E5=88=B0=E9=A1=B6=E9=83=A8=20=20?= =?UTF-8?q?=E8=BF=98=E6=9C=89bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- circle_app/lib/app/call_out/logic.dart | 4 +- circle_app/lib/app/circle/logic.dart | 25 +- circle_app/lib/app/circle/view.dart | 10 +- .../app/circle/widgets/info_list_view.dart | 27 +- circle_app/lib/app/minefragment/view.dart | 6 + .../tim_uikit_conversation.dart | 356 ++++++++++-------- circle_app/lib/app/msg/logic.dart | 3 + circle_app/lib/app/msg/view.dart | 136 ++++--- circle_app/lib/app/my_circle/view.dart | 29 +- circle_app/lib/app/select_circle/view.dart | 2 +- .../lib/app/signal_circle_list/view.dart | 5 +- .../lib/common/Widgets/base_tip_widget.dart | 1 + circle_app/lib/components/my_app_bar.dart | 45 ++- 13 files changed, 400 insertions(+), 249 deletions(-) diff --git a/circle_app/lib/app/call_out/logic.dart b/circle_app/lib/app/call_out/logic.dart index 0d91fcb..e1f8351 100644 --- a/circle_app/lib/app/call_out/logic.dart +++ b/circle_app/lib/app/call_out/logic.dart @@ -155,7 +155,7 @@ class Call_outLogic extends GetxController { final logic = Get.put(CircleLogic()); logic.setCircle(numbers[0].id); logic.refresh(); - logic.update(); + // logic.update(); // Navigator.pop(Get.context!, numbers); Get.back(); } else if (beandata.code == 30503) { @@ -181,7 +181,7 @@ class Call_outLogic extends GetxController { // showDialog(); print(numbers[0].id); - showJoinCiclePiker(numbers[0].id.toString(),callOutBean.data.amount,callOutBean.data.oldAmount,0,(payResult){ + showJoinCiclePiker(numbers[0].id.toString(),callOutBean.data.amount.toString(),callOutBean.data.oldAmount.toString(),0,(payResult){ final logic = Get.put(CircleLogic()); logic.circle.lists.forEach((element) { if(element.id == numbers[0].id){ diff --git a/circle_app/lib/app/circle/logic.dart b/circle_app/lib/app/circle/logic.dart index 98c67c6..e8e8d70 100644 --- a/circle_app/lib/app/circle/logic.dart +++ b/circle_app/lib/app/circle/logic.dart @@ -2,10 +2,13 @@ import 'package:circle_app/main.dart'; import 'package:circle_app/router/app_routers.dart'; import 'package:circle_app/util/util.dart'; import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import '../../common/Widgets/open_vip_tip/view.dart'; import '../../network/api.dart'; import '../../network/dio_manager.dart'; import 'state.dart'; +import 'package:scroll_to_index/scroll_to_index.dart'; class CircleLogic extends GetxController { @@ -19,6 +22,9 @@ class CircleLogic extends GetxController { bool isMore = true; + AutoScrollController scrollController = AutoScrollController(); + ScrollController listScrollController = ScrollController(); + @override void onInit() async { super.onInit(); @@ -121,11 +127,28 @@ class CircleLogic extends GetxController { if (!isSuccess) { await sendTextMsg(data['data']['account_id']); } - } else { + } else if(data['code'] == 21201){ + showRechargeDialog(); + }else{ showOKToast(data['msg']); } } + showRechargeDialog(){ + Get.bottomSheet( + Scaffold( + backgroundColor: Colors.transparent, + body: Open_vip_tipPage(false), + ), + isScrollControlled: true, + enableDrag: false); + + } + + + + + } diff --git a/circle_app/lib/app/circle/view.dart b/circle_app/lib/app/circle/view.dart index e460e0d..43b34d7 100644 --- a/circle_app/lib/app/circle/view.dart +++ b/circle_app/lib/app/circle/view.dart @@ -30,6 +30,13 @@ class _CirclePageState extends State final state = Get.find().state; var getContext; + @override + void dispose() { + // TODO: implement dispose + scrollController.dispose(); + super.dispose(); + + } @override Widget build(BuildContext context) { @@ -62,7 +69,8 @@ class _CirclePageState extends State child: Swiper( itemBuilder: (BuildContext context, int index) { var bean = logic.circle.lists[index]; - return InfoListView(index, bean, logic,scrollController); + final GlobalKey infoListViewKey = GlobalKey(); + return InfoListView(key:infoListViewKey,index:index,bean: bean, logic:logic,scrollController:scrollController); }, onIndexChanged: (index) { controller.state.index = index; 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 6e3b9d5..ecdd1a0 100644 --- a/circle_app/lib/app/circle/widgets/info_list_view.dart +++ b/circle_app/lib/app/circle/widgets/info_list_view.dart @@ -20,18 +20,28 @@ import '../../../util/SharedPreferencesHelper.dart'; class InfoListView extends StatefulWidget { // Get.lazyPut(() => ListLogic()); - var logic; - Circle bean; - int index; - ScrollController scrollController; - InfoListView(this.index, this.bean, this.logic,this.scrollController, {super.key}); + + + final int index; + late final Circle bean; + var logic; + final ScrollController scrollController; + + InfoListView({ + Key? key, + required this.index, + required this.bean, + required this.logic, + required this.scrollController, + }) : super(key: key); + @override - State createState() => _InfoListViewState(); + State createState() => InfoListViewState(); } -class _InfoListViewState extends State with AutomaticKeepAliveClientMixin { +class InfoListViewState extends State with AutomaticKeepAliveClientMixin { @override bool get wantKeepAlive => true; @@ -67,8 +77,7 @@ class _InfoListViewState extends State with AutomaticKeepAliveClie } } catch (_) {} }); - circleId = widget.bean.id - .toString(); + circleId = widget.bean.id.toString(); loadCallOutListData(); } diff --git a/circle_app/lib/app/minefragment/view.dart b/circle_app/lib/app/minefragment/view.dart index f89cd3d..833a06f 100644 --- a/circle_app/lib/app/minefragment/view.dart +++ b/circle_app/lib/app/minefragment/view.dart @@ -147,10 +147,15 @@ class MinefragmentPage extends StatelessWidget { "帮助与反馈", style: TextStyle(color: Colors.white), ), + ], ), Row( children: [ + const Text( + "乐园客服在线等您哦", + style: TextStyle(color: Colors.white30), + ), Image( image: AssetImage(getHomeImage("icon_in")), width: 24.sp, @@ -158,6 +163,7 @@ class MinefragmentPage extends StatelessWidget { ), ], ) + ], ), ), diff --git a/circle_app/lib/app/msg/TIMUIKitConversation/tim_uikit_conversation.dart b/circle_app/lib/app/msg/TIMUIKitConversation/tim_uikit_conversation.dart index 3f71356..4588653 100644 --- a/circle_app/lib/app/msg/TIMUIKitConversation/tim_uikit_conversation.dart +++ b/circle_app/lib/app/msg/TIMUIKitConversation/tim_uikit_conversation.dart @@ -40,6 +40,11 @@ class TIMConversation extends StatefulWidget { /// conversation controller final TIMUIKitConversationController? controller; + + final AutoScrollController? autoScrollController; + + + final ScrollController? scrollController; /// the builder for conversation item final TIMConversationItemBuilder? itemBuilder; @@ -76,7 +81,9 @@ class TIMConversation extends StatefulWidget { this.lifeCycle, this.onTapItem, this.controller, + this.autoScrollController, this.itemSecondaryMenuBuilder, + this.scrollController, this.itemBuilder, this.isShowDraft = true, this.itemSlideBuilder, @@ -154,7 +161,7 @@ class _TIMConversationState extends TIMUIKitState { final TUIThemeViewModel themeViewModel = serviceLocator(); final TUIFriendShipViewModel friendShipViewModel = serviceLocator(); - late AutoScrollController _autoScrollController; + @override void initState() { @@ -162,7 +169,14 @@ class _TIMConversationState extends TIMUIKitState { final controller = getController(); _timuiKitConversationController = controller; _timuiKitConversationController.model = model; - _autoScrollController = AutoScrollController(); + } + + scrollToTop() { + widget.autoScrollController!.animateTo( + 0.0, // Scroll to the top + duration: Duration(milliseconds: 300), + curve: Curves.easeInOut, + ); } TIMUIKitConversationController getController() { @@ -219,7 +233,7 @@ class _TIMConversationState extends TIMUIKitState { } if (isFound) { - _autoScrollController.scrollToIndex( + widget.autoScrollController!.scrollToIndex( targetIndex, preferPosition: AutoScrollPosition.begin, ); @@ -308,30 +322,32 @@ class _TIMConversationState extends TIMUIKitState { return widget.itemSlideBuilder ?? _defaultSlideBuilder; } - Future> getUserListInfo(List userIdList) async { - + Future> getUserListInfo( + List userIdList) async { V2TimValueCallback getLoginUserRes = - await TencentImSDKPlugin.v2TIMManager.getLoginUser(); + await TencentImSDKPlugin.v2TIMManager.getLoginUser(); if (getLoginUserRes.code == 0) { //获取成功 - userIdList.insert(0, getLoginUserRes.data!);// getLoginUserRes.data为查询到的登录用户的UserID + userIdList.insert( + 0, getLoginUserRes.data!); // getLoginUserRes.data为查询到的登录用户的UserID } //获取用户资料 V2TimValueCallback> getUsersInfoRes = - await TencentImSDKPlugin.v2TIMManager.getUsersInfo(userIDList: userIdList);//需要查询的用户id列表 + await TencentImSDKPlugin.v2TIMManager + .getUsersInfo(userIDList: userIdList); //需要查询的用户id列表 if (getUsersInfoRes.code == 0) { // 查询成功 getUsersInfoRes.data?.forEach((element) { - element.allowType;//用户的好友验证方式 0:允许所有人加我好友 1:不允许所有人加我好友 2:加我好友需我确认 - element.birthday;//用户生日 - element.customInfo;//用户的自定义状态 - element.faceUrl;//用户头像 url - element.gender;//用户的性别 1:男 2:女 - element.level;//用户的等级 - element.nickName;//用户昵称 - element.role;//用户的角色 - element.selfSignature;//用户的签名 - element.userID;//用户 ID + element.allowType; //用户的好友验证方式 0:允许所有人加我好友 1:不允许所有人加我好友 2:加我好友需我确认 + element.birthday; //用户生日 + element.customInfo; //用户的自定义状态 + element.faceUrl; //用户头像 url + element.gender; //用户的性别 1:男 2:女 + element.level; //用户的等级 + element.nickName; //用户昵称 + element.role; //用户的角色 + element.selfSignature; //用户的签名 + element.userID; //用户 ID }); return getUsersInfoRes.data ?? []; } @@ -368,165 +384,184 @@ class _TIMConversationState extends TIMUIKitState { _model.clearScrollToConversation(); } - List userIdList = []; - filteredConversationList.forEach((element) { userIdList.add(element!.userID!); }); - Widget conversationList() { return filteredConversationList.isNotEmpty ? FutureBuilder>( - future: getUserListInfo(userIdList), - builder: (BuildContext context, AsyncSnapshot> snapshot) { - return ListView.builder( - controller: _autoScrollController, - shrinkWrap: true, - itemCount: filteredConversationList.length, - itemBuilder: (context, index) { - if (index == filteredConversationList.length - 1) { - if (haveMoreData) { - _timuiKitConversationController.loadData(); - } - } + future: getUserListInfo(userIdList), + builder: (BuildContext context, + AsyncSnapshot> snapshot) { + return ListView.builder( + controller: widget.scrollController!, + shrinkWrap: true, + itemCount: filteredConversationList.length, + itemBuilder: (context, index) { + if (index == filteredConversationList.length - 1) { + if (haveMoreData) { + _timuiKitConversationController.loadData(); + } + } - final conversationItem = filteredConversationList[index]; + final conversationItem = + filteredConversationList[index]; - final V2TimUserStatus? onlineStatus = - _friendShipViewModel.userStatusList.firstWhere( - (item) => item.userID == conversationItem?.userID, - orElse: () => V2TimUserStatus(statusType: 0)); + final V2TimUserStatus? onlineStatus = + _friendShipViewModel.userStatusList.firstWhere( + (item) => + item.userID == conversationItem?.userID, + orElse: () => + V2TimUserStatus(statusType: 0)); - if (widget.itemBuilder != null) { - return widget.itemBuilder!( - conversationItem!, onlineStatus); - } + if (widget.itemBuilder != null) { + return widget.itemBuilder!( + conversationItem!, onlineStatus); + } - final slideChildren = - _getSlideBuilder()(conversationItem!); + final slideChildren = + _getSlideBuilder()(conversationItem!); - final isCurrent = conversationItem.conversationID == - model.selectedConversation?.conversationID; + final isCurrent = conversationItem.conversationID == + model.selectedConversation?.conversationID; - final isPined = conversationItem.isPinned ?? false; + final isPined = conversationItem.isPinned ?? false; + V2TimUserFullInfo? userFullInfo; + bool isOfficial = false; + bool isSameCity = false; + if (snapshot.connectionState == + ConnectionState.done) { + snapshot.data!.forEach((element) { + if (element.userID == conversationItem.userID) { + userFullInfo = element; + } + }); + //自己的信息 + V2TimUserFullInfo myuserFullInfo = + snapshot.data!.first; - V2TimUserFullInfo? userFullInfo; - bool isOfficial = false; - bool isSameCity = false; - if (snapshot.connectionState == ConnectionState.done) { - snapshot.data!.forEach((element) { - if (element.userID == conversationItem.userID) { - userFullInfo = element; - } - }); - //自己的信息 - V2TimUserFullInfo myuserFullInfo = snapshot.data!.first; + if (userFullInfo!.customInfo! + .containsKey('Label')) { + var otherInfo = jsonDecode(userFullInfo! + .customInfo!['Label'] + .toString()); + var myInfo = jsonDecode(myuserFullInfo! + .customInfo!['Label'] + .toString()); + if (myInfo['city'] + .toString() + .contains(otherInfo['city'].toString())) { + isSameCity = true; + } + } - if (userFullInfo!.customInfo!.containsKey('Label')) { - var otherInfo = jsonDecode(userFullInfo!.customInfo!['Label'].toString()); - var myInfo = jsonDecode(myuserFullInfo!.customInfo!['Label'].toString()); - if (myInfo['city'].toString().contains(otherInfo['city'].toString())) { - isSameCity = true; - } - } + if (userFullInfo != null) { + List userIdList = + userFullInfo!.userID!.split('_'); + if (userIdList.length >= 4) { + if (int.parse(userIdList[2]) == 10) { + isOfficial = true; + } else { + isOfficial = false; + } + } + } + } - if (userFullInfo != null) { - List userIdList = userFullInfo!.userID!.split('_'); - if (userIdList.length >= 4 ) { - if (int.parse(userIdList[2]) == 10) { - isOfficial = true; - } else { - isOfficial = false; - } - } - } + Widget conversationLineItem() { + return Material( + color: Colors.transparent, + child: InkWell( + child: TIMConversationItem( + isSameCity: isSameCity, + isOfficial: isOfficial, + isCurrent: isCurrent, + userInfo: userFullInfo, + isShowDraft: widget.isShowDraft, + lastMessageBuilder: + widget.lastMessageBuilder, + faceUrl: conversationItem.faceUrl ?? "", + nickName: conversationItem.showName ?? "", + isDisturb: conversationItem.recvOpt != 0, + lastMsg: conversationItem.lastMessage, + isPined: isPined, + groupAtInfoList: + conversationItem.groupAtInfoList ?? + [], + unreadCount: + conversationItem.unreadCount ?? 0, + draftText: conversationItem.draftText, + onlineStatus: (widget + .isShowOnlineStatus && + conversationItem.userID != null && + conversationItem + .userID!.isNotEmpty) + ? onlineStatus + : null, + draftTimestamp: + conversationItem.draftTimestamp, + convType: conversationItem.type), + onTap: () => onTapConvItem(conversationItem), + ), + ); + } - } - - - - - Widget conversationLineItem() { - - return Material( - color: Colors.transparent, - child: InkWell( - child: TIMConversationItem( - isSameCity: isSameCity, - isOfficial: isOfficial, - isCurrent: isCurrent, - userInfo: userFullInfo, - isShowDraft: widget.isShowDraft, - lastMessageBuilder: widget.lastMessageBuilder, - faceUrl: conversationItem.faceUrl ?? "", - nickName: conversationItem.showName ?? "", - isDisturb: conversationItem.recvOpt != 0, - lastMsg: conversationItem.lastMessage, - isPined: isPined, - groupAtInfoList: - conversationItem.groupAtInfoList ?? [], - unreadCount: conversationItem.unreadCount ?? 0, - draftText: conversationItem.draftText, - onlineStatus: (widget.isShowOnlineStatus && - conversationItem.userID != null && - conversationItem.userID!.isNotEmpty) - ? onlineStatus - : null, - draftTimestamp: conversationItem.draftTimestamp, - convType: conversationItem.type), - onTap: () => onTapConvItem(conversationItem), - ), - ); - } - - return TUIKitScreenUtils.getDeviceWidget( - desktopWidget: AutoScrollTag( - key: ValueKey(conversationItem.conversationID), - controller: _autoScrollController, - index: index, - child: GestureDetector( - onSecondaryTapDown: (details) { - TUIKitWidePopup.showPopupWindow( - operationKey: TUIKitWideModalOperationKey - .conversationSecondaryMenu, - isDarkBackground: false, - borderRadius: const BorderRadius.all( - Radius.circular(4)), - context: context, - offset: Offset( - min( - details.globalPosition.dx, - MediaQuery.of(context).size.width - - 80), - min( - details.globalPosition.dy, - MediaQuery.of(context).size.height - - 130)), - child: (onClose) => _getSecondaryMenu( - conversationItem, onClose)); - }, - child: conversationLineItem(), - ), - ), - defaultWidget: AutoScrollTag( - key: ValueKey(conversationItem.conversationID), - controller: _autoScrollController, - index: index, - child: Slidable( - groupTag: 'conversation-list', - child: conversationLineItem(), - endActionPane: ActionPane( - extentRatio: - slideChildren.length > 2 ? 0.77 : 0.5, - motion: const DrawerMotion(), - children: slideChildren)), - )); - }); - }) + return TUIKitScreenUtils.getDeviceWidget( + desktopWidget: AutoScrollTag( + key: + ValueKey(conversationItem.conversationID), + controller: widget.autoScrollController!, + index: index, + child: GestureDetector( + onSecondaryTapDown: (details) { + TUIKitWidePopup.showPopupWindow( + operationKey: + TUIKitWideModalOperationKey + .conversationSecondaryMenu, + isDarkBackground: false, + borderRadius: const BorderRadius.all( + Radius.circular(4)), + context: context, + offset: Offset( + min( + details.globalPosition.dx, + MediaQuery.of(context) + .size + .width - + 80), + min( + details.globalPosition.dy, + MediaQuery.of(context) + .size + .height - + 130)), + child: (onClose) => _getSecondaryMenu( + conversationItem, onClose)); + }, + child: conversationLineItem(), + ), + ), + defaultWidget: AutoScrollTag( + key: + ValueKey(conversationItem.conversationID), + controller: widget.autoScrollController!, + index: index, + child: Slidable( + groupTag: 'conversation-list', + child: conversationLineItem(), + endActionPane: ActionPane( + extentRatio: slideChildren.length > 2 + ? 0.77 + : 0.5, + motion: const DrawerMotion(), + children: slideChildren)), + )); + }); + }) : (widget.emptyBuilder != null ? widget.emptyBuilder!() : Container()); @@ -539,11 +574,14 @@ class _TIMConversationState extends TIMUIKitState { onRefresh: () async { model.refresh(); }, - child: conversationList(), + child:SingleChildScrollView( + controller: widget.scrollController, + child: conversationList(), + ), ), ), desktopWidget: Scrollbar( - controller: _autoScrollController, + controller: widget.autoScrollController!, child: conversationList())); }); } diff --git a/circle_app/lib/app/msg/logic.dart b/circle_app/lib/app/msg/logic.dart index 50c96e2..c59f529 100644 --- a/circle_app/lib/app/msg/logic.dart +++ b/circle_app/lib/app/msg/logic.dart @@ -1,7 +1,10 @@ +import 'package:flutter/cupertino.dart'; import 'package:get/get.dart'; import 'state.dart'; class MsgLogic extends GetxController { final MsgState state = MsgState(); + + } diff --git a/circle_app/lib/app/msg/view.dart b/circle_app/lib/app/msg/view.dart index ad3d6de..4f1d286 100644 --- a/circle_app/lib/app/msg/view.dart +++ b/circle_app/lib/app/msg/view.dart @@ -1,11 +1,14 @@ +import 'dart:math'; + import 'package:circle_app/app/circle/logic.dart'; import 'package:circle_app/router/app_routers.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 'package:scroll_to_index/scroll_to_index.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; - +import 'package:tencent_cloud_chat_uikit/ui/controller/tim_uikit_conversation_controller.dart'; import 'TIMUIKitConversation/tim_uikit_conversation.dart'; import 'logic.dart'; @@ -14,6 +17,7 @@ class MsgPage extends StatelessWidget { MsgPage({Key? key}) : super(key: key); final logic = Get.put(MsgLogic()); + @override Widget build(BuildContext context) { return Container( @@ -24,7 +28,7 @@ class MsgPage extends StatelessWidget { fit: BoxFit.fill, image: AssetImage(getBaseImage('home_back')))), child: Scaffold( - resizeToAvoidBottomInset:false, + resizeToAvoidBottomInset: false, backgroundColor: Colors.transparent, body: SafeArea( child: GetBuilder(builder: (MsgLogic controller) { @@ -62,35 +66,46 @@ class MsgPage extends StatelessWidget { Get.toNamed(AppRoutes.LikeListActivity); }, child: Stack( - children: [ - SizedBox(width: count .length > 2 ? 45.sp : count .length > 1 ? 38.sp : 35.sp,height: 30.sp,), - Image.asset( - getMsgImage('msg_love'), - width: 30.sp, - ), - - int.parse(count) > 0 ? Positioned( - right:0, - child: Container( - padding: EdgeInsets.only(left: 5.sp,right: 5.sp), - height: 14.sp, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(7.sp), - gradient:const LinearGradient(colors: [ - Color(0xFFC343F9), - Color(0xFFFB34B2), - ], - ) - - ), - alignment: Alignment.center, - child: Text( - int.parse(count) > 99 ? '99+' : count, - style: TextStyle(color: Colors.white,fontSize: 10.sp,fontWeight: FontWeight.w500), - ), - )) : Container(), - ], - ))), + children: [ + SizedBox( + width: count.length > 2 + ? 45.sp + : count.length > 1 + ? 38.sp + : 35.sp, + height: 30.sp, + ), + Image.asset( + getMsgImage('msg_love'), + width: 30.sp, + ), + int.parse(count) > 0 + ? Positioned( + right: 0, + child: Container( + padding: + EdgeInsets.only(left: 5.sp, right: 5.sp), + height: 14.sp, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(7.sp), + gradient: const LinearGradient( + colors: [ + Color(0xFFC343F9), + Color(0xFFFB34B2), + ], + )), + alignment: Alignment.center, + child: Text( + int.parse(count) > 99 ? '99+' : count, + style: TextStyle( + color: Colors.white, + fontSize: 10.sp, + fontWeight: FontWeight.w500), + ), + )) + : Container(), + ], + ))), ShaderMask( shaderCallback: (Rect bounds) { return const LinearGradient( @@ -99,15 +114,25 @@ class MsgPage extends StatelessWidget { colors: [Color(0xff71F3F2), Color(0xffF657FF)], ).createShader(Offset.zero & bounds.size); }, - child: Text( - '消息', - style: TextStyle( - fontSize: 18.sp, - fontWeight: FontWeight.w600, - color: Colors.white, - shadows: const [ - Shadow(color: Color(0xffF657FF), offset: Offset(0.0, -1)) - ]), + child: GestureDetector( + onTap: () { + print("123123123"); + logic.listScrollController.animateTo( + 0.0, + duration: Duration(milliseconds: 300), + curve: Curves.easeInOut, + ); + }, + child: Text( + '消息', + style: TextStyle( + fontSize: 18.sp, + fontWeight: FontWeight.w600, + color: Colors.white, + shadows: const [ + Shadow(color: Color(0xffF657FF), offset: Offset(0.0, -1)) + ]), + ), ), ), Positioned( @@ -144,8 +169,12 @@ class MsgPage extends StatelessWidget { ), GestureDetector( onTap: () { - V2TimConversation conv = V2TimConversation(type: 1,userID: '10040818',conversationID: 'c2c_10040818',showName: '456'); - Get.toNamed(AppRoutes.Chat,arguments: conv); + V2TimConversation conv = V2TimConversation( + type: 1, + userID: '10040818', + conversationID: 'c2c_10040818', + showName: '456'); + Get.toNamed(AppRoutes.Chat, arguments: conv); }, child: Row( mainAxisAlignment: MainAxisAlignment.center, @@ -249,19 +278,22 @@ class MsgPage extends StatelessWidget { } msgWdiget(context) { + var logic = Get.find(); return TIMConversation( - onTapItem: (selectedConv) { - String type = selectedConv.userID!.split('_')[2]; - if (int.parse(type) == 11) { - Get.toNamed(AppRoutes.Sys_notify_list,arguments: selectedConv); - return; - } - Get.toNamed(AppRoutes.Chat,arguments: selectedConv); - }, - + autoScrollController: logic.scrollController, + scrollController: logic.listScrollController, + onTapItem: (selectedConv) { + String type = selectedConv.userID!.split('_')[2]; + if (int.parse(type) == 11) { + Get.toNamed(AppRoutes.Sys_notify_list, arguments: selectedConv); + return; + } + Get.toNamed(AppRoutes.Chat, arguments: selectedConv); + }, ); } - Widget msgItem(conv,status){ + + Widget msgItem(conv, status) { return Container(); } } diff --git a/circle_app/lib/app/my_circle/view.dart b/circle_app/lib/app/my_circle/view.dart index 9345006..0d857cf 100644 --- a/circle_app/lib/app/my_circle/view.dart +++ b/circle_app/lib/app/my_circle/view.dart @@ -27,6 +27,7 @@ class _My_circlePageState extends State final state = Get.find().state; + var getContext; final ScrollController scrollController = ScrollController(); @@ -58,7 +59,15 @@ class _My_circlePageState extends State child: logic.circle.lists.isEmpty ? loaddingWidget(true) : Swiper( itemBuilder: (BuildContext context, int index) { var bean = logic.circle.lists[index]; - return InfoListView(index, bean, controller,scrollController); + final GlobalKey infoListViewKey = GlobalKey(); + MyinfoListViewKey = infoListViewKey; + return InfoListView( + key: infoListViewKey, // Assign the key here + index: index, + bean: bean, + logic: controller, + scrollController: scrollController, + ); }, index: controller.state.index, itemCount: logic.circle.lists.length, @@ -85,17 +94,33 @@ class _My_circlePageState extends State )); } + var MyinfoListViewKey; backNavigatorItem() { return MyAppBar( centerTitle: '我的圈子', - onPressed: (){ + onCenterTitlePressed: (){ scrollController.animateTo( 0.0, // Scroll to the top duration: Duration(milliseconds: 300), curve: Curves.easeInOut, ); }, + actionWdiget: const Text( + "发布喊话", + style: TextStyle(color: Colors.white), + ), + onPressed: () async{ + List numbers = []; + numbers.add(MyConfigData( + logic.getCircleIndex().id.toString(), + logic.getCircleIndex().title!, + false)); + var data = await Get.toNamed(AppRoutes.Call_out, arguments: {'numbers': numbers}); + MyinfoListViewKey.currentState?.loadCallOutListData(); + // logic.refresh(); + // logic.update(); + }, ); } diff --git a/circle_app/lib/app/select_circle/view.dart b/circle_app/lib/app/select_circle/view.dart index 7f87c66..9cc9312 100644 --- a/circle_app/lib/app/select_circle/view.dart +++ b/circle_app/lib/app/select_circle/view.dart @@ -27,7 +27,7 @@ class Select_circlePage extends StatelessWidget { appBar: MyAppBar( centerTitle: '选择感兴趣的圈子', actionWdiget: Text( - "提交", + "完成", style: TextStyle(color: Colors.white), ), onPressed: () { diff --git a/circle_app/lib/app/signal_circle_list/view.dart b/circle_app/lib/app/signal_circle_list/view.dart index 92ea2fd..6ed334d 100644 --- a/circle_app/lib/app/signal_circle_list/view.dart +++ b/circle_app/lib/app/signal_circle_list/view.dart @@ -42,12 +42,13 @@ class Signal_circle_listPage extends StatelessWidget { Expanded( child: controller.circle == null ? loaddingWidget(true) - : InfoListView(0, controller.circle!, controller,scrollController)) + : InfoListView(key:GlobalKey(),index:0,bean: controller.circle!,logic: controller,scrollController:scrollController)) ]), )); })); } - // + +// // backNavigatorItem() { // return MyAppBar( // centerTitle: , diff --git a/circle_app/lib/common/Widgets/base_tip_widget.dart b/circle_app/lib/common/Widgets/base_tip_widget.dart index a1a6671..d0dc9e7 100644 --- a/circle_app/lib/common/Widgets/base_tip_widget.dart +++ b/circle_app/lib/common/Widgets/base_tip_widget.dart @@ -18,6 +18,7 @@ joiinCircileTipWdiget(String cicleId, String pirce, String oldPrice, return StatefulBuilder(builder: (BuildContext context, StateSetter setState) { return Scaffold( backgroundColor: Colors.transparent, + resizeToAvoidBottomInset: false, body: Container( width: Get.width, height: Get.height, diff --git a/circle_app/lib/components/my_app_bar.dart b/circle_app/lib/components/my_app_bar.dart index 9f52a30..63f155e 100644 --- a/circle_app/lib/components/my_app_bar.dart +++ b/circle_app/lib/components/my_app_bar.dart @@ -16,6 +16,7 @@ class MyAppBar extends StatelessWidget implements PreferredSizeWidget { this.backImgColor, this.onPressed, this.isDiyBack = false, + this.onCenterTitlePressed, this.superContext, this.isBack = true }): super(key: key); @@ -27,6 +28,7 @@ class MyAppBar extends StatelessWidget implements PreferredSizeWidget { final Color? backImgColor; final Widget? actionWdiget; final VoidCallback? onPressed; + final VoidCallback? onCenterTitlePressed; final bool isBack; final bool isDiyBack; final BuildContext? superContext; @@ -63,27 +65,30 @@ class MyAppBar extends StatelessWidget implements PreferredSizeWidget { ), ) : Container(); - final Widget titleWidget = Semantics( - namesRoute: true, - header: true, - child: Container( - alignment: centerTitle.isEmpty ? Alignment.centerLeft : Alignment.center, - width: double.infinity, - margin: const EdgeInsets.symmetric(horizontal: 48.0), - child: ShaderMask( - shaderCallback: (Rect bounds) { - return const LinearGradient( - begin: Alignment(0.0,-1.0), - end: Alignment.bottomCenter, - colors: [Color(0xff71F3F2), Color(0xffF657FF)], - ).createShader(Offset.zero & bounds.size); - }, - child:Text( - title.isEmpty ? centerTitle : title, - style: TextStyle(fontSize: 18.sp,fontWeight: FontWeight.w600,color: Colors.white,shadows: [Shadow(color: Color(0xffF657FF), offset: Offset(0.0, -1))]), + final Widget titleWidget = GestureDetector( + onTap: onCenterTitlePressed, + child: Semantics( + namesRoute: true, + header: true, + child: Container( + alignment: centerTitle.isEmpty ? Alignment.centerLeft : Alignment.center, + width: double.infinity, + margin: const EdgeInsets.symmetric(horizontal: 48.0), + child: ShaderMask( + shaderCallback: (Rect bounds) { + return const LinearGradient( + begin: Alignment(0.0,-1.0), + end: Alignment.bottomCenter, + colors: [Color(0xff71F3F2), Color(0xffF657FF)], + ).createShader(Offset.zero & bounds.size); + }, + child:Text( + title.isEmpty ? centerTitle : title, + style: TextStyle(fontSize: 18.sp,fontWeight: FontWeight.w600,color: Colors.white,shadows: [Shadow(color: Color(0xffF657FF), offset: Offset(0.0, -1))]), + ), ), - ), - )); + )), + ); return AnnotatedRegion( value: overlayStyle,