圈子相关点击滑动到顶部 还有bug修改

This commit is contained in:
YangYuhao 2023-08-10 12:28:12 +08:00
parent 613660f1ce
commit 030041e5ca
13 changed files with 400 additions and 249 deletions

View File

@ -155,7 +155,7 @@ class Call_outLogic extends GetxController {
final logic = Get.put(CircleLogic()); final logic = Get.put(CircleLogic());
logic.setCircle(numbers[0].id); logic.setCircle(numbers[0].id);
logic.refresh(); logic.refresh();
logic.update(); // logic.update();
// Navigator.pop(Get.context!, numbers); // Navigator.pop(Get.context!, numbers);
Get.back(); Get.back();
} else if (beandata.code == 30503) { } else if (beandata.code == 30503) {
@ -181,7 +181,7 @@ class Call_outLogic extends GetxController {
// showDialog(); // showDialog();
print(numbers[0].id); 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()); final logic = Get.put(CircleLogic());
logic.circle.lists.forEach((element) { logic.circle.lists.forEach((element) {
if(element.id == numbers[0].id){ if(element.id == numbers[0].id){

View File

@ -2,10 +2,13 @@ import 'package:circle_app/main.dart';
import 'package:circle_app/router/app_routers.dart'; import 'package:circle_app/router/app_routers.dart';
import 'package:circle_app/util/util.dart'; import 'package:circle_app/util/util.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import '../../common/Widgets/open_vip_tip/view.dart';
import '../../network/api.dart'; import '../../network/api.dart';
import '../../network/dio_manager.dart'; import '../../network/dio_manager.dart';
import 'state.dart'; import 'state.dart';
import 'package:scroll_to_index/scroll_to_index.dart';
class CircleLogic extends GetxController { class CircleLogic extends GetxController {
@ -19,6 +22,9 @@ class CircleLogic extends GetxController {
bool isMore = true; bool isMore = true;
AutoScrollController scrollController = AutoScrollController();
ScrollController listScrollController = ScrollController();
@override @override
void onInit() async { void onInit() async {
super.onInit(); super.onInit();
@ -121,11 +127,28 @@ class CircleLogic extends GetxController {
if (!isSuccess) { if (!isSuccess) {
await sendTextMsg(data['data']['account_id']); await sendTextMsg(data['data']['account_id']);
} }
} else { } else if(data['code'] == 21201){
showRechargeDialog();
}else{
showOKToast(data['msg']); showOKToast(data['msg']);
} }
} }
showRechargeDialog(){
Get.bottomSheet(
Scaffold(
backgroundColor: Colors.transparent,
body: Open_vip_tipPage(false),
),
isScrollControlled: true,
enableDrag: false);
}
} }

View File

@ -30,6 +30,13 @@ class _CirclePageState extends State<CirclePage>
final state = Get.find<CircleLogic>().state; final state = Get.find<CircleLogic>().state;
var getContext; var getContext;
@override
void dispose() {
// TODO: implement dispose
scrollController.dispose();
super.dispose();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -62,7 +69,8 @@ class _CirclePageState extends State<CirclePage>
child: Swiper( child: Swiper(
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
var bean = logic.circle.lists[index]; var bean = logic.circle.lists[index];
return InfoListView(index, bean, logic,scrollController); final GlobalKey<InfoListViewState> infoListViewKey = GlobalKey<InfoListViewState>();
return InfoListView(key:infoListViewKey,index:index,bean: bean, logic:logic,scrollController:scrollController);
}, },
onIndexChanged: (index) { onIndexChanged: (index) {
controller.state.index = index; controller.state.index = index;

View File

@ -20,18 +20,28 @@ import '../../../util/SharedPreferencesHelper.dart';
class InfoListView extends StatefulWidget { class InfoListView extends StatefulWidget {
// Get.lazyPut(() => ListLogic()); // 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 @override
State<InfoListView> createState() => _InfoListViewState(); State<InfoListView> createState() => InfoListViewState();
} }
class _InfoListViewState extends State<InfoListView> with AutomaticKeepAliveClientMixin { class InfoListViewState extends State<InfoListView> with AutomaticKeepAliveClientMixin {
@override @override
bool get wantKeepAlive => true; bool get wantKeepAlive => true;
@ -67,8 +77,7 @@ class _InfoListViewState extends State<InfoListView> with AutomaticKeepAliveClie
} }
} catch (_) {} } catch (_) {}
}); });
circleId = widget.bean.id circleId = widget.bean.id.toString();
.toString();
loadCallOutListData(); loadCallOutListData();
} }

View File

@ -147,10 +147,15 @@ class MinefragmentPage extends StatelessWidget {
"帮助与反馈", "帮助与反馈",
style: TextStyle(color: Colors.white), style: TextStyle(color: Colors.white),
), ),
], ],
), ),
Row( Row(
children: [ children: [
const Text(
"乐园客服在线等您哦",
style: TextStyle(color: Colors.white30),
),
Image( Image(
image: AssetImage(getHomeImage("icon_in")), image: AssetImage(getHomeImage("icon_in")),
width: 24.sp, width: 24.sp,
@ -158,6 +163,7 @@ class MinefragmentPage extends StatelessWidget {
), ),
], ],
) )
], ],
), ),
), ),

View File

@ -40,6 +40,11 @@ class TIMConversation extends StatefulWidget {
/// conversation controller /// conversation controller
final TIMUIKitConversationController? controller; final TIMUIKitConversationController? controller;
final AutoScrollController? autoScrollController;
final ScrollController? scrollController;
/// the builder for conversation item /// the builder for conversation item
final TIMConversationItemBuilder? itemBuilder; final TIMConversationItemBuilder? itemBuilder;
@ -76,7 +81,9 @@ class TIMConversation extends StatefulWidget {
this.lifeCycle, this.lifeCycle,
this.onTapItem, this.onTapItem,
this.controller, this.controller,
this.autoScrollController,
this.itemSecondaryMenuBuilder, this.itemSecondaryMenuBuilder,
this.scrollController,
this.itemBuilder, this.itemBuilder,
this.isShowDraft = true, this.isShowDraft = true,
this.itemSlideBuilder, this.itemSlideBuilder,
@ -154,7 +161,7 @@ class _TIMConversationState extends TIMUIKitState<TIMConversation> {
final TUIThemeViewModel themeViewModel = serviceLocator<TUIThemeViewModel>(); final TUIThemeViewModel themeViewModel = serviceLocator<TUIThemeViewModel>();
final TUIFriendShipViewModel friendShipViewModel = final TUIFriendShipViewModel friendShipViewModel =
serviceLocator<TUIFriendShipViewModel>(); serviceLocator<TUIFriendShipViewModel>();
late AutoScrollController _autoScrollController;
@override @override
void initState() { void initState() {
@ -162,7 +169,14 @@ class _TIMConversationState extends TIMUIKitState<TIMConversation> {
final controller = getController(); final controller = getController();
_timuiKitConversationController = controller; _timuiKitConversationController = controller;
_timuiKitConversationController.model = model; _timuiKitConversationController.model = model;
_autoScrollController = AutoScrollController(); }
scrollToTop() {
widget.autoScrollController!.animateTo(
0.0, // Scroll to the top
duration: Duration(milliseconds: 300),
curve: Curves.easeInOut,
);
} }
TIMUIKitConversationController getController() { TIMUIKitConversationController getController() {
@ -219,7 +233,7 @@ class _TIMConversationState extends TIMUIKitState<TIMConversation> {
} }
if (isFound) { if (isFound) {
_autoScrollController.scrollToIndex( widget.autoScrollController!.scrollToIndex(
targetIndex, targetIndex,
preferPosition: AutoScrollPosition.begin, preferPosition: AutoScrollPosition.begin,
); );
@ -308,30 +322,32 @@ class _TIMConversationState extends TIMUIKitState<TIMConversation> {
return widget.itemSlideBuilder ?? _defaultSlideBuilder; return widget.itemSlideBuilder ?? _defaultSlideBuilder;
} }
Future<List<V2TimUserFullInfo>> getUserListInfo(List<String> userIdList) async { Future<List<V2TimUserFullInfo>> getUserListInfo(
List<String> userIdList) async {
V2TimValueCallback<String> getLoginUserRes = V2TimValueCallback<String> getLoginUserRes =
await TencentImSDKPlugin.v2TIMManager.getLoginUser(); await TencentImSDKPlugin.v2TIMManager.getLoginUser();
if (getLoginUserRes.code == 0) { if (getLoginUserRes.code == 0) {
// //
userIdList.insert(0, getLoginUserRes.data!);// getLoginUserRes.data为查询到的登录用户的UserID userIdList.insert(
0, getLoginUserRes.data!); // getLoginUserRes.data为查询到的登录用户的UserID
} }
// //
V2TimValueCallback<List<V2TimUserFullInfo>> getUsersInfoRes = V2TimValueCallback<List<V2TimUserFullInfo>> getUsersInfoRes =
await TencentImSDKPlugin.v2TIMManager.getUsersInfo(userIDList: userIdList);//id列表 await TencentImSDKPlugin.v2TIMManager
.getUsersInfo(userIDList: userIdList); //id列表
if (getUsersInfoRes.code == 0) { if (getUsersInfoRes.code == 0) {
// //
getUsersInfoRes.data?.forEach((element) { getUsersInfoRes.data?.forEach((element) {
element.allowType;// 0: 1: 2: element.allowType; // 0: 1: 2:
element.birthday;// element.birthday; //
element.customInfo;// element.customInfo; //
element.faceUrl;// url element.faceUrl; // url
element.gender;// 1: 2: element.gender; // 1: 2:
element.level;// element.level; //
element.nickName;// element.nickName; //
element.role;// element.role; //
element.selfSignature;// element.selfSignature; //
element.userID;// ID element.userID; // ID
}); });
return getUsersInfoRes.data ?? []; return getUsersInfoRes.data ?? [];
} }
@ -368,165 +384,184 @@ class _TIMConversationState extends TIMUIKitState<TIMConversation> {
_model.clearScrollToConversation(); _model.clearScrollToConversation();
} }
List<String> userIdList = []; List<String> userIdList = [];
filteredConversationList.forEach((element) { filteredConversationList.forEach((element) {
userIdList.add(element!.userID!); userIdList.add(element!.userID!);
}); });
Widget conversationList() { Widget conversationList() {
return filteredConversationList.isNotEmpty return filteredConversationList.isNotEmpty
? FutureBuilder<List<V2TimUserFullInfo>>( ? FutureBuilder<List<V2TimUserFullInfo>>(
future: getUserListInfo(userIdList), future: getUserListInfo(userIdList),
builder: (BuildContext context, AsyncSnapshot<List<V2TimUserFullInfo>> snapshot) { builder: (BuildContext context,
return ListView.builder( AsyncSnapshot<List<V2TimUserFullInfo>> snapshot) {
controller: _autoScrollController, return ListView.builder(
shrinkWrap: true, controller: widget.scrollController!,
itemCount: filteredConversationList.length, shrinkWrap: true,
itemBuilder: (context, index) { itemCount: filteredConversationList.length,
if (index == filteredConversationList.length - 1) { itemBuilder: (context, index) {
if (haveMoreData) { if (index == filteredConversationList.length - 1) {
_timuiKitConversationController.loadData(); if (haveMoreData) {
} _timuiKitConversationController.loadData();
} }
}
final conversationItem = filteredConversationList[index]; final conversationItem =
filteredConversationList[index];
final V2TimUserStatus? onlineStatus = final V2TimUserStatus? onlineStatus =
_friendShipViewModel.userStatusList.firstWhere( _friendShipViewModel.userStatusList.firstWhere(
(item) => item.userID == conversationItem?.userID, (item) =>
orElse: () => V2TimUserStatus(statusType: 0)); item.userID == conversationItem?.userID,
orElse: () =>
V2TimUserStatus(statusType: 0));
if (widget.itemBuilder != null) { if (widget.itemBuilder != null) {
return widget.itemBuilder!( return widget.itemBuilder!(
conversationItem!, onlineStatus); conversationItem!, onlineStatus);
} }
final slideChildren = final slideChildren =
_getSlideBuilder()(conversationItem!); _getSlideBuilder()(conversationItem!);
final isCurrent = conversationItem.conversationID == final isCurrent = conversationItem.conversationID ==
model.selectedConversation?.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; if (userFullInfo!.customInfo!
bool isOfficial = false; .containsKey('Label')) {
bool isSameCity = false; var otherInfo = jsonDecode(userFullInfo!
if (snapshot.connectionState == ConnectionState.done) { .customInfo!['Label']
snapshot.data!.forEach((element) { .toString());
if (element.userID == conversationItem.userID) { var myInfo = jsonDecode(myuserFullInfo!
userFullInfo = element; .customInfo!['Label']
} .toString());
}); if (myInfo['city']
// .toString()
V2TimUserFullInfo myuserFullInfo = snapshot.data!.first; .contains(otherInfo['city'].toString())) {
isSameCity = true;
}
}
if (userFullInfo!.customInfo!.containsKey('Label')) { if (userFullInfo != null) {
var otherInfo = jsonDecode(userFullInfo!.customInfo!['Label'].toString()); List<String> userIdList =
var myInfo = jsonDecode(myuserFullInfo!.customInfo!['Label'].toString()); userFullInfo!.userID!.split('_');
if (myInfo['city'].toString().contains(otherInfo['city'].toString())) { if (userIdList.length >= 4) {
isSameCity = true; if (int.parse(userIdList[2]) == 10) {
} isOfficial = true;
} } else {
isOfficial = false;
}
}
}
}
if (userFullInfo != null) { Widget conversationLineItem() {
List<String> userIdList = userFullInfo!.userID!.split('_'); return Material(
if (userIdList.length >= 4 ) { color: Colors.transparent,
if (int.parse(userIdList[2]) == 10) { child: InkWell(
isOfficial = true; child: TIMConversationItem(
} else { isSameCity: isSameCity,
isOfficial = false; 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: widget.autoScrollController!,
Widget conversationLineItem() { index: index,
child: GestureDetector(
return Material( onSecondaryTapDown: (details) {
color: Colors.transparent, TUIKitWidePopup.showPopupWindow(
child: InkWell( operationKey:
child: TIMConversationItem( TUIKitWideModalOperationKey
isSameCity: isSameCity, .conversationSecondaryMenu,
isOfficial: isOfficial, isDarkBackground: false,
isCurrent: isCurrent, borderRadius: const BorderRadius.all(
userInfo: userFullInfo, Radius.circular(4)),
isShowDraft: widget.isShowDraft, context: context,
lastMessageBuilder: widget.lastMessageBuilder, offset: Offset(
faceUrl: conversationItem.faceUrl ?? "", min(
nickName: conversationItem.showName ?? "", details.globalPosition.dx,
isDisturb: conversationItem.recvOpt != 0, MediaQuery.of(context)
lastMsg: conversationItem.lastMessage, .size
isPined: isPined, .width -
groupAtInfoList: 80),
conversationItem.groupAtInfoList ?? [], min(
unreadCount: conversationItem.unreadCount ?? 0, details.globalPosition.dy,
draftText: conversationItem.draftText, MediaQuery.of(context)
onlineStatus: (widget.isShowOnlineStatus && .size
conversationItem.userID != null && .height -
conversationItem.userID!.isNotEmpty) 130)),
? onlineStatus child: (onClose) => _getSecondaryMenu(
: null, conversationItem, onClose));
draftTimestamp: conversationItem.draftTimestamp, },
convType: conversationItem.type), child: conversationLineItem(),
onTap: () => onTapConvItem(conversationItem), ),
), ),
); defaultWidget: AutoScrollTag(
} key:
ValueKey(conversationItem.conversationID),
return TUIKitScreenUtils.getDeviceWidget( controller: widget.autoScrollController!,
desktopWidget: AutoScrollTag( index: index,
key: ValueKey(conversationItem.conversationID), child: Slidable(
controller: _autoScrollController, groupTag: 'conversation-list',
index: index, child: conversationLineItem(),
child: GestureDetector( endActionPane: ActionPane(
onSecondaryTapDown: (details) { extentRatio: slideChildren.length > 2
TUIKitWidePopup.showPopupWindow( ? 0.77
operationKey: TUIKitWideModalOperationKey : 0.5,
.conversationSecondaryMenu, motion: const DrawerMotion(),
isDarkBackground: false, children: slideChildren)),
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)),
));
});
})
: (widget.emptyBuilder != null : (widget.emptyBuilder != null
? widget.emptyBuilder!() ? widget.emptyBuilder!()
: Container()); : Container());
@ -539,11 +574,14 @@ class _TIMConversationState extends TIMUIKitState<TIMConversation> {
onRefresh: () async { onRefresh: () async {
model.refresh(); model.refresh();
}, },
child: conversationList(), child:SingleChildScrollView(
controller: widget.scrollController,
child: conversationList(),
),
), ),
), ),
desktopWidget: Scrollbar( desktopWidget: Scrollbar(
controller: _autoScrollController, controller: widget.autoScrollController!,
child: conversationList())); child: conversationList()));
}); });
} }

View File

@ -1,7 +1,10 @@
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'state.dart'; import 'state.dart';
class MsgLogic extends GetxController { class MsgLogic extends GetxController {
final MsgState state = MsgState(); final MsgState state = MsgState();
} }

View File

@ -1,11 +1,14 @@
import 'dart:math';
import 'package:circle_app/app/circle/logic.dart'; import 'package:circle_app/app/circle/logic.dart';
import 'package:circle_app/router/app_routers.dart'; import 'package:circle_app/router/app_routers.dart';
import 'package:circle_app/util/util.dart'; import 'package:circle_app/util/util.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:scroll_to_index/scroll_to_index.dart';
import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.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 'TIMUIKitConversation/tim_uikit_conversation.dart';
import 'logic.dart'; import 'logic.dart';
@ -14,6 +17,7 @@ class MsgPage extends StatelessWidget {
MsgPage({Key? key}) : super(key: key); MsgPage({Key? key}) : super(key: key);
final logic = Get.put(MsgLogic()); final logic = Get.put(MsgLogic());
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
@ -24,7 +28,7 @@ class MsgPage extends StatelessWidget {
fit: BoxFit.fill, fit: BoxFit.fill,
image: AssetImage(getBaseImage('home_back')))), image: AssetImage(getBaseImage('home_back')))),
child: Scaffold( child: Scaffold(
resizeToAvoidBottomInset:false, resizeToAvoidBottomInset: false,
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
body: SafeArea( body: SafeArea(
child: GetBuilder(builder: (MsgLogic controller) { child: GetBuilder(builder: (MsgLogic controller) {
@ -62,35 +66,46 @@ class MsgPage extends StatelessWidget {
Get.toNamed(AppRoutes.LikeListActivity); Get.toNamed(AppRoutes.LikeListActivity);
}, },
child: Stack( child: Stack(
children: [ children: [
SizedBox(width: count .length > 2 ? 45.sp : count .length > 1 ? 38.sp : 35.sp,height: 30.sp,), SizedBox(
Image.asset( width: count.length > 2
getMsgImage('msg_love'), ? 45.sp
width: 30.sp, : count.length > 1
), ? 38.sp
: 35.sp,
int.parse(count) > 0 ? Positioned( height: 30.sp,
right:0, ),
child: Container( Image.asset(
padding: EdgeInsets.only(left: 5.sp,right: 5.sp), getMsgImage('msg_love'),
height: 14.sp, width: 30.sp,
decoration: BoxDecoration( ),
borderRadius: BorderRadius.circular(7.sp), int.parse(count) > 0
gradient:const LinearGradient(colors: [ ? Positioned(
Color(0xFFC343F9), right: 0,
Color(0xFFFB34B2), child: Container(
], padding:
) EdgeInsets.only(left: 5.sp, right: 5.sp),
height: 14.sp,
), decoration: BoxDecoration(
alignment: Alignment.center, borderRadius: BorderRadius.circular(7.sp),
child: Text( gradient: const LinearGradient(
int.parse(count) > 99 ? '99+' : count, colors: [
style: TextStyle(color: Colors.white,fontSize: 10.sp,fontWeight: FontWeight.w500), Color(0xFFC343F9),
), Color(0xFFFB34B2),
)) : Container(), ],
], )),
))), alignment: Alignment.center,
child: Text(
int.parse(count) > 99 ? '99+' : count,
style: TextStyle(
color: Colors.white,
fontSize: 10.sp,
fontWeight: FontWeight.w500),
),
))
: Container(),
],
))),
ShaderMask( ShaderMask(
shaderCallback: (Rect bounds) { shaderCallback: (Rect bounds) {
return const LinearGradient( return const LinearGradient(
@ -99,15 +114,25 @@ class MsgPage extends StatelessWidget {
colors: [Color(0xff71F3F2), Color(0xffF657FF)], colors: [Color(0xff71F3F2), Color(0xffF657FF)],
).createShader(Offset.zero & bounds.size); ).createShader(Offset.zero & bounds.size);
}, },
child: Text( child: GestureDetector(
'消息', onTap: () {
style: TextStyle( print("123123123");
fontSize: 18.sp, logic.listScrollController.animateTo(
fontWeight: FontWeight.w600, 0.0,
color: Colors.white, duration: Duration(milliseconds: 300),
shadows: const [ curve: Curves.easeInOut,
Shadow(color: Color(0xffF657FF), offset: Offset(0.0, -1)) );
]), },
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( Positioned(
@ -144,8 +169,12 @@ class MsgPage extends StatelessWidget {
), ),
GestureDetector( GestureDetector(
onTap: () { onTap: () {
V2TimConversation conv = V2TimConversation(type: 1,userID: '10040818',conversationID: 'c2c_10040818',showName: '456'); V2TimConversation conv = V2TimConversation(
Get.toNamed(AppRoutes.Chat,arguments: conv); type: 1,
userID: '10040818',
conversationID: 'c2c_10040818',
showName: '456');
Get.toNamed(AppRoutes.Chat, arguments: conv);
}, },
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
@ -249,19 +278,22 @@ class MsgPage extends StatelessWidget {
} }
msgWdiget(context) { msgWdiget(context) {
var logic = Get.find<CircleLogic>();
return TIMConversation( return TIMConversation(
onTapItem: (selectedConv) { autoScrollController: logic.scrollController,
String type = selectedConv.userID!.split('_')[2]; scrollController: logic.listScrollController,
if (int.parse(type) == 11) { onTapItem: (selectedConv) {
Get.toNamed(AppRoutes.Sys_notify_list,arguments: selectedConv); String type = selectedConv.userID!.split('_')[2];
return; if (int.parse(type) == 11) {
} Get.toNamed(AppRoutes.Sys_notify_list, arguments: selectedConv);
Get.toNamed(AppRoutes.Chat,arguments: selectedConv); return;
}, }
Get.toNamed(AppRoutes.Chat, arguments: selectedConv);
},
); );
} }
Widget msgItem(conv,status){
Widget msgItem(conv, status) {
return Container(); return Container();
} }
} }

View File

@ -27,6 +27,7 @@ class _My_circlePageState extends State<My_circlePage>
final state = Get.find<MyCircleLogic>().state; final state = Get.find<MyCircleLogic>().state;
var getContext; var getContext;
final ScrollController scrollController = ScrollController(); final ScrollController scrollController = ScrollController();
@ -58,7 +59,15 @@ class _My_circlePageState extends State<My_circlePage>
child: logic.circle.lists.isEmpty ? loaddingWidget(true) : Swiper( child: logic.circle.lists.isEmpty ? loaddingWidget(true) : Swiper(
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
var bean = logic.circle.lists[index]; var bean = logic.circle.lists[index];
return InfoListView(index, bean, controller,scrollController); final GlobalKey<InfoListViewState> infoListViewKey = GlobalKey<InfoListViewState>();
MyinfoListViewKey = infoListViewKey;
return InfoListView(
key: infoListViewKey, // Assign the key here
index: index,
bean: bean,
logic: controller,
scrollController: scrollController,
);
}, },
index: controller.state.index, index: controller.state.index,
itemCount: logic.circle.lists.length, itemCount: logic.circle.lists.length,
@ -85,17 +94,33 @@ class _My_circlePageState extends State<My_circlePage>
)); ));
} }
var MyinfoListViewKey;
backNavigatorItem() { backNavigatorItem() {
return MyAppBar( return MyAppBar(
centerTitle: '我的圈子', centerTitle: '我的圈子',
onPressed: (){ onCenterTitlePressed: (){
scrollController.animateTo( scrollController.animateTo(
0.0, // Scroll to the top 0.0, // Scroll to the top
duration: Duration(milliseconds: 300), duration: Duration(milliseconds: 300),
curve: Curves.easeInOut, curve: Curves.easeInOut,
); );
}, },
actionWdiget: const Text(
"发布喊话",
style: TextStyle(color: Colors.white),
),
onPressed: () async{
List<MyConfigData> 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();
},
); );
} }

View File

@ -27,7 +27,7 @@ class Select_circlePage extends StatelessWidget {
appBar: MyAppBar( appBar: MyAppBar(
centerTitle: '选择感兴趣的圈子', centerTitle: '选择感兴趣的圈子',
actionWdiget: Text( actionWdiget: Text(
"提交", "完成",
style: TextStyle(color: Colors.white), style: TextStyle(color: Colors.white),
), ),
onPressed: () { onPressed: () {

View File

@ -42,12 +42,13 @@ class Signal_circle_listPage extends StatelessWidget {
Expanded( Expanded(
child: controller.circle == null child: controller.circle == null
? loaddingWidget(true) ? loaddingWidget(true)
: InfoListView(0, controller.circle!, controller,scrollController)) : InfoListView(key:GlobalKey<InfoListViewState>(),index:0,bean: controller.circle!,logic: controller,scrollController:scrollController))
]), ]),
)); ));
})); }));
} }
//
//
// backNavigatorItem() { // backNavigatorItem() {
// return MyAppBar( // return MyAppBar(
// centerTitle: , // centerTitle: ,

View File

@ -18,6 +18,7 @@ joiinCircileTipWdiget(String cicleId, String pirce, String oldPrice,
return StatefulBuilder(builder: (BuildContext context, StateSetter setState) { return StatefulBuilder(builder: (BuildContext context, StateSetter setState) {
return Scaffold( return Scaffold(
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
resizeToAvoidBottomInset: false,
body: Container( body: Container(
width: Get.width, width: Get.width,
height: Get.height, height: Get.height,

View File

@ -16,6 +16,7 @@ class MyAppBar extends StatelessWidget implements PreferredSizeWidget {
this.backImgColor, this.backImgColor,
this.onPressed, this.onPressed,
this.isDiyBack = false, this.isDiyBack = false,
this.onCenterTitlePressed,
this.superContext, this.superContext,
this.isBack = true this.isBack = true
}): super(key: key); }): super(key: key);
@ -27,6 +28,7 @@ class MyAppBar extends StatelessWidget implements PreferredSizeWidget {
final Color? backImgColor; final Color? backImgColor;
final Widget? actionWdiget; final Widget? actionWdiget;
final VoidCallback? onPressed; final VoidCallback? onPressed;
final VoidCallback? onCenterTitlePressed;
final bool isBack; final bool isBack;
final bool isDiyBack; final bool isDiyBack;
final BuildContext? superContext; final BuildContext? superContext;
@ -63,27 +65,30 @@ class MyAppBar extends StatelessWidget implements PreferredSizeWidget {
), ),
) : Container(); ) : Container();
final Widget titleWidget = Semantics( final Widget titleWidget = GestureDetector(
namesRoute: true, onTap: onCenterTitlePressed,
header: true, child: Semantics(
child: Container( namesRoute: true,
alignment: centerTitle.isEmpty ? Alignment.centerLeft : Alignment.center, header: true,
width: double.infinity, child: Container(
margin: const EdgeInsets.symmetric(horizontal: 48.0), alignment: centerTitle.isEmpty ? Alignment.centerLeft : Alignment.center,
child: ShaderMask( width: double.infinity,
shaderCallback: (Rect bounds) { margin: const EdgeInsets.symmetric(horizontal: 48.0),
return const LinearGradient( child: ShaderMask(
begin: Alignment(0.0,-1.0), shaderCallback: (Rect bounds) {
end: Alignment.bottomCenter, return const LinearGradient(
colors: [Color(0xff71F3F2), Color(0xffF657FF)], begin: Alignment(0.0,-1.0),
).createShader(Offset.zero & bounds.size); end: Alignment.bottomCenter,
}, colors: [Color(0xff71F3F2), Color(0xffF657FF)],
child:Text( ).createShader(Offset.zero & bounds.size);
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))]), 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<SystemUiOverlayStyle>( return AnnotatedRegion<SystemUiOverlayStyle>(
value: overlayStyle, value: overlayStyle,