From 4a86537491019da318ea18fc7dedcfaee26de580 Mon Sep 17 00:00:00 2001 From: yangyuhao <291808500@qq.com> Date: Thu, 7 Sep 2023 12:04:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=84=E7=A7=8D=E5=B1=9E=E6=80=A7=E6=94=B9?= =?UTF-8?q?=E6=88=90=E4=BB=8E=E6=9C=8D=E5=8A=A1=E7=AB=AF=E6=8B=89=E5=8F=96?= =?UTF-8?q?=20=20=E8=81=8A=E5=A4=A9=E7=95=8C=E9=9D=A2=E5=8F=91=E8=A7=86?= =?UTF-8?q?=E9=A2=91=20=20=E8=BF=98=E6=9C=89=E4=BA=9B=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E4=B8=8A=E7=9A=84=E5=B0=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- circle_app/android/app/build.gradle | 4 +- circle_app/assets/images/msg/icon_video.png | Bin 0 -> 10016 bytes .../assets/images/msg/icon_video_camera.png | Bin 0 -> 9831 bytes circle_app/lib/app/aboutapp/logic.dart | 2 + circle_app/lib/app/aboutapp/view.dart | 2 +- .../tim_uikit_text_field_layout/narrow.dart | 143 ++++- circle_app/lib/app/chat/view.dart | 3 +- circle_app/lib/app/circle/state.dart | 5 + circle_app/lib/app/circle/view.dart | 61 ++- .../app/circle/widgets/info_list_view.dart | 487 ++++++++++-------- circle_app/lib/app/dialog/UpdateDialog.dart | 4 +- .../lib/app/dialog/YesAgreementDialog.dart | 4 +- circle_app/lib/app/home/logic.dart | 1 - .../tim_uikit_conversation.dart | 13 +- circle_app/lib/app/splash/logic.dart | 40 +- circle_app/lib/app/userinfo/view.dart | 33 +- circle_app/lib/network/dio_manager.dart | 2 +- circle_app/lib/util/util.dart | 112 ++-- 18 files changed, 558 insertions(+), 358 deletions(-) create mode 100644 circle_app/assets/images/msg/icon_video.png create mode 100644 circle_app/assets/images/msg/icon_video_camera.png diff --git a/circle_app/android/app/build.gradle b/circle_app/android/app/build.gradle index cf84743..bbb3fee 100644 --- a/circle_app/android/app/build.gradle +++ b/circle_app/android/app/build.gradle @@ -65,8 +65,8 @@ android { // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion 21 targetSdkVersion flutter.targetSdkVersion - versionCode 8 - versionName "1.0.7" + versionCode 10 + versionName "1.0.9" manifestPlaceholders = [ vivo_APPID: "105669716", vivo_APPKEY:"84f750207787376b310ca5b0d5969122", diff --git a/circle_app/assets/images/msg/icon_video.png b/circle_app/assets/images/msg/icon_video.png new file mode 100644 index 0000000000000000000000000000000000000000..5dd31c2508ada7872d111186bccd249e22c88d38 GIT binary patch literal 10016 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�vpG)~57y3pI2Ib=CyM3-Wkalo(JG?|Nqj{V`M)>JEf z->2H&eZz@D?t~o76MugAAHM*gKW=ofyEaH<8>E`!C{1voVXn49U7J;rRJVkOy09n1 zmMw5WT$0X2!E)yKRGyCpWVeftF*=IG;N-&a&y+pjIw$$K1VhWJ^eQ(AyBaUj%_G$#MZ9-aD2ls6!g``+rtB zY2CL~nBF_y+}xlg2(V`Cu2*YN_b7muvx^i|M8+!%k7ii95HVqDZBgP6$dY;LWv1gQ ziuH1Ni@z_#fXli#&K|sliDz!st_|mSH(SNvIeF#sJ zpWs)+9L(#uP2bU3s=+Ow^?N~4IV1h(IfGB4<>@u2yC&9mc3kp{-N8Gb8}&L<2Ju7W z&?iiXQ8ve^48v8F*XDL4YPhN~HYG{ZdTnnT62^VQ9*qWy5rtxy$hHlk;?9cXT zkT52VU>A;6dx+RESrqaREwT%`p+7cozI0w>qo%X54W{0%-lrqlz@5qCTSvg`d~jLGdB@DC19SuNty_rKG;vm%uNJO37DsE zk|u(u5B5_sa}&W+0_N$Pq>13^gZ-4u+(ht{fO+~RX(D*~U_T`@|33_VhqP)-Ov3;G N002ovPDHLkV1k#FydeMp literal 0 HcmV?d00001 diff --git a/circle_app/lib/app/aboutapp/logic.dart b/circle_app/lib/app/aboutapp/logic.dart index 839941e..9d86586 100644 --- a/circle_app/lib/app/aboutapp/logic.dart +++ b/circle_app/lib/app/aboutapp/logic.dart @@ -50,6 +50,8 @@ class AboutappLogic extends GetxController { getUpVersion() async { if(isUpdate){ showReportDialog(Get.context!, _updateInfo!.constraint == 0, _updateInfo!); + }else { + showOKToast("暂无新版本"); } } diff --git a/circle_app/lib/app/aboutapp/view.dart b/circle_app/lib/app/aboutapp/view.dart index d6f2509..d1d906b 100644 --- a/circle_app/lib/app/aboutapp/view.dart +++ b/circle_app/lib/app/aboutapp/view.dart @@ -177,7 +177,7 @@ class AboutappPage extends StatelessWidget { ), ):Container(), Text( - logic.version, + "", style: TextStyle( color: const Color(0xFFB7BECC), fontSize: 12.sp, 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 c3e1afb..89fa94b 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 @@ -1,5 +1,7 @@ import 'dart:async'; +import 'dart:io'; import 'dart:math'; +import 'dart:typed_data'; import 'package:circle_app/app/chat/TIMUIKitChat/TIMUIKitTextField/tim_uikit_send_sound_message.dart'; import 'package:circle_app/app/minefragment/logic.dart'; @@ -30,8 +32,11 @@ import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKitTextField import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_send_sound_message.dart'; import 'package:tencent_extended_text_field/extended_text_field.dart'; import 'package:tencent_keyboard_visibility/tencent_keyboard_visibility.dart'; +import 'package:video_player/video_player.dart'; +import 'package:video_thumbnail/video_thumbnail.dart'; import '../../../../../util/eventBus.dart'; +import '../../../../call_out/logic.dart'; GlobalKey<_TIMTextFieldLayoutNarrowState> TIMnarrowTextFieldKey = GlobalKey(); @@ -79,7 +84,7 @@ class TIMTextFieldLayoutNarrow extends StatefulWidget { /// hint text for textField widget final String? hintText; - final String? userId; + final String? userId; final int? currentCursor; @@ -139,7 +144,7 @@ class TIMTextFieldLayoutNarrow extends StatefulWidget { required this.showSendEmoji, required this.showMorePanel, this.hintText, - this.userId, + this.userId, required this.customEmojiStickerList, this.controller}) : super(key: key); @@ -174,9 +179,10 @@ class _TIMTextFieldLayoutNarrowState } }); } - if(null==commentBlackEvent){ - commentBlackEvent = EventBusManager.on().listen((event) { - if(event.userId == widget.userId){ + if (null == commentBlackEvent) { + commentBlackEvent = + EventBusManager.on().listen((event) { + if (event.userId == widget.userId) { isBlack = event.isBlack; } }); @@ -184,15 +190,16 @@ class _TIMTextFieldLayoutNarrowState getBlack(); } - StreamSubscription? commentBlackEvent =null; + + StreamSubscription? commentBlackEvent = null; + @override void dispose() { print("TIMTextFieldLayoutNarrow解绑"); - if(null!=commentBlackEvent){ + if (null != commentBlackEvent) { EventBusManager.cancelSubscription(commentBlackEvent!); } - super.dispose(); } @@ -200,7 +207,7 @@ class _TIMTextFieldLayoutNarrowState getBlack() async { final FriendshipServices _friendshipServices = - serviceLocator(); + serviceLocator(); List? blacklist = await _friendshipServices.getBlackList(); if (blacklist != null) { isBlack = false; @@ -213,7 +220,6 @@ class _TIMTextFieldLayoutNarrowState } } - void setSendButton() { final value = widget.textEditingController.text; if (isWebDevice() || isAndroidDevice()) { @@ -411,7 +417,7 @@ class _TIMTextFieldLayoutNarrowState setKeyboardHeight ??= OptimizeUtils.debounce((height) { settingModel.keyboardHeight = height; }, const Duration(seconds: 1)); - // + // final debounceFunc = _debounce((value) { if (isWebDevice() || isAndroidDevice()) { if (value.isEmpty && showMoreButton != true) { @@ -518,7 +524,7 @@ class _TIMTextFieldLayoutNarrowState Stack( children: [ Container( - width: Get.width - 80.sp, + width: Get.width - 80.sp, // width: 296.sp, padding: EdgeInsets.symmetric( vertical: 8, horizontal: 12.sp), @@ -667,7 +673,7 @@ class _TIMTextFieldLayoutNarrowState ), ), Container( - height: 40.sp, + height: 64.sp, width: Get.width, child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, @@ -691,7 +697,8 @@ class _TIMTextFieldLayoutNarrowState showSendSoundText = !showSendSoundText; }); } else { - var data = await Permission.microphone.request(); + var data = + await Permission.microphone.request(); if (data.isGranted) { setState(() { showEmojiPanel = false; @@ -699,7 +706,8 @@ class _TIMTextFieldLayoutNarrowState showSendSoundText = !showSendSoundText; }); } else { - Permissions.showPermissionConfirmDialog(context, Permission.microphone.value); + Permissions.showPermissionConfirmDialog( + context, Permission.microphone.value); } } } catch (e) { @@ -733,6 +741,28 @@ class _TIMTextFieldLayoutNarrowState child: Image.asset(getMsgImage('take_photo'), width: 40.sp), ), + GestureDetector( + onTap: () { + if (isBlack) { + showOKToast("您已将对方拉黑,请移除黑名单后在发送消息~"); + return; + } + getVideoFile(ImageSource.gallery); + }, + child: Image.asset(getMsgImage('icon_video'), + width: 40.sp), + ), + GestureDetector( + onTap: () { + if (isBlack) { + showOKToast("您已将对方拉黑,请移除黑名单后在发送消息~"); + return; + } + getVideoFile(ImageSource.camera); + }, + child: Image.asset(getMsgImage('icon_video_camera'), + width: 40.sp), + ), ], ), ), @@ -783,7 +813,6 @@ class _TIMTextFieldLayoutNarrowState User userInfoBean = bean.data.user!; isVip = userInfoBean.vip > 0; } - } if (!isVip) { showOKToast('开通会员之后才能发送图片'); @@ -801,6 +830,81 @@ class _TIMTextFieldLayoutNarrowState return isVip; } + VideoPlayerController? videoPlayerController; + + Future getVideoFile(ImageSource imageSource) async { + bool isOK = await checkVipStatus(); + if (!isOK) { + return; + } + + XFile? pickedFile; + String? thumbnailPath; // 声明 thumbnailPath 变量 + + try { + pickedFile = await _picker.pickVideo( + source: imageSource, + ); + if (pickedFile == null) { + return; + } + + videoPlayerController = VideoPlayerController.file( + File(pickedFile.path), + videoPlayerOptions: VideoPlayerOptions(mixWithOthers: true), + ); + await videoPlayerController?.initialize().then((_) async { + thumbnailPath = await VideoThumbnail.thumbnailFile( + video: pickedFile!.path, + imageFormat: ImageFormat.JPEG, + maxWidth: 100, + quality: 50, + ); + }); + + final Duration videoDuration = videoPlayerController!.value.duration; + final double durationInSeconds = videoDuration.inSeconds.toDouble(); + + await widget.model.sendVideoMessage( + videoPath: pickedFile.path, + snapshotPath: thumbnailPath, + // 在此处可用 + convID: widget.conversationID, + convType: widget.conversationType, + duration: durationInSeconds.toInt(), + inputElement: context, + ); + } catch (e) { + print(e); + // setState(() { + // _pickImageError = e; + // }); + } + } + + Future getFirstPic(url) async { + Uint8List? bytes = await VideoThumbnail.thumbnailData(video: url); + final Completer completer = Completer(); + if (bytes != null) { + int _imageDataSize = bytes.length; + print("image size: $_imageDataSize"); + + final _image = Image.memory(bytes); + _image.image + .resolve(ImageConfiguration()) + .addListener(ImageStreamListener((ImageInfo info, bool _) { + completer.complete(ThumbnailResult( + image: _image, + dataSize: _imageDataSize, + height: info.image.height, + width: info.image.width, + )); + })); + } + + return completer.future; + } + Future getImageFile() async { bool isOK = await checkVipStatus(); if (!isOK) { @@ -825,10 +929,9 @@ class _TIMTextFieldLayoutNarrowState Future getTakeImageFile() async { bool isOK = await checkVipStatus(); - if (!isOK) { - return; - } - + if (!isOK) { + return; + } try { final XFile? pickedFile = await _picker.pickImage( diff --git a/circle_app/lib/app/chat/view.dart b/circle_app/lib/app/chat/view.dart index b1cf689..0da79e0 100644 --- a/circle_app/lib/app/chat/view.dart +++ b/circle_app/lib/app/chat/view.dart @@ -14,7 +14,6 @@ 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 '../../util/eventBus.dart'; -import 'logic.dart'; class ChatPage extends StatefulWidget { @@ -111,6 +110,7 @@ class _ChatPageState extends State { Widget build(BuildContext context) { V2TimConversation con = Get.arguments; return TIMChat( + conversation: Get.arguments, customStickerPanel: renderCustomStickerPanel, onTapAvatar :(String userId,TapDownDetails tapDownDetails)async{ @@ -121,6 +121,7 @@ class _ChatPageState extends State { }, controller : _timuiKitChatController, config: TIMUIKitChatConfig( + // 仅供演示,非全部配置项,实际使用中,可只传和默认项不同的参数,无需传入所有开关 isAllowClickAvatar: true, isUseDefaultEmoji: true, diff --git a/circle_app/lib/app/circle/state.dart b/circle_app/lib/app/circle/state.dart index 2a79e75..a87fd99 100644 --- a/circle_app/lib/app/circle/state.dart +++ b/circle_app/lib/app/circle/state.dart @@ -1,3 +1,7 @@ +import 'package:get/get_rx/src/rx_types/rx_types.dart'; + +import 'logic.dart'; + class CircleState { String msg = ''; int index = 0; @@ -79,6 +83,7 @@ class Chat { int? count; List? users; + Chat({this.accountId, this.count, this.users}); Chat.fromJson(Map json) { diff --git a/circle_app/lib/app/circle/view.dart b/circle_app/lib/app/circle/view.dart index d6f087a..07844d9 100644 --- a/circle_app/lib/app/circle/view.dart +++ b/circle_app/lib/app/circle/view.dart @@ -21,7 +21,6 @@ class CirclePage extends StatefulWidget { class _CirclePageState extends State with AutomaticKeepAliveClientMixin { - @override bool get wantKeepAlive => true; @@ -31,24 +30,20 @@ class _CirclePageState extends State final state = Get.find().state; var getContext; - @override - void dispose() { - // TODO: implement dispose - super.dispose(); - } @override Widget build(BuildContext context) { + super.build(context); getContext = context; return GetBuilder(builder: (logic) { return Container( width: MediaQuery.of(context).size.width, height: MediaQuery.of(context).size.height, decoration: const BoxDecoration( - color: const Color(0xFF423055), - image: bgWidget), + color: const Color(0xFF423055), image: bgWidget), child: Scaffold( + resizeToAvoidBottomInset: false, backgroundColor: Colors.transparent, body: SafeArea( child: GetBuilder(builder: (CircleLogic controller) { @@ -66,25 +61,24 @@ class _CirclePageState extends State Expanded( child: Swiper( itemBuilder: (BuildContext context, int index) { + var bean = logic.circle.lists[index]; - // final GlobalKey infoListViewKey = GlobalKey(); + // final GlobalKey infoListViewKey = GlobalKey(); return InfoListView(index, bean, logic); }, onIndexChanged: (index) { controller.state.index = index; if (index == logic.circle.lists.length - 1) { logic.loadMore(); - } print(index.toString()); - }, index: controller.state.index, itemCount: logic.circle.lists.length, viewportFraction: 0.93, // scale: 0.9, - loop: false, - key: UniqueKey(), + loop: false, + key: UniqueKey(), // pagination: new SwiperPagination(),//如果不填则不显示指示点 // control: new SwiperControl(),//如果不填则不显示左右按钮 )) @@ -100,8 +94,8 @@ class _CirclePageState extends State logic.getCircleIndex().id.toString(), logic.getCircleIndex().title!, false)); - var data = await Get.toNamed(AppRoutes.Call_out, arguments: {'numbers': numbers}); - + var data = await Get.toNamed(AppRoutes.Call_out, + arguments: {'numbers': numbers}); }, child: Image.asset( getCircleImage('send_msg'), @@ -122,11 +116,11 @@ class _CirclePageState extends State infoList = statistics.lastVisitUsers; if (infoList.isNotEmpty) { for (var element in infoList) { - if(element["avatar"]!=null&&element["avatar"].contains("http")){ - urlList.add(element["avatar"]); - } + if (element["avatar"] != null && element["avatar"].contains("http")) { + urlList.add(element["avatar"]); + } - // urlList.add(element["avatar"]); + // urlList.add(element["avatar"]); } } } @@ -179,7 +173,7 @@ class _CirclePageState extends State ).createShader(Offset.zero & bounds.size); }, child: GestureDetector( - onTap: (){ + onTap: () { EventBusManager.fire(ScrollToTop()); }, child: Text( @@ -188,7 +182,9 @@ class _CirclePageState extends State fontSize: 18.sp, fontWeight: FontWeight.w600, color: Colors.white, - shadows: const [Shadow(color: Color(0xffF657FF), offset: Offset(0.0, -1))], + shadows: const [ + Shadow(color: Color(0xffF657FF), offset: Offset(0.0, -1)) + ], ), ), ), @@ -219,20 +215,23 @@ class _CirclePageState extends State getCircleImage('avatar_bg'), width: width.sp, ), - url.contains("http") ? ClipOval( - child: Image.network( - url, - width: (width - 1).sp, - height: (width - 1).sp, - fit: BoxFit.cover, - ), - ) : Text(url,style: TextStyle(color: Color(0xffF756FF),fontSize: 12.sp),) + url.contains("http") + ? ClipOval( + child: Image.network( + url, + width: (width - 1).sp, + height: (width - 1).sp, + fit: BoxFit.cover, + ), + ) + : Text( + url, + style: TextStyle(color: Color(0xffF756FF), fontSize: 12.sp), + ) ], )); } - - void _showTextContentDialog(BuildContext context, String msg) { showDialog( context: context, 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 959c59c..c8a42da 100644 --- a/circle_app/lib/app/circle/widgets/info_list_view.dart +++ b/circle_app/lib/app/circle/widgets/info_list_view.dart @@ -1,4 +1,3 @@ - import 'dart:async'; import 'package:cached_network_image/cached_network_image.dart'; @@ -27,22 +26,23 @@ class InfoListView extends StatefulWidget { var logic; Circle bean; int index; + // Function updateBeanCall; - InfoListView(this.index, this.bean, this.logic,{super.key}); - - + InfoListView(this.index, this.bean, this.logic, {super.key}); @override State createState() => InfoListViewState(); } + typedef void MyListViewback(State result); -class InfoListViewState extends State with AutomaticKeepAliveClientMixin { + +class InfoListViewState extends State + with AutomaticKeepAliveClientMixin { @override bool get wantKeepAlive => true; final ScrollController scrollController = ScrollController(); - ListLogic? listsLg; int callOutPage = 1; @@ -52,30 +52,29 @@ class InfoListViewState extends State with AutomaticKeepAliveClien var circleId = ''; List lists = []; - @override void dispose() { // TODO: implement dispose - if(null!=callRefreshCicle){ + if (null != callRefreshCicle) { EventBusManager.cancelSubscription(callRefreshCicle!); } - if(null!=scroToTop){ + if (null != scroToTop) { EventBusManager.cancelSubscription(scroToTop!); - } scrollController.dispose(); super.dispose(); - - } - StreamSubscription? callRefreshCicle =null; - StreamSubscription? scroToTop =null; + StreamSubscription? callRefreshCicle = null; + StreamSubscription? scroToTop = null; @override void initState() { // TODO: implement initState super.initState(); + + + scrollController.addListener(() { try { if (scrollController.position.pixels == @@ -86,14 +85,13 @@ class InfoListViewState extends State with AutomaticKeepAliveClien }); circleId = widget.bean.id.toString(); loadCallOutListData(); - callRefreshCicle = EventBusManager.on().listen((event) { - if(widget.bean.id.toString() == event.circleId){ + callRefreshCicle = EventBusManager.on().listen((event) { + if (widget.bean.id.toString() == event.circleId) { loadCallOutListData(); } }); - - scroToTop = EventBusManager.on().listen((event) { + scroToTop = EventBusManager.on().listen((event) { scrollController.animateTo( 0.0, duration: Duration(milliseconds: 300), @@ -101,12 +99,9 @@ class InfoListViewState extends State with AutomaticKeepAliveClien ); }); - // widget.back(widget.createState()); + // widget.back(widget.createState()); } - - - loadCallOutListData() async { var data = await DioManager.instance.get( url: "/up-service/interest/$circleId/callouts", @@ -175,10 +170,6 @@ class InfoListViewState extends State with AutomaticKeepAliveClien } }); - - - - // if (bean.isQueen) { // showJoinCiclePiker(cicleId); // } else { @@ -191,9 +182,9 @@ class InfoListViewState extends State with AutomaticKeepAliveClien } void pushMsgPage(Lists bean, String cicleId) async { - - if (widget.bean.is_limit&&widget.bean.amount>0) { - showJoinCiclePiker(cicleId,widget.bean.amount.toString(),widget.bean.oldAmount.toString(),2,(payResult){ + if (widget.bean.is_limit && widget.bean.amount > 0) { + showJoinCiclePiker(cicleId, widget.bean.amount.toString(), + widget.bean.oldAmount.toString(), 2, (payResult) { widget.bean.is_limit = false; if (Get.isRegistered()) { var logic = Get.find(); @@ -206,7 +197,7 @@ class InfoListViewState extends State with AutomaticKeepAliveClien logic.update(); } Get.back(); - },widget.bean.ios_item); + }, widget.bean.ios_item); return; } @@ -217,44 +208,47 @@ class InfoListViewState extends State with AutomaticKeepAliveClien return; } // if () - var data = await DioManager.instance.get( - url: "/up-service/callout/${bean.id}/chat",); + url: "/up-service/callout/${bean.id}/chat", + ); if (data["code"] == 200) { - pushChatPage(data['data']['account_id'].toString().split("_").last,data['data']['account_id'], bean.user!.nickname!); - await Future.delayed(Duration(seconds: 1)); - SharedPreferences sharedPreferences =await SharedPreferences.getInstance(); - // SharedPreferencesHelper.getInstance().then((sharedPreferences) { - int userId = sharedPreferences.getInt(SharedPreferencesHelper.USERID)??0; - String avatar = sharedPreferences.getString(SharedPreferencesHelper.AVATAR)??""; - String name = sharedPreferences.getString(SharedPreferencesHelper.NAME)??""; - bean.chat!.users!.add(Users(avatar: avatar,id: userId,nickname: name)); - widget.logic.update(); + pushChatPage(data['data']['account_id'].toString().split("_").last, + data['data']['account_id'], bean.user!.nickname!); + // await Future.delayed(Duration(seconds: 1)); + SharedPreferences sharedPreferences = await SharedPreferences.getInstance(); + // SharedPreferencesHelper.getInstance().then((sharedPreferences) { + int userId = sharedPreferences.getInt(SharedPreferencesHelper.USERID) ?? 0; + String avatar = sharedPreferences.getString(SharedPreferencesHelper.AVATAR) ?? ""; + String name = sharedPreferences.getString(SharedPreferencesHelper.NAME) ?? ""; + bean.chat!.users!.add(Users(avatar: avatar, id: userId, nickname: name)); + // widget.logic.update(); // }); - } } @override Widget build(BuildContext context) { + super.build(context); List urlList = widget.bean.lastJoinUsers; List widgets = []; int i = 0; - // print(urlList); - if(null!=urlList){ + // print(urlList); + if (null != urlList) { urlList.forEach((element) { - if(widgets.length>2){ + if (widgets.length > 2) { return; } widgets.add(Positioned( left: 15.sp * i, - child: circleWidget(element.avatar??"https://qiniuyun.leyuan666.com/quanzi/avatar/default.png",element.id.toString()), + child: circleWidget( + element.avatar ?? + "https://qiniuyun.leyuan666.com/quanzi/avatar/default.png", + element.id.toString()), )); i++; }); } - return ClipRRect( borderRadius: BorderRadius.circular(10.sp), child: Container( @@ -282,12 +276,12 @@ class InfoListViewState extends State with AutomaticKeepAliveClien refreshCircleData(); }, child: - // lists.isEmpty - // ? !callOutMore - // ? noResultWidget() - // : loaddingWidget(true) - // : - ListView.builder( + // lists.isEmpty + // ? !callOutMore + // ? noResultWidget() + // : loaddingWidget(true) + // : + ListView.builder( physics: const AlwaysScrollableScrollPhysics(), scrollDirection: Axis.vertical, controller: scrollController, @@ -304,59 +298,76 @@ class InfoListViewState extends State with AutomaticKeepAliveClien image: AssetImage( getCircleImage('circle_desc')))), child: Container( - margin: EdgeInsets.only(top: 10.sp,bottom: 10.sp), + margin: EdgeInsets.only( + top: 10.sp, bottom: 10.sp), child: Column( children: [ Container( - margin: EdgeInsets.only(bottom: 7.sp), - width: Get.width, - // height: 50.sp, - child: HideText(text: widget.bean.intro,additionText: '查看更多',maxLines: 3,style: TextStyle(color: Colors.white, fontSize: 14.sp),additionStyle: TextStyle(color: const Color(0xFFFF4DF6), fontSize: 14.sp),onTap: () { - _showTextContentDialog( - context, widget.bean.intro,widget.bean.title); - }, - )), - + margin: + EdgeInsets.only(bottom: 7.sp), + width: Get.width, + // height: 50.sp, + child: HideText( + text: widget.bean.intro, + additionText: '查看更多', + maxLines: 3, + style: TextStyle( + color: Colors.white, + fontSize: 14.sp), + additionStyle: TextStyle( + color: + const Color(0xFFFF4DF6), + fontSize: 14.sp), + onTap: () { + _showTextContentDialog( + context, + widget.bean.intro, + widget.bean.title); + }, + )), GestureDetector( - behavior:HitTestBehavior.opaque, - onTap: (){ + behavior: HitTestBehavior.opaque, + onTap: () { // showToast("点个鸡毛,星哥还没做"); // Get.toNamed(AppRoutes.FriendsActivity,arguments: '3'); }, - child:urlList.length==0?Container(): Row( - children: [ - Row( - children: [ - SizedBox( - height: 30.sp, - width: 30.0.sp + - 15.sp * - (widgets.length - - 1.sp), - child: Stack( - children: widgets, - ), - ), - SizedBox( - width: 8.sp, - ), - Text( - '${convertToTenThousand(widget.bean.joinTotal)}圈友加入', - style: TextStyle( - color: Colors.white, - fontSize: 12.sp), - ), - SizedBox( - width: 8.sp, - ), - // Image.asset( - // getCircleImage('play'), - // width: 20.sp, - // ) - ], - ) - ], - ), + child: urlList.length == 0 + ? Container() + : Row( + children: [ + Row( + children: [ + SizedBox( + height: 30.sp, + width: 30.0.sp + + 15.sp * + (widgets.length - + 1.sp), + child: Stack( + children: widgets, + ), + ), + SizedBox( + width: 8.sp, + ), + Text( + '${convertToTenThousand(widget.bean.joinTotal)}圈友加入', + style: TextStyle( + color: + Colors.white, + fontSize: 12.sp), + ), + SizedBox( + width: 8.sp, + ), + // Image.asset( + // getCircleImage('play'), + // width: 20.sp, + // ) + ], + ) + ], + ), ), ], ), @@ -411,29 +422,27 @@ class InfoListViewState extends State with AutomaticKeepAliveClien padding: EdgeInsets.all(1.sp), child: ClipRRect( borderRadius: BorderRadius.circular(8.0), - child: Image.network( - widget.bean.image, - width: 40.sp, - height: 40.sp, - fit:BoxFit.cover - ), + child: Image.network(widget.bean.image, + width: 40.sp, + height: 40.sp, + fit: BoxFit.cover), ), ), Expanded( child: GestureDetector( - behavior: HitTestBehavior.opaque, - onTap: (){ - scrollController.animateTo( - 0.0, // Scroll to the top - duration: Duration(milliseconds: 300), - curve: Curves.easeInOut, - ); - }, - child: Container( - padding: EdgeInsets.only(left: 8.sp, top: 12.sp), - // alignment: Alignment., - height: 72.sp, - child: Column( + behavior: HitTestBehavior.opaque, + onTap: () { + scrollController.animateTo( + 0.0, // Scroll to the top + duration: Duration(milliseconds: 300), + curve: Curves.easeInOut, + ); + }, + child: Container( + padding: EdgeInsets.only(left: 8.sp, top: 12.sp), + // alignment: Alignment., + height: 72.sp, + child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( @@ -455,10 +464,11 @@ class InfoListViewState extends State with AutomaticKeepAliveClien ), ), ], + ), ), - ), - )), - GestureDetector(//加入圈子 + )), + GestureDetector( + //加入圈子 onTap: () async { if (widget.bean.isJoin) { _showOutCircleDialog( @@ -497,7 +507,7 @@ class InfoListViewState extends State with AutomaticKeepAliveClien ))); } - void _showTextContentDialog(BuildContext context, String msg,String title) { + void _showTextContentDialog(BuildContext context, String msg, String title) { showDialog( context: context, builder: (BuildContext context) { @@ -508,7 +518,6 @@ class InfoListViewState extends State with AutomaticKeepAliveClien padding: const EdgeInsets.all(1.0), child: Stack( children: [ - Container( decoration: BoxDecoration( shape: BoxShape.rectangle, @@ -536,33 +545,39 @@ class InfoListViewState extends State with AutomaticKeepAliveClien top: 15, left: 0, right: 0, - child: Center(child: Text(title, style: TextStyle( - color: const Color(0xFFF7FAFA), fontSize: 16.sp)),)), + child: Center( + child: Text(title, + style: TextStyle( + color: const Color(0xFFF7FAFA), fontSize: 16.sp)), + )), Container( - margin: EdgeInsets.only(top: 24.sp,bottom: 24.sp), + margin: EdgeInsets.only(top: 24.sp, bottom: 24.sp), child: Container( - margin: EdgeInsets.only( - top: 12.sp, left: 14.sp, right: 14.sp), + margin: + EdgeInsets.only(top: 12.sp, left: 14.sp, right: 14.sp), alignment: Alignment.center, - child: SingleChildScrollView(child: Text( - msg, - textAlign: TextAlign.center, - style: TextStyle( - color: const Color(0xCCF7FAFA), fontSize: 16.sp), - ),), + child: SingleChildScrollView( + child: Text( + msg, + textAlign: TextAlign.center, + style: TextStyle( + color: const Color(0xCCF7FAFA), fontSize: 16.sp), + ), + ), ), ), Positioned( - top:8.sp, + top: 8.sp, right: 10.sp, child: GestureDetector( onTap: () { Get.back(); }, child: Icon( - Icons.close,color: Colors.white, - size: 20.sp, - ), + Icons.close, + color: Colors.white, + size: 20.sp, + ), )), ], ), @@ -590,7 +605,8 @@ class InfoListViewState extends State with AutomaticKeepAliveClien onTap: () { // pushOtherPeopleHomePage(element.id.toString()); }, - child: circleWidget(element.avatar!,element.id.toString(), width: 24), + child: + circleWidget(element.avatar!, element.id.toString(), width: 24), ), )); index++; @@ -606,7 +622,6 @@ class InfoListViewState extends State with AutomaticKeepAliveClien double picHeight = 0.0; - if (lists.album != null) { if (lists.album!.isNotEmpty) { Album info = lists.album!.first; @@ -672,16 +687,22 @@ class InfoListViewState extends State with AutomaticKeepAliveClien // mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ GestureDetector( - onTap: ()async { - var sp = await SharedPreferencesHelper.getInstance(); + onTap: () async { + var sp = + await SharedPreferencesHelper.getInstance(); String myUserId = sp.getMyUserId(); - if(lists.user?.id!.toString() == myUserId){ + if (lists.user?.id!.toString() == myUserId) { Get.toNamed(AppRoutes.UserInfoActivity); return; } - if (widget.bean.is_limit&&widget.bean.amount>0) { - showJoinCiclePiker(widget.bean.id.toString(),widget.bean.amount.toString(),widget.bean.oldAmount.toString(),1,(payResult){ + 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(); @@ -694,28 +715,28 @@ class InfoListViewState extends State with AutomaticKeepAliveClien logic.update(); } Get.back(); - },widget.bean.ios_item); + }, widget.bean.ios_item); return; } pushHomePage(lists, lists.id.toString()); }, child: Stack( - alignment: Alignment.center, - children: [ - Image.asset( - getCircleImage('avatar_bg'), - width: 42.sp, - ), - ClipOval( - child: Image.network( - lists.user!.avatar_thumb!, - width: 40.sp, - height: 40.sp, - fit: BoxFit.cover, - ), - ) - ], - )), + alignment: Alignment.center, + children: [ + Image.asset( + getCircleImage('avatar_bg'), + width: 42.sp, + ), + ClipOval( + child: Image.network( + lists.user!.avatar_thumb!, + width: 40.sp, + height: 40.sp, + fit: BoxFit.cover, + ), + ) + ], + )), Expanded( child: Container( padding: EdgeInsets.only(left: 8.sp, top: 12.sp), @@ -738,7 +759,9 @@ class InfoListViewState extends State with AutomaticKeepAliveClien lists.user?.vip != null && lists.user!.vip == 0 ? Container() : Image.asset( - getCircleImage(lists.user!.vip == 1 ? 'vip' : 'year_vip'), + getCircleImage(lists.user!.vip == 1 + ? 'vip' + : 'year_vip'), width: 36.sp, ) ], @@ -763,9 +786,12 @@ class InfoListViewState extends State with AutomaticKeepAliveClien Color(0xffB5D3FF) ])), child: Text( - getAgeCOntent(lists.user!.gender??0, lists.user!.age??0, - lists.user!.role??0, lists.user!.orientation??0), - // '${genderList[lists.user!.gender!]}.${lists.user!.age}.${roleList[lists.user!.role!]}.${orientationList[lists.user!.orientation!]}', + getAgeCOntent( + lists.user!.gender ?? 0, + lists.user!.age ?? 0, + lists.user!.role ?? 0, + lists.user!.orientation ?? 0), + // '${genderList[lists.user!.gender!]}.${lists.user!.age}.${roleList[lists.user!.role!]}.${orientationList[lists.user!.orientation!]}', style: TextStyle( color: Colors.black, fontSize: 12.sp, @@ -873,7 +899,10 @@ class InfoListViewState extends State with AutomaticKeepAliveClien )), GestureDetector( onTap: () { - pushMsgPage(lists, widget.bean.id.toString(),); + pushMsgPage( + lists, + widget.bean.id.toString(), + ); // pushHomePage( // lists, widget.bean.id.toString()); }, @@ -922,9 +951,9 @@ class InfoListViewState extends State with AutomaticKeepAliveClien widgets.add(Positioned( left: 12.sp * index, child: GestureDetector( - onTap: () { - }, - child: circleWidget(element.avatar!,element.id.toString(), width: 24), + onTap: () {}, + child: + circleWidget(element.avatar!, element.id.toString(), width: 24), ), )); index++; @@ -979,15 +1008,21 @@ class InfoListViewState extends State with AutomaticKeepAliveClien // mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ GestureDetector( - onTap: ()async { - var sp = await SharedPreferencesHelper.getInstance(); + onTap: () async { + var sp = + await SharedPreferencesHelper.getInstance(); String myUserId = sp.getMyUserId(); - if(lists.user?.id!.toString() == myUserId){ + if (lists.user?.id!.toString() == myUserId) { Get.toNamed(AppRoutes.UserInfoActivity); return; } - if (widget.bean.is_limit&&widget.bean.amount > 0) { - showJoinCiclePiker(widget.bean.id.toString(),widget.bean.amount.toString(),widget.bean.oldAmount.toString(),1,(payResult){ + 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(); @@ -1000,28 +1035,28 @@ class InfoListViewState extends State with AutomaticKeepAliveClien logic.update(); } Get.back(); - },widget.bean.ios_item); + }, widget.bean.ios_item); return; } pushHomePage(lists, lists.id.toString()); }, child: Stack( - alignment: Alignment.center, - children: [ - Image.asset( - getCircleImage('avatar_bg'), - width: 42.sp, - ), - ClipOval( - child: Image.network( - lists.user!.avatar!, - width: 40.sp, - height: 40.sp, - fit: BoxFit.cover, - ), - ) - ], - )), + alignment: Alignment.center, + children: [ + Image.asset( + getCircleImage('avatar_bg'), + width: 42.sp, + ), + ClipOval( + child: Image.network( + lists.user!.avatar!, + width: 40.sp, + height: 40.sp, + fit: BoxFit.cover, + ), + ) + ], + )), Expanded( child: Container( padding: EdgeInsets.only(left: 8.sp, top: 12.sp), @@ -1041,10 +1076,13 @@ class InfoListViewState extends State with AutomaticKeepAliveClien SizedBox( width: 8.sp, ), - lists.user?.vip != null && lists.user!.vip == 0 + lists.user?.vip != null && + lists.user!.vip == 0 ? Container() : Image.asset( - getCircleImage(lists.user!.vip == 1 ? 'vip' : 'year_vip'), + getCircleImage(lists.user!.vip == 1 + ? 'vip' + : 'year_vip'), width: 36.sp, ) ], @@ -1070,8 +1108,11 @@ class InfoListViewState extends State with AutomaticKeepAliveClien Color(0xffB5D3FF) ])), child: Text( - getAgeCOntent(lists.user!.gender??0, lists.user!.age??0, - lists.user!.role??0, lists.user!.orientation??0), + getAgeCOntent( + lists.user!.gender ?? 0, + lists.user!.age ?? 0, + lists.user!.role ?? 0, + lists.user!.orientation ?? 0), style: TextStyle( color: Colors.black, fontSize: 12.sp, @@ -1188,9 +1229,8 @@ class InfoListViewState extends State with AutomaticKeepAliveClien color: Colors.white, fontSize: 12.sp), )), GestureDetector( - onTap: () async{ + onTap: () async { pushMsgPage(lists, widget.bean.id.toString()); - }, child: Image.asset( getCircleImage('chat'), @@ -1206,32 +1246,32 @@ class InfoListViewState extends State with AutomaticKeepAliveClien )); } - circleWidget(String url, String userId,{double width = 30}) { + circleWidget(String url, String userId, {double width = 30}) { return GestureDetector( - onTap: (){ - Get.toNamed(AppRoutes.UserInfoActivity, arguments: userId); - }, + onTap: () { + Get.toNamed(AppRoutes.UserInfoActivity, arguments: userId); + }, child: Stack( - alignment: Alignment.center, - children: [ - Image.asset( - getCircleImage('avatar_bg'), - width: width.sp, - ), - ClipOval( - child: Image.network( - url??"https://qiniuyun.leyuan666.com/quanzi/avatar/default.png", - width: (width - 1).sp, - height: (width - 1).sp, - fit: BoxFit.cover, - ), - ) - ], - )); + alignment: Alignment.center, + children: [ + Image.asset( + getCircleImage('avatar_bg'), + width: width.sp, + ), + ClipOval( + child: Image.network( + url ?? + "https://qiniuyun.leyuan666.com/quanzi/avatar/default.png", + width: (width - 1).sp, + height: (width - 1).sp, + fit: BoxFit.cover, + ), + ) + ], + )); } - void _showOutCircleDialog( - BuildContext context, var controller, Circle bean) { + void _showOutCircleDialog(BuildContext context, var controller, Circle bean) { showDialog( context: context, builder: (BuildContext context) { @@ -1384,13 +1424,10 @@ class InfoListViewState extends State with AutomaticKeepAliveClien if (data['code'] == 200) { widget.bean = Circle.fromJson(data['data']); widget.logic.updateCircleInfo(widget.bean); - setState(() { - - }); + setState(() {}); // final logic = Get.put(CircleLogic()); // logic.update(); - - }else if(data['code'] == 404){ + } else if (data['code'] == 404) { var logic = Get.put(CircleLogic()); logic.circle.lists.removeAt(logic.state.index); logic.update(); diff --git a/circle_app/lib/app/dialog/UpdateDialog.dart b/circle_app/lib/app/dialog/UpdateDialog.dart index 7e0e503..bf7555b 100644 --- a/circle_app/lib/app/dialog/UpdateDialog.dart +++ b/circle_app/lib/app/dialog/UpdateDialog.dart @@ -2,7 +2,7 @@ import 'dart:io'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -// import 'package:flutter_install_app/flutter_install_app.dart'; + import 'package:flutter_install_app/flutter_install_app.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:url_launcher/url_launcher.dart'; @@ -218,7 +218,7 @@ class _CustomDialogState extends State { // SmartDialog.dismiss(); print(error); }); - // await AppInstaller.installApk(filePath, actionRequired: false); + await AppInstaller.installApk(filePath, actionRequired: false); } } diff --git a/circle_app/lib/app/dialog/YesAgreementDialog.dart b/circle_app/lib/app/dialog/YesAgreementDialog.dart index 60cebe8..e4005aa 100644 --- a/circle_app/lib/app/dialog/YesAgreementDialog.dart +++ b/circle_app/lib/app/dialog/YesAgreementDialog.dart @@ -78,7 +78,7 @@ class _CustomDialogState extends State { margin: EdgeInsets.only(left: 10.sp, right: 10.sp), child: RichText( text: TextSpan( - text: "感谢您信任并使用跨友APP,在你使用跨友的服务之前,请认真阅读", + text: "感谢您信任并使用微乐园APP,在你使用微乐园的服务之前,请认真阅读", style: TextStyle( color: Colors.white, fontSize: 14.sp, @@ -112,7 +112,7 @@ class _CustomDialogState extends State { ), TextSpan( text: - "的全部内容,以了解用户权力义务和个人信息处理规则。跨友仅会将您的信息用于提供服务和改善体验,我们将权力保障您的信息安全,请同意后使用,若您不同意本隐私政策,很遗憾,我们将无法为您提供完整的产品和服务。", + "的全部内容,以了解用户权力义务和个人信息处理规则。微乐园仅会将您的信息用于提供服务和改善体验,我们将权力保障您的信息安全,请同意后使用,若您不同意本隐私政策,很遗憾,我们将无法为您提供完整的产品和服务。", style: TextStyle( color: Colors.white, fontSize: 14.sp, diff --git a/circle_app/lib/app/home/logic.dart b/circle_app/lib/app/home/logic.dart index 06bace7..1da61b9 100644 --- a/circle_app/lib/app/home/logic.dart +++ b/circle_app/lib/app/home/logic.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'dart:io'; -import 'dart:ffi'; import 'package:circle_app/app/circle/logic.dart'; import 'package:circle_app/app/minefragment/logic.dart'; 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 44c646c..978fb0c 100644 --- a/circle_app/lib/app/msg/TIMUIKitConversation/tim_uikit_conversation.dart +++ b/circle_app/lib/app/msg/TIMUIKitConversation/tim_uikit_conversation.dart @@ -22,6 +22,7 @@ import 'package:tencent_cloud_chat_uikit/ui/widgets/customize_ball_pulse_header. import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_base.dart'; import 'package:tencent_cloud_chat_uikit/ui/widgets/wide_popup.dart'; +import '../../../util/eventBus.dart'; import 'tim_uikit_conversation_item.dart'; typedef TIMConversationItemBuilder = Widget Function( @@ -190,9 +191,11 @@ class _TIMConversationState extends TIMUIKitState { model.setSelectedConversation(conversation); } - _clearHistory(V2TimConversation conversationItem) { - _timuiKitConversationController.clearHistoryMessage( + _clearHistory(V2TimConversation conversationItem) async{ + await _timuiKitConversationController.clearHistoryMessage( conversation: conversationItem); + await Future.delayed(Duration(seconds: 1)); + EventBusManager.fire(RefreshUnread()); } _pinConversation(V2TimConversation conversation) { @@ -201,9 +204,11 @@ class _TIMConversationState extends TIMUIKitState { isPinned: !conversation.isPinned!); } - _deleteConversation(V2TimConversation conversation) { - _timuiKitConversationController.deleteConversation( + _deleteConversation(V2TimConversation conversation) async{ + await _timuiKitConversationController.deleteConversation( conversationID: conversation.conversationID); + await Future.delayed(Duration(seconds: 1)); + EventBusManager.fire(RefreshUnread()); } List getFilteredConversation() { diff --git a/circle_app/lib/app/splash/logic.dart b/circle_app/lib/app/splash/logic.dart index b85781f..3a5e162 100644 --- a/circle_app/lib/app/splash/logic.dart +++ b/circle_app/lib/app/splash/logic.dart @@ -8,6 +8,7 @@ import 'package:get/get.dart'; import '../../router/app_routers.dart'; import '../../util/SharedPreferencesHelper.dart'; import '../dialog/YesAgreementDialog.dart'; +import '../select_circle/logic.dart'; import 'state.dart'; import '../../network/api.dart'; @@ -23,28 +24,44 @@ class SplashLogic extends GetxController { void onReady() async { // TODO: implement onReady super.onReady(); - - } @override void onInit() async { super.onInit(); - // await Future.delayed(Duration(seconds: 30)); + // await Future.delayed(Duration(seconds: 30)); + + var data1 = + await DioManager.instance.get(url: Api.getCircleList, params: {}); + var bean1 = BaseResponse.fromJson( + data1, (data1) => ConfigBean.fromJson(data1)); + if (bean1.code == 200) { + configBean = bean1.data!; + + configBean.genderMap.forEach((key, value) { + genderList.add(value); + }); + + configBean.orientationMap.forEach((key, value) { + orientationList.add(value); + }); + configBean.roleMap.forEach((key, value) { + roleList.add(value); + }); + } + + if ((await getAuthorization()).isEmpty) { - if(Platform.isIOS){ + if (Platform.isIOS) { pushLoginPage(); return; } bool isAgreemement = await getAgreemement(); - if(!isAgreemement){ + if (!isAgreemement) { showReportDialog(); - }else{ + } else { pushLoginPage(); } - - - } else { var data = await DioManager.instance.put(url: Api.refreshToken, params: {}); @@ -65,7 +82,8 @@ class SplashLogic extends GetxController { }); return; - } else if(bean.code == 5000||bean.code == 5001||bean.code == 5002||bean.code == 5003){ + } else if (bean.code == 5000 || bean.code == 5001 || bean.code == 5002 || + bean.code == 5003) { pushLoginPage(); return; } @@ -73,7 +91,7 @@ class SplashLogic extends GetxController { if (bean.code == 500) { await Future.delayed(Duration(seconds: 5)); onInit(); - }else { + } else { pushLoginPage(); } diff --git a/circle_app/lib/app/userinfo/view.dart b/circle_app/lib/app/userinfo/view.dart index 18d1ef6..0ac4ebc 100644 --- a/circle_app/lib/app/userinfo/view.dart +++ b/circle_app/lib/app/userinfo/view.dart @@ -9,6 +9,7 @@ import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; import '../../components/my_app_bar.dart'; import '../../router/app_routers.dart'; import '../../util/util.dart'; +import '../select_circle/logic.dart'; import 'logic.dart'; class UserinfoPage extends StatefulWidget { @@ -413,6 +414,11 @@ class MyTabbedScreenState extends State ), logic.isBlack||logic.isDestroy||logic.isBlackBeen?Container(): GestureDetector( onTap: () { + if(!logic.isShowAlbum){ + List numbers = []; + var data = Get.toNamed(AppRoutes.Call_out, arguments: {'numbers': numbers}); + return ; + } if (controller.isMe) { controller.isEdit = !controller.isEdit; controller.update(); @@ -421,7 +427,7 @@ class MyTabbedScreenState extends State } }, child: Visibility( - visible: logic.isShowAlbum, + // visible: logic.isShowAlbum, child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(17), @@ -439,13 +445,14 @@ class MyTabbedScreenState extends State horizontal: 12.sp, ), child: Text( + logic.isShowAlbum? controller.isMe ? controller.isEdit ? "完成" : "管理" : controller.isUrgeStatus ? "已催更" - : "催更", + : "催更":"发布喊话", style: const TextStyle( color: Colors.white, fontSize: 12, @@ -477,7 +484,7 @@ class MyTabbedScreenState extends State style: const TextStyle(color: Colors.white30), ), ), - controller.state.imaglist.isEmpty && !controller.isEdit + controller.state.imaglist.isEmpty && !controller.isMe ? Center( child: Column( mainAxisAlignment: MainAxisAlignment.start, @@ -510,19 +517,21 @@ class MyTabbedScreenState extends State crossAxisCount: 3, ), itemCount: controller.isMe - ? controller.isEdit - ? controller.state.imaglist.length < 15 - ? controller.state.imaglist.length + 1 - : controller.state.imaglist.length - : controller.state.imaglist.length - : controller.state.imaglist.length, + // ? controller.isEdit + // ? controller.state.imaglist.length < 15 + // ? controller.state.imaglist.length + ? controller.state.imaglist.length+1 + : controller.state.imaglist.length , itemBuilder: (BuildContext context, int index) { - if (controller.isMe && - controller.isEdit && - controller.state.imaglist.length < 15) { + print("123123123123"); + if (controller.isMe ) { if (index == 0) { return GestureDetector( onTap: () { + if(controller.state.imaglist.length >= 15){ + showOKToast("最大只可上传15张图片哦~"); + return ; + } controller.getImageFile(); }, child: Container( diff --git a/circle_app/lib/network/dio_manager.dart b/circle_app/lib/network/dio_manager.dart index 22686a8..f07a137 100644 --- a/circle_app/lib/network/dio_manager.dart +++ b/circle_app/lib/network/dio_manager.dart @@ -255,7 +255,7 @@ class DioManager { // String? errorMsg = isNetworkConnected // ? e.requestOptions.extra["errorMsg"] // : "网络连接断开,请检查网络设置"; - return {'code': 500, 'msg': '加载中'}; + return {'code': 500, 'msg': '加载中${e.message}'}; } catch (e) { // 其他一些意外的报错 return {'code': 500, 'msg': '加载中...'}; diff --git a/circle_app/lib/util/util.dart b/circle_app/lib/util/util.dart index 3db5075..93d6920 100644 --- a/circle_app/lib/util/util.dart +++ b/circle_app/lib/util/util.dart @@ -12,6 +12,7 @@ import 'package:oktoast/oktoast.dart'; import 'package:path_provider/path_provider.dart'; import 'package:video_compress/video_compress.dart'; +import '../app/select_circle/logic.dart'; import 'SharedPreferencesHelper.dart'; class Util {} @@ -177,60 +178,81 @@ String getAgeCOntent(int gender, int age, int role, int orientation) { return "${getGenderContent(gender)}·${age}·${getRoleContent(role)}·${getOrientationContent(orientation)}"; } +late ConfigBean configBean; +List numbers = []; + +List genderList = []; + +List orientationList = []; + +List roleList = []; + String getGenderContent(int number) { - switch (number) { - case 1: - return "男"; - case 2: - return "女"; - case 3: - return "MTF"; - case 4: - return "FTM"; - case 5: - return "CD"; - case 6: - return "酷儿"; - default: - return ""; + if(genderList.length!=0){ + return genderList[number-1]; + }else { + switch (number) { + case 1: + return "男"; + case 2: + return "女"; + case 3: + return "MTF"; + case 4: + return "FTM"; + case 5: + return "CD"; + case 6: + return "酷儿"; + default: + return ""; + } } } String getOrientationContent(int number) { - switch (number) { - case 1: - return "异性恋"; - case 2: - return "同性恋"; - case 3: - return "双性恋"; - case 4: - return "泛性恋"; - case 5: - return "无性恋"; - case 6: - return "智性恋"; - case 7: - return "性单恋"; - default: - return ""; + if(orientationList.length!=0){ + return orientationList[number-1]; + }else { + switch (number) { + case 1: + return "异性恋"; + case 2: + return "同性恋"; + case 3: + return "双性恋"; + case 4: + return "泛性恋"; + case 5: + return "无性恋"; + case 6: + return "智性恋"; + case 7: + return "性单恋"; + default: + return ""; + } } } String getRoleContent(int number) { - switch (number) { - case 1: - return "Sado"; - case 2: - return "Maso"; - case 3: - return "Dom"; - case 4: - return "Sub"; - case 5: - return "Switch"; - default: - return ""; + if(roleList.length!=0){ + return roleList[number-1]; + }else { + switch (number) { + case 1: + return "Sado"; + case 2: + return "Maso"; + case 3: + return "Dom"; + case 4: + return "Sub"; + case 5: + return "Switch"; + default: + return ""; + } } }