diff --git a/circle_app/android/app/build.gradle b/circle_app/android/app/build.gradle index d077b20..e2c84c7 100644 --- a/circle_app/android/app/build.gradle +++ b/circle_app/android/app/build.gradle @@ -66,10 +66,10 @@ android { targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName - ndk { - abiFilters 'armeabi-v7a', 'arm64-v8a' - ldLibs "log" - } +// ndk { +// abiFilters 'armeabi-v7a', 'arm64-v8a' +// ldLibs "log" +// } } buildTypes { diff --git a/circle_app/android/app/src/main/res/drawable-v21/launch_background.xml b/circle_app/android/app/src/main/res/drawable-v21/launch_background.xml index b737d51..38f27aa 100644 --- a/circle_app/android/app/src/main/res/drawable-v21/launch_background.xml +++ b/circle_app/android/app/src/main/res/drawable-v21/launch_background.xml @@ -5,27 +5,27 @@ android:src="@mipmap/launch_back" /> - - - - - - - - - + + + - - - - - - - - - + + + @@ -40,15 +40,14 @@ - - - - - - - + --> - + android:gravity="bottom|center_horizontal" + > + + diff --git a/circle_app/android/app/src/main/res/mipmap-xxhdpi/icon_btn.png b/circle_app/android/app/src/main/res/mipmap-xxhdpi/icon_btn.png new file mode 100644 index 0000000..1c52a83 Binary files /dev/null and b/circle_app/android/app/src/main/res/mipmap-xxhdpi/icon_btn.png differ diff --git a/circle_app/android/app/src/main/res/mipmap-xxhdpi/icon_top.png b/circle_app/android/app/src/main/res/mipmap-xxhdpi/icon_top.png new file mode 100644 index 0000000..c113758 Binary files /dev/null and b/circle_app/android/app/src/main/res/mipmap-xxhdpi/icon_top.png differ diff --git a/circle_app/android/app/src/main/res/mipmap-xxhdpi/launch_back.webp b/circle_app/android/app/src/main/res/mipmap-xxhdpi/launch_back.webp index 74b9021..60810aa 100644 Binary files a/circle_app/android/app/src/main/res/mipmap-xxhdpi/launch_back.webp and b/circle_app/android/app/src/main/res/mipmap-xxhdpi/launch_back.webp differ diff --git a/circle_app/android/app/src/main/res/mipmap-xxhdpi/logo.png b/circle_app/android/app/src/main/res/mipmap-xxhdpi/logo.png index 6dd4bba..a5abf1d 100644 Binary files a/circle_app/android/app/src/main/res/mipmap-xxhdpi/logo.png and b/circle_app/android/app/src/main/res/mipmap-xxhdpi/logo.png differ diff --git a/circle_app/lib/app/call_out/view.dart b/circle_app/lib/app/call_out/view.dart index 57ce01a..80713a1 100644 --- a/circle_app/lib/app/call_out/view.dart +++ b/circle_app/lib/app/call_out/view.dart @@ -706,7 +706,7 @@ class Call_outPage extends StatelessWidget { // width: 339.sp, // padding: EdgeInsets.only(left: 17.sp, right: 17.sp), // child: Text( - // '为打造纯净的社交环境,更好地服务大家,基于以下几方面考虑:1、平台升级为全天24小时人工审核,保证用户真实,避免骗子、酒托、虚假人士等扰乱平台 ;2、杜绝未入圈用户随意骚扰或影响已入圈的跨友;3、谢绝只会白嫖的猎奇人士。', + // '为打造纯净的社交环境,更好地服务大家,基于以下几方面考虑:1、平台升级为全天24小时人工审核,保证用户真实,避免骗子、酒托、虚假人士等扰乱平台 ;2、杜绝未入圈用户随意骚扰或影响已入圈的;3、谢绝只会白嫖的猎奇人士。', // style: TextStyle( // color: Color.fromRGBO(247, 250, 250, 0.8), // fontSize: 12.sp)), diff --git a/circle_app/lib/app/chat/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field.dart b/circle_app/lib/app/chat/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field.dart index f04f63f..c0d3c45 100644 --- a/circle_app/lib/app/chat/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field.dart +++ b/circle_app/lib/app/chat/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field.dart @@ -8,6 +8,7 @@ import 'package:circle_app/network/dio_manager.dart'; import 'package:circle_app/util/util.dart'; import 'package:diff_match_patch/diff_match_patch.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_setting_model.dart'; +import 'package:tencent_cloud_chat_uikit/data_services/friendShip/friendship_services.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/screen_utils.dart'; import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart'; import 'package:flutter/material.dart'; @@ -27,6 +28,8 @@ import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKitTextField import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_base.dart'; import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/wide.dart'; +import '../../../../util/eventBus.dart'; + enum MuteStatus { none, me, all } GlobalKey<_InputTextFieldState> myInputTextFieldState = GlobalKey(); @@ -257,8 +260,15 @@ class _InputTextFieldState extends TIMUIKitState { return userList; } - +bool isSendLoging = false; onSubmitted() async { + if(isSendLoging){ + return; + } + if (isBlack) { + showToast("您已将对方拉黑,请移除黑名单后在发送消息~"); + return; + } lastText = ""; String text = textEditingController.text.trim(); final convType = widget.conversationType; @@ -302,6 +312,7 @@ class _InputTextFieldState extends TIMUIKitState { } if (text.isNotEmpty && text != zeroWidthSpace) { + if (widget.model.repliedMessage != null) { MessageUtils.handleMessageError( widget.model.sendReplyMessage( @@ -317,14 +328,14 @@ class _InputTextFieldState extends TIMUIKitState { convID: widget.conversationID, atUserList: getUserIdFromMemberInfoMap()); } else { - var data = - await DioManager.instance.post( - url: Api.shieldWordCheck, params: {'text': text, 'type': 2}); - + isSendLoging = true; + var data = await DioManager.instance + .post(url: Api.shieldWordCheck, params: {'text': text, 'type': 2}); + isSendLoging = false; if (data['data']['code'] == 10000) { List words = data['data']['words']; if (words.isNotEmpty) { - for(int i = 0; i < words.length; i++) { + for (int i = 0; i < words.length; i++) { text = text.replaceAll(words[i], '*'); } } @@ -625,6 +636,7 @@ class _InputTextFieldState extends TIMUIKitState { @override void initState() { super.initState(); + checkHintText(); if (PlatformUtils().isWeb || PlatformUtils().isDesktop) { focusNode = FocusNode( @@ -713,7 +725,40 @@ class _InputTextFieldState extends TIMUIKitState { (appLocale == AppLocale.zhHans || appLocale == AppLocale.zhHant) ? 'zh' : 'en'; + if(null==commentBlackEvent){ + commentBlackEvent = EventBusManager.on().listen((event) { + if(event.userId == widget.currentConversation.userID!){ + isBlack = event.isBlack; + } + }); + getBlack(); + } + + + } + StreamSubscription? commentBlackEvent =null; + bool isBlack = false; + + getBlack() async { + final FriendshipServices _friendshipServices = + serviceLocator(); + List? blacklist = await _friendshipServices.getBlackList(); + if (blacklist != null) { + isBlack = false; + blacklist.forEach((element) { + print(element.userProfile!.nickName.toString()); + if (element.userID == widget.currentConversation.userID!) { + isBlack = true; + } + }); + await Future.delayed(Duration(milliseconds: 500)); + EventBusManager.fire(CommentBlackMoreEvent()); + } + } + + + @override void didUpdateWidget(TIMInputTextField oldWidget) { @@ -726,6 +771,7 @@ class _InputTextFieldState extends TIMUIKitState { textEditingController.clear(); } } + } @override @@ -733,6 +779,12 @@ class _InputTextFieldState extends TIMUIKitState { // handleSetDraftText(); widget.model.removeListener(onModelChanged); focusNode.dispose(); + if(null!=commentBlackEvent){ + print("TIMInputTextField解绑"); + EventBusManager.cancelSubscription(commentBlackEvent!); + } + + super.dispose(); } @@ -840,6 +892,7 @@ class _InputTextFieldState extends TIMUIKitState { addStickerToText: addStickerToText, customStickerPanel: widget.customStickerPanel, forbiddenText: forbiddenText, + onChanged: (text) async { if (widget.onChanged != null) { widget.onChanged!(text); @@ -849,6 +902,7 @@ class _InputTextFieldState extends TIMUIKitState { }, backgroundColor: widget.backgroundColor, morePanelConfig: widget.morePanelConfig, + userId: widget.currentConversation.userID!, repliedMessage: value, currentCursor: currentCursor, hintText: hintText, @@ -915,17 +969,12 @@ class _InputTextFieldState extends TIMUIKitState { resetHiText(String text) async { if (!hintText!.contains('说些什么吧~') && text.isNotEmpty) { - if ((widget.currentConversation.lastMessage - ?.customElem ?? - null) != + if ((widget.currentConversation.lastMessage?.customElem ?? null) != null) { - if (widget.currentConversation.lastMessage - ?.customElem!.extension == + if (widget.currentConversation.lastMessage?.customElem!.extension == 'cardData') { hintText = '说些什么吧~'; - setState(() { - - }); + setState(() {}); } } else { var result = await TencentImSDKPlugin.v2TIMManager @@ -936,16 +985,13 @@ class _InputTextFieldState extends TIMUIKitState { lastMsgID: null, ); - if (result.code == 0 && - (result.data?.isNotEmpty ?? false)) { + if (result.code == 0 && (result.data?.isNotEmpty ?? false)) { V2TimMessage msg = result.data!.last!; if (msg.customElem != null) { if (msg.customElem!.extension == 'cardData') { hintText = '说些什么吧~'; - setState(() { - - }); + setState(() {}); } } } @@ -962,9 +1008,7 @@ class _InputTextFieldState extends TIMUIKitState { Map info = jsonDecode( widget.currentConversation.lastMessage!.customElem!.data!); hintText = info['guide_text']; - setState(() { - - }); + setState(() {}); } } else if (widget.currentConversation.lastMessage == null) { getConverstationLastInfo(); 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 d72c12d..9283e2c 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 @@ -14,6 +14,7 @@ import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_chat_global_model.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_setting_model.dart'; +import 'package:tencent_cloud_chat_uikit/data_services/friendShip/friendship_services.dart'; import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/message.dart'; @@ -26,6 +27,8 @@ import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKitTextField import 'package:tencent_extended_text_field/extended_text_field.dart'; import 'package:tencent_keyboard_visibility/tencent_keyboard_visibility.dart'; +import '../../../../../util/eventBus.dart'; + GlobalKey<_TIMTextFieldLayoutNarrowState> TIMnarrowTextFieldKey = GlobalKey(); class TIMTextFieldLayoutNarrow extends StatefulWidget { @@ -72,6 +75,8 @@ class TIMTextFieldLayoutNarrow extends StatefulWidget { /// hint text for textField widget final String? hintText; + final String? userId; + final int? currentCursor; final ValueChanged setCurrentCursor; @@ -130,6 +135,7 @@ class TIMTextFieldLayoutNarrow extends StatefulWidget { required this.showSendEmoji, required this.showMorePanel, this.hintText, + this.userId, required this.customEmojiStickerList, this.controller}) : super(key: key); @@ -163,7 +169,45 @@ class _TIMTextFieldLayoutNarrowState } }); } + if(null==commentBlackEvent){ + commentBlackEvent = EventBusManager.on().listen((event) { + if(event.userId == widget.userId){ + isBlack = event.isBlack; + } + }); + } + + getBlack(); } + StreamSubscription? commentBlackEvent =null; + @override + void dispose() { + print("TIMTextFieldLayoutNarrow解绑"); + if(null!=commentBlackEvent){ + EventBusManager.cancelSubscription(commentBlackEvent!); + } + + + super.dispose(); + } + + bool isBlack = false; + + getBlack() async { + final FriendshipServices _friendshipServices = + serviceLocator(); + List? blacklist = await _friendshipServices.getBlackList(); + if (blacklist != null) { + isBlack = false; + blacklist.forEach((element) { + print(element.userProfile!.nickName.toString()); + if (element.userID == widget.userId) { + isBlack = true; + } + }); + } + } + void setSendButton() { final value = widget.textEditingController.text; @@ -362,7 +406,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) { @@ -596,7 +640,7 @@ class _TIMTextFieldLayoutNarrowState width: 10, ), InkWell( - onTap: () { + onTap: () async { widget.onSubmitted(); if (showKeyboard) { widget.focusNode.requestFocus(); @@ -624,6 +668,10 @@ class _TIMTextFieldLayoutNarrowState children: [ GestureDetector( onTap: () async { + if (isBlack) { + showToast("您已将对方拉黑,请移除黑名单后在发送消息~"); + return; + } showKeyboard = showSendSoundText; if (showSendSoundText) { widget.focusNode.requestFocus(); @@ -659,6 +707,10 @@ class _TIMTextFieldLayoutNarrowState ), GestureDetector( onTap: () { + if (isBlack) { + showToast("您已将对方拉黑,请移除黑名单后在发送消息~"); + return; + } getImageFile(); }, child: @@ -666,6 +718,10 @@ class _TIMTextFieldLayoutNarrowState ), GestureDetector( onTap: () { + if (isBlack) { + showToast("您已将对方拉黑,请移除黑名单后在发送消息~"); + return; + } getTakeImageFile(); }, child: Image.asset(getMsgImage('take_photo'), diff --git a/circle_app/lib/app/chat/view.dart b/circle_app/lib/app/chat/view.dart index d535643..db7e7c7 100644 --- a/circle_app/lib/app/chat/view.dart +++ b/circle_app/lib/app/chat/view.dart @@ -36,6 +36,7 @@ class _ChatPageState extends State { initEventBus(); } + initEventBus()async{ EventBusManager.on().listen((event) async{ V2TimValueCallback? sendMessageRes = @@ -98,8 +99,11 @@ class _ChatPageState extends State { return TIMChat( conversation: Get.arguments, customStickerPanel: renderCustomStickerPanel, - onTapAvatar :(String userId,TapDownDetails tapDownDetails){ - Get.toNamed(AppRoutes.UserInfoActivity,arguments: userId.toString().split('_').last); + onTapAvatar :(String userId,TapDownDetails tapDownDetails)async{ + var data = await Get.toNamed(AppRoutes.UserInfoActivity,arguments: userId.toString().split('_').last); + // setState(() { + // + // }); }, controller : _timuiKitChatController, config: const TIMUIKitChatConfig( @@ -122,8 +126,9 @@ class _ChatPageState extends State { customAppBar:MyAppBar( centerTitle: con.showName!, actionWdiget: GestureDetector( - onTap: () { - Get.toNamed(AppRoutes.UserInfoActivity,arguments: con.userID.toString().split('_').last); + onTap: () async{ + var data = await Get.toNamed(AppRoutes.UserInfoActivity,arguments: con.userID.toString().split('_').last); + }, child: Text('TA的主页',style: TextStyle(color: const Color(0xFF00FFF4),fontSize:12.sp,fontWeight: FontWeight.w500),), ), @@ -131,7 +136,7 @@ class _ChatPageState extends State { ), userAvatarBuilder: (BuildContext context, V2TimMessage message) { - return avatarWidget((message.faceUrl?.isNotEmpty ?? false) ? message.faceUrl! : 'http://qiniuyun.ikuayou.com/avatar/default/default_header.png'); + return avatarWidget((message.faceUrl?.isNotEmpty ?? false) ? message.faceUrl! : 'https://qiniuyun.leyuan666.com/quanzi/avatar/default.png'); }, ); diff --git a/circle_app/lib/app/circle/view.dart b/circle_app/lib/app/circle/view.dart index 42ef597..d2df4bf 100644 --- a/circle_app/lib/app/circle/view.dart +++ b/circle_app/lib/app/circle/view.dart @@ -148,7 +148,7 @@ class _CirclePageState extends State onTap: () { Get.toNamed(AppRoutes.VisitorListActivity); }, - child: Container( + child: SizedBox( width: 30.sp * widgets.length, height: 44.sp, child: Stack( @@ -207,7 +207,7 @@ class _CirclePageState extends State url, width: (width - 1).sp, height: (width - 1).sp, - fit: BoxFit.fill, + fit: BoxFit.cover, ), ) : Text(url,style: TextStyle(color: Color(0xffF756FF),fontSize: 12.sp),) ], diff --git a/circle_app/lib/app/dialog/BaseDialog.dart b/circle_app/lib/app/dialog/BaseDialog.dart new file mode 100644 index 0000000..4fc60e8 --- /dev/null +++ b/circle_app/lib/app/dialog/BaseDialog.dart @@ -0,0 +1,175 @@ +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_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:get/get_core/src/get_main.dart'; +import 'package:url_launcher/url_launcher.dart'; + +import '../../main.dart'; +import '../../network/dio_manager.dart'; +import '../../util/util.dart'; + +class BaseDialog extends StatefulWidget { + final bool isDismiss; + + BaseDialog({required this.isDismiss}); + + @override + BaseDialogState createState() => BaseDialogState(); +} + +double myProgress = 0; + +class BaseDialogState extends State { + bool isDownload = false; + + void incrementCounter() {} + + void setDownloadUi() { + setState(() { + isDownload = true; + }); + } + + @override + Widget build(BuildContext context) { + return WillPopScope( + onWillPop: () async { + return widget.isDismiss; + }, + child: Dialog( + backgroundColor: Colors.transparent, + child: Container( + height: 200.sp, + padding: const EdgeInsets.all(1.0), + child: Stack( + children: [ + Container( + decoration: BoxDecoration( + shape: BoxShape.rectangle, + borderRadius: BorderRadius.circular(10.0), + gradient: const LinearGradient( + colors: [Color(0xFFDD3DF4), Color(0xFF30FFD9)], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + ), + ), + ), + Container( + margin: EdgeInsets.all(1.sp), + decoration: BoxDecoration( + shape: BoxShape.rectangle, + borderRadius: BorderRadius.circular(10.0), + gradient: const LinearGradient( + colors: [Color(0xFF4C3E5F), Color(0xFF324140)], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + ), + ), + ), + Container( + margin: EdgeInsets.only(top: 24.sp), + child: Column( + children: [ + Center( + child: Text( + "提示", + style: TextStyle(color: Colors.white, fontSize: 16.sp), + ), + ), + SizedBox( + height: 85.sp, + child: ListView( + children: [ + Container( + margin: EdgeInsets.only( + top: 36.sp, left: 14.sp, right: 14.sp), + alignment: Alignment.center, + child: Text( + "您已被对方拉进黑名单,去看看其他人吧~", + textAlign: TextAlign.center, + style: TextStyle( + color: const Color(0xCCF7FAFA), + fontSize: 16.sp), + ), + ) + ], + ), + ), + isDownload + ? GestureDetector( + onTap: () async { + //incrementCounter(); + }, + child: Container( + margin: EdgeInsets.only(top: 24.sp), + child: CircularProgressIndicator( + value: myProgress, + backgroundColor: Colors.grey, + valueColor: const AlwaysStoppedAnimation( + Color(0xFF30FFD9)), + strokeWidth: 4.0.sp, + ), + ), + ) + : GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () async { + Navigator.pop(context); + Get.back(); + }, + child: Container( + width: 200.sp, + margin: EdgeInsets.only(top: 14.sp), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(17), + gradient: const LinearGradient( + colors: [ + Color(0xFF06F9FA), + Color(0xFFDC5BFD), + ], + begin: Alignment.centerLeft, + end: Alignment.centerRight, + ), + ), + padding: EdgeInsets.only( + top: 10.sp, + bottom: 10.sp, + left: 52.sp, + right: 52.sp), + child: Center( + child: Text( + "好的", + style: TextStyle( + color: Colors.white, + fontSize: 12.sp, + ), + ), + ), + ), + ) + ], + ), + ), + Positioned( + right: 8.sp, + top: 8.sp, + child: widget.isDismiss? GestureDetector( + onTap: (){ + + Navigator.pop(context); + }, + child: Icon(Icons.close,color: Colors.white,size: 24.sp,)):Container()) + ], + ), + ), + ), + ); + } + + +} + diff --git a/circle_app/lib/app/help/view.dart b/circle_app/lib/app/help/view.dart index 5a518ba..745dcc1 100644 --- a/circle_app/lib/app/help/view.dart +++ b/circle_app/lib/app/help/view.dart @@ -1,8 +1,11 @@ +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; import '../../components/my_app_bar.dart'; +import '../../main.dart'; import '../../router/app_routers.dart'; import '../../util/util.dart'; import 'logic.dart'; @@ -222,8 +225,20 @@ class HelpPage extends StatelessWidget { borderRadius: BorderRadius.circular(20.sp), ), child: TextButton.icon( - onPressed: () { - // Handle contact service button press + onPressed: () async{ + var con; + if(kDebugMode){ + con = V2TimConversation( + conversationID: "c2c_qpqz_dev_10_102", userID: "qpqz_dev_10_102", showName: "测试乐园客服", type: 1); + }else{ + con = V2TimConversation( + conversationID: "c2c_qpqz_prod_10_102", userID: "qpqz_prod_10_102", showName: "乐园客服", type: 1); + } + Get.toNamed(AppRoutes.Chat, arguments: con); + // sendTextMsg('qpqz_dev_10_102',content :"你好吗? "); + + // pushChatPage(logic.userInfoBean!.id.toString(), logic.imId, + // logic.userInfoBean!.nickname); }, icon: Image.asset( getMineImage("im_service"), diff --git a/circle_app/lib/app/home/logic.dart b/circle_app/lib/app/home/logic.dart index 2527932..d1e85f3 100644 --- a/circle_app/lib/app/home/logic.dart +++ b/circle_app/lib/app/home/logic.dart @@ -15,7 +15,6 @@ import '../msg/view.dart'; import 'state.dart'; class HomeLogic extends GetxController { - PageController pageController = PageController(initialPage: 1); int currentIndex = 1; Widget currentPage = Container(); @@ -36,7 +35,7 @@ class HomeLogic extends GetxController { } @override - void onReady() async{ + void onReady() async { // TODO: implement onReady super.onReady(); @@ -44,41 +43,37 @@ class HomeLogic extends GetxController { var data = await DioManager.instance.get(url: Api.APP_VERSION); var bean = BaseResponse.fromJson( data, (data) => UpdateInfo.fromJson(data)); - if(bean.isSuccess()&&bean.data.update==1){ - // showReportDialog(Get.context!,bean.data.constraint==0,bean.data); + if (bean.isSuccess() && bean.data.update == 1) { + showReportDialog(Get.context!, bean.data.constraint == 0, bean.data); } - - - - } - void showReportDialog(BuildContext context,bool isDismiss,UpdateInfo updateInfo) { + void showReportDialog( + BuildContext context, bool isDismiss, UpdateInfo updateInfo) { showDialog( - context: context, - barrierDismissible: isDismiss, - builder: (BuildContext context) { - return UpdateDialog(isDismiss: isDismiss,updateInfo : updateInfo,); - } - ); + context: context, + barrierDismissible: isDismiss, + builder: (BuildContext context) { + return UpdateDialog( + isDismiss: isDismiss, + updateInfo: updateInfo, + ); + }); } - void getIMData() async { // _coreInstance.; if (!coreInstance.isLoginSuccess) { - var data = await DioManager.instance - .get(url: Api.getIMInfo); + var data = await DioManager.instance.get(url: Api.getIMInfo); if (data['code'] == 200) { - loginIM(data['data']['account_id'].toString(), data['data']['user_sig']); + loginIM( + data['data']['account_id'].toString(), data['data']['user_sig']); } } - } - String getInfo () { + String getInfo() { return getBaseImage('image'); - } updateIndex(int index) { @@ -86,8 +81,7 @@ class HomeLogic extends GetxController { if (index == 1) { final logic = Get.put(CircleLogic()); logic.loadCirclePeopleData(); - }else - if(index == 2){ + } else if (index == 2) { final logic = Get.put(MinefragmentLogic()); logic.getMode(); } diff --git a/circle_app/lib/app/login/login/view.dart b/circle_app/lib/app/login/login/view.dart index 81d9339..39b72be 100644 --- a/circle_app/lib/app/login/login/view.dart +++ b/circle_app/lib/app/login/login/view.dart @@ -173,12 +173,12 @@ class LoginPage extends StatelessWidget { width: 76.sp, height: 29.sp, decoration: BoxDecoration( - color:logic.isPhoto ? logic.sendCodeBtn? Colors.white30: Colors.transparent : Colors.white30, + color:logic.isPhoto ? logic.sendCodeBtn? Colors.white30:const Color(0xff0AFCFF) : Colors.white30, borderRadius: BorderRadius.circular( 29.sp / 2) ), child: Text(logic.sendCodeBtn ? '${logic.seconds}s' : '获取验证码', style: TextStyle( - color: Colors.white, fontSize: 12.sp),), + color: logic.isPhoto ? logic.sendCodeBtn? Colors.white:Colors.black : Colors.white, fontSize: 12.sp),), ), )), diff --git a/circle_app/lib/app/msg/TIMUIKitConversation/tim_uikit_conversation_item.dart b/circle_app/lib/app/msg/TIMUIKitConversation/tim_uikit_conversation_item.dart index 5368303..31e99e6 100644 --- a/circle_app/lib/app/msg/TIMUIKitConversation/tim_uikit_conversation_item.dart +++ b/circle_app/lib/app/msg/TIMUIKitConversation/tim_uikit_conversation_item.dart @@ -167,7 +167,7 @@ class TIMConversationItem extends TIMUIKitStatelessWidget { children: [ ClipOval( child: CachedNetworkImage( - imageUrl: faceUrl==""?"http://qiniuyun.ikuayou.com/avatar/default/default_header.png":faceUrl, + imageUrl: faceUrl==""?"https://qiniuyun.leyuan666.com/quanzi/avatar/default.png":faceUrl, fit: BoxFit.cover, width: isDesktopScreen ? 40 : 44, height: isDesktopScreen ? 40 : 44, diff --git a/circle_app/lib/app/splash/logic.dart b/circle_app/lib/app/splash/logic.dart index 74a2422..065165f 100644 --- a/circle_app/lib/app/splash/logic.dart +++ b/circle_app/lib/app/splash/logic.dart @@ -48,11 +48,16 @@ class SplashLogic extends GetxController { }); Get.offNamed(AppRoutes.Complete_materialPage); return; + } else if(bean.code == 5000||bean.code == 5001||bean.code == 5002||bean.code == 5003){ + pushLoginPage(); + return; } showToast(bean.msg.toString()); if (bean.code == 500) { await Future.delayed(Duration(seconds: 5)); onInit(); + }else { + pushLoginPage(); } // Get.toNamed(AppRoutes.Home); diff --git a/circle_app/lib/app/userinfo/logic.dart b/circle_app/lib/app/userinfo/logic.dart index 19ca2bc..a72e623 100644 --- a/circle_app/lib/app/userinfo/logic.dart +++ b/circle_app/lib/app/userinfo/logic.dart @@ -1,15 +1,21 @@ import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:image_picker/image_picker.dart'; import 'package:shared_preferences/shared_preferences.dart'; +import 'package:tencent_cloud_chat_uikit/data_services/friendShip/friendship_services.dart'; +import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart'; +import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; import '../../common/config.dart'; import '../../network/api.dart'; import '../../network/dio_manager.dart'; import '../../util/SharedPreferencesHelper.dart'; +import '../../util/eventBus.dart'; import '../../util/qiniu.dart'; import '../../util/util.dart'; +import '../dialog/BaseDialog.dart'; import 'state.dart'; class UserinfoLogic extends GetxController { @@ -30,32 +36,56 @@ class UserinfoLogic extends GetxController { bool isShowAlbum = true; bool isLike = false; + bool isBlack = false; + bool isBlackBeen = false; + bool isDestroy = false; final startTime = DateTime.now(); SharedPreferences? sharedPreferences; + @override void onInit() async { super.onInit(); SmartDialog.showLoading(); - sharedPreferences = await SharedPreferences.getInstance(); - int? sharedUserId = sharedPreferences!.getInt(SharedPreferencesHelper.USERID); + sharedPreferences = await SharedPreferences.getInstance(); + int? sharedUserId = + sharedPreferences!.getInt(SharedPreferencesHelper.USERID); - if (userId.isNotEmpty && sharedUserId != null && sharedUserId.toString() == userId) { + if (userId.isNotEmpty && + sharedUserId != null && + sharedUserId.toString() == userId) { userId = ''; } state.imaglist.clear(); if (userId.isEmpty) { - fetchUserInfo(Api.getUserInfo); - fetchMyAlbum(Api.getMyAlbum); + fetchUserInfo(Api.getUserInfo); + fetchMyAlbum(Api.getMyAlbum); } else { - fetchUserInfo("${Api.getUserInfoTA + userId}/home"); - fetchMyAlbum("${Api.getTaAlbum + userId}/albums"); - fetchUrgeStatus("${Api.getUrgeStatus + userId}/urge/album/status"); + fetchUserInfo("${Api.getUserInfoTA + userId}/home"); + fetchMyAlbum("${Api.getTaAlbum + userId}/albums"); + fetchUrgeStatus("${Api.getUrgeStatus + userId}/urge/album/status"); + fetchIsBlack("${Api.setBlock + userId}/block"); } SmartDialog.dismiss(); - fetchQnToken(Api.getqiniuToken); + fetchQnToken(Api.getqiniuToken); + } + + void showBlackDialog(BuildContext context) { + showDialog( + context: context, + barrierDismissible: false, + builder: (BuildContext context) { + return BaseDialog( + isDismiss: false, + ); + }); + } + + Future fetchIsBlack(String url) async { + var data = await DioManager.instance.get(url: url); + isBlack = data["data"]["status"] == 1; } Future fetchUserInfo(String url) async { @@ -66,22 +96,31 @@ class UserinfoLogic extends GetxController { if (bean.isSuccess()) { isMe = userId.isEmpty; isLike = bean.data.isFollow; - isLikeFoMsg = "${bean.data.imageUrgeCount}位圈友感兴趣,其中${bean.data.likeMeCount}位已催您更新"; + isLikeFoMsg = + "${bean.data.likeMeCount}位圈友感兴趣,其中${bean.data.imageUrgeCount}位已催您更新"; userInfoBean = bean.data.user; isVip = userInfoBean?.vip ?? 0; imId = bean.data.accountId; if (isMe) { - isOnline = true; - }else{ + isOnline = true; + } else { isOnline = userInfoBean!.isOnline; + isBlackBeen = bean.data.isBlock; + isDestroy = bean.data.isDestroy; + if(isBlackBeen){ + showToast("您已被对方拉黑"); + } } onLineCity = isOnline ? "在线" : "离线"; if (userInfoBean?.city != null) { onLineCity = "$onLineCity·${userInfoBean!.city}"; - }else{ + } else { onLineCity = "$onLineCity·外星"; } - ageMsg = getAgeCOntent(userInfoBean!.gender, userInfoBean!.age, userInfoBean!.role, userInfoBean!.orientation); + ageMsg = getAgeCOntent(userInfoBean!.gender, userInfoBean!.age, + userInfoBean!.role, userInfoBean!.orientation); + } else if (bean.code == 9999) { + showBlackDialog(Get.context!); } else { showToast(bean.msg); } @@ -104,7 +143,7 @@ class UserinfoLogic extends GetxController { var urgeBean = BaseResponse.fromJson( urgedata, (urgedata) => UrgentStatus.fromJson(urgedata)); isUrgeStatus = urgeBean.data?.isUrgent ?? false; - update(); + update(); } Future fetchQnToken(String url) async { @@ -114,10 +153,8 @@ class UserinfoLogic extends GetxController { if (bean.isSuccess()) { quToken = bean.data?.token.toString() ?? ''; } - } - urgeChange() async { var data = await DioManager.instance .post(url: "${Api.urgeAlbum + userId}/urge/album"); @@ -126,7 +163,7 @@ class UserinfoLogic extends GetxController { showToast("催更成功"); isUrgeStatus = true; update(); - }else { + } else { showToast(bean.msg); } } @@ -143,6 +180,11 @@ class UserinfoLogic extends GetxController { } setLike() async { + if(isBlack||isDestroy){ + showToast("喜欢失败,存在拉黑关系或者该账户已注销"); + return; + } + var data = await DioManager.instance.post( url: "${Api.setLike + userId}/follow", params: {'status': isLike ? "0" : "1"}); @@ -157,15 +199,40 @@ class UserinfoLogic extends GetxController { showToast(bean.msg); } - setBlock() async { - var data = await DioManager.instance - .post(url: "${Api.setBlock + userId}/block", params: {'status': "1"}); + setBlock(String status) async { + List parts = imId.split('_'); + if (parts[2] == "10") { + showToast("不可拉黑客服号哦~"); + return; + } + var data = await DioManager.instance.post( + url: "${Api.setBlock + userId}/block", params: {'status': status}); var bean = BaseResponse.fromJson( data, (jsonData) => jsonData, ); if (bean.isSuccess()) { - Navigator.pop(Get.context!); + final FriendshipServices _friendshipServices = + serviceLocator(); + + isBlack = status == "1"; + try { + if (isBlack) { + Navigator.pop(Get.context!); + var result = + await _friendshipServices.addToBlackList(userIDList: [imId]); + print("拉黑成功" + result.toString()); + } else { + var result = + await _friendshipServices.deleteFromBlackList(userIDList: [imId]); + print("取消拉黑成功" + result.toString()); + } + // await Future.delayed(Duration(milliseconds: 500)); + // Future.delayed(Duration(seconds: 3),() { + EventBusManager.fire(CommentBlackEvent(userId: imId, isBlack: isBlack)); + // }); + } catch (e) {} + update(); } showToast(bean.msg); @@ -189,10 +256,12 @@ class UserinfoLogic extends GetxController { if (myAlbumBean.code == 200) { SmartDialog.dismiss(); - state.imaglist.insert(0,AlbumListItem( - id: myAlbumBean.data.id, - type: myAlbumBean.data.type, - url: result)); + state.imaglist.insert( + 0, + AlbumListItem( + id: myAlbumBean.data.id, + type: myAlbumBean.data.type, + url: result)); update(); } }); @@ -288,6 +357,8 @@ class ResponseBean { int likeMeCount; int imageUrgeCount; bool isFollow; + bool isBlock; + bool isDestroy; String accountId; ResponseBean( @@ -295,6 +366,8 @@ class ResponseBean { required this.likeMeCount, required this.imageUrgeCount, required this.accountId, + required this.isBlock, + required this.isDestroy, required this.isFollow}); factory ResponseBean.fromJson(Map json) { @@ -303,6 +376,8 @@ class ResponseBean { user: UserBean.fromJson(json['user']), likeMeCount: json['like_me_count'], imageUrgeCount: json['image_urge_count'], + isBlock: json['is_been_block'], + isDestroy: json['is_destroy'], isFollow: json['is_follow'], ); } diff --git a/circle_app/lib/app/userinfo/view.dart b/circle_app/lib/app/userinfo/view.dart index c36d9da..5db4d2c 100644 --- a/circle_app/lib/app/userinfo/view.dart +++ b/circle_app/lib/app/userinfo/view.dart @@ -94,11 +94,44 @@ class MyTabbedScreenState extends State Widget _meInfoButton(UserinfoLogic controller) { if (controller.isMe) { - return const SizedBox(); + return GestureDetector( + onTap: () async { + await Get.toNamed( + AppRoutes.Complete_materialPage, + arguments: "user", + ); + logic.onInit(); + }, + child: Center( + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(17), + gradient: const LinearGradient( + colors: [ + Color(0xFF06F9FA), + Color(0xFFDC5BFD), + ], + begin: Alignment.centerLeft, + end: Alignment.centerRight, + ), + ), + padding: EdgeInsets.symmetric( + vertical: 10.sp, + horizontal: 55.sp, + ), + child: const Text( + "完善个人形象", + style: TextStyle( + color: Colors.white, + fontSize: 12, + ), + ), + ), + )); } else { final likeButton = GestureDetector( onTap: () { - _showBottomSheet(context); + _showBottomSheet(context, controller); }, child: Image( image: AssetImage(getMineImage("icon_like")), @@ -137,9 +170,19 @@ class MyTabbedScreenState extends State final chatButton = GestureDetector( onTap: () { + if(logic.isBlack||logic.isDestroy||logic.isBlackBeen){ + showToast("私聊失败,存在拉黑关系或者该账户已注销"); + return; + } + if (logic.userInfoBean != null) { - pushChatPage(logic.userInfoBean!.id.toString(), logic.imId, - logic.userInfoBean!.nickname); + String msg = Get.previousRoute; + if (msg == AppRoutes.Chat) { + Get.back(); + } else { + pushChatPage(logic.userInfoBean!.id.toString(), logic.imId, + logic.userInfoBean!.nickname); + } } }, child: Container( @@ -204,7 +247,7 @@ class MyTabbedScreenState extends State ], ), ), - Container( + Container( padding: EdgeInsets.symmetric( horizontal: 19.sp, ), @@ -222,7 +265,7 @@ class MyTabbedScreenState extends State ), ), SizedBox(width: 8.sp), - _buildInfoRow(controller), + logic.isBlack||logic.isDestroy||logic.isBlackBeen?Container(): _buildInfoRow(controller), ], ), Row( @@ -238,7 +281,7 @@ class MyTabbedScreenState extends State : const Color(0xFF787575), ), ), - Text( + logic.isBlack||logic.isDestroy||logic.isBlackBeen?Container(): Text( controller.onLineCity, style: TextStyle( fontSize: 12.sp, @@ -254,7 +297,7 @@ class MyTabbedScreenState extends State ), SizedBox( height: 59.sp, - child: _buildInterestsListView(interests), + child: logic.isBlack||logic.isDestroy||logic.isBlackBeen?Container(): _buildInterestsListView(interests), ), titleTab(controller), Expanded( @@ -264,8 +307,8 @@ class MyTabbedScreenState extends State _tabController.animateTo(index); }, children: [ - _imageAdapter(controller), - HomeCallOutView(controller.userId), + logic.isBlack||logic.isDestroy||logic.isBlackBeen?Container():_imageAdapter(controller), + logic.isBlack||logic.isDestroy||logic.isBlackBeen?Container(): HomeCallOutView(controller.userId), ], ), ), @@ -360,7 +403,7 @@ class MyTabbedScreenState extends State ); }, ), - GestureDetector( + logic.isBlack||logic.isDestroy||logic.isBlackBeen?Container(): GestureDetector( onTap: () { if (controller.isMe) { controller.isEdit = !controller.isEdit; @@ -410,35 +453,47 @@ class MyTabbedScreenState extends State Widget _imageAdapter(UserinfoLogic controller) { //print(controller.state.imaglist); - return controller.state.imaglist.isEmpty - ? Column(mainAxisAlignment: MainAxisAlignment.start, children: [ - const SizedBox(height: 100,), - Image.asset( - getBaseImage('no_result'), - width: 200, - // height: 11, - ), - const SizedBox(height: 26,), - Text( - controller.isMe?"点击管理即可上传形象照哦~":"TA还没有发布过形象照,快去催TA更新吧~", - style: const TextStyle(color: Colors.white30), - ), - ]) - : Container( - padding: EdgeInsets.symmetric(horizontal: 19.sp), - child: Stack( - children: [ - Column( - children: [ - if (controller.isMe) - Container( - margin: EdgeInsets.only(top: 18.sp, bottom: 14.sp), - child: Text( - controller.isLikeFoMsg, - style: const TextStyle(color: Colors.white30), - ), - ), - Expanded( + + // : + return Container( + padding: EdgeInsets.symmetric(horizontal: 19.sp), + child: Stack( + children: [ + Column( + children: [ + if (controller.isMe) + Container( + margin: EdgeInsets.only(top: 18.sp, bottom: 14.sp), + child: Text( + controller.isLikeFoMsg, + style: const TextStyle(color: Colors.white30), + ), + ), + controller.state.imaglist.isEmpty && !controller.isEdit + ? Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + const SizedBox( + height: 100, + ), + Image.asset( + getBaseImage('no_result'), + width: 200, + // height: 11, + ), + const SizedBox( + height: 26, + ), + Text( + controller.isMe + ? "点击管理即可上传形象照哦~" + : "TA还没有发布过形象照,快去催TA更新吧~", + style: const TextStyle(color: Colors.white30), + ), + ]), + ) + : Expanded( child: GridView.builder( padding: const EdgeInsets.only(bottom: 58.0), shrinkWrap: true, @@ -497,52 +552,11 @@ class MyTabbedScreenState extends State }, ), ), - ], - ), - if (logic.isMe) - Positioned( - left: 0, - right: 0, - bottom: 26.sp, - child: GestureDetector( - onTap: () async { - await Get.toNamed( - AppRoutes.Complete_materialPage, - arguments: "user", - ); - logic.onInit(); - }, - child: Center( - child: Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(17), - gradient: const LinearGradient( - colors: [ - Color(0xFF06F9FA), - Color(0xFFDC5BFD), - ], - begin: Alignment.centerLeft, - end: Alignment.centerRight, - ), - ), - padding: EdgeInsets.symmetric( - vertical: 10.sp, - horizontal: 55.sp, - ), - child: const Text( - "完善个人形象", - style: TextStyle( - color: Colors.white, - fontSize: 12, - ), - ), - ), - ), - ), - ), - ], - ), - ); + ], + ), + ], + ), + ); } Widget _buildInfoRow(UserinfoLogic controller) { @@ -711,7 +725,7 @@ class MyTabbedScreenState extends State ); } - void _showBottomSheet(BuildContext context) { + void _showBottomSheet(BuildContext context, UserinfoLogic controller) { showModalBottomSheet( context: context, backgroundColor: Colors.transparent, @@ -762,8 +776,13 @@ class MyTabbedScreenState extends State ), GestureDetector( onTap: () { - Navigator.pop(context); - _showReportDialog(context); + if (controller.isBlack) { + logic.setBlock("0"); + Navigator.pop(context); + } else { + Navigator.pop(context); + _showReportDialog(context); + } }, child: Column( mainAxisAlignment: MainAxisAlignment.center, @@ -775,8 +794,8 @@ class MyTabbedScreenState extends State ), Container( margin: EdgeInsets.only(top: 2.sp), - child: const Text( - "拉黑", + child: Text( + controller.isBlack ? "取消拉黑" : "拉黑", style: TextStyle(color: Colors.white), ), ), @@ -1031,7 +1050,7 @@ class MyTabbedScreenState extends State SizedBox(width: 24.sp), GestureDetector( onTap: () { - logic.setBlock(); + logic.setBlock("1"); }, child: Container( margin: EdgeInsets.only(top: 24.sp), diff --git a/circle_app/lib/common/config.dart b/circle_app/lib/common/config.dart index 3b165a3..39ac0a4 100644 --- a/circle_app/lib/common/config.dart +++ b/circle_app/lib/common/config.dart @@ -1,5 +1,5 @@ class CONFIG{ - static const IMAGE_HEAD = 'http://qiniuyun.ikuayou.com/'; + static const IMAGE_HEAD = 'https://qiniuyun.leyuan666.com/'; static const CALL_OUT_VIDEO = 'call_out_video/'; diff --git a/circle_app/lib/main.dart b/circle_app/lib/main.dart index 868a0d4..0137a60 100644 --- a/circle_app/lib/main.dart +++ b/circle_app/lib/main.dart @@ -17,6 +17,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart'; +import 'package:tencent_cloud_chat_uikit/data_services/core/core_services.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; import 'package:tencent_chat_push_for_china/model/appInfo.dart'; @@ -66,11 +67,11 @@ initPush() { } //跳转发消息页面 -pushChatPage(String userId, String imId, String userName) async { +pushChatPage(String userId, String imId, String userName) { var con = V2TimConversation( conversationID: "c2c_$imId", userID: imId, showName: userName, type: 1); - await createCustomMsg(userId, imId); Get.toNamed(AppRoutes.Chat, arguments: con); + createCustomMsg(userId, imId); } createCustomMsg(String userId, String imId) async { @@ -272,7 +273,7 @@ class _MyAppState extends State { coreInstance.init( sdkAppID: IM_SDK_APP_ID, // Replace 0 with the SDKAppID of your IM application when integrating - // language: LanguageEnum.en, // 界面语言配置,若不配置,则跟随系统语言 + // language: LanguageEnum.zhHans, // 界面语言配置,若不配置,则跟随系统语言 loglevel: LogLevelEnum.V2TIM_LOG_DEBUG, onTUIKitCallbackListener: (TIMCallback callbackValue) { switch (callbackValue.type) { @@ -282,6 +283,13 @@ class _MyAppState extends State { break; case TIMCallbackType.API_ERROR: //Prints the API error to console, and shows the error message. + if(callbackValue.errorCode==20007){ + showToast("您已被对方拉黑,换个人聊聊天吧~"); + return; + } + if(callbackValue.errorCode==6015){ + return; + } print( "Error from TUIKit: ${callbackValue.errorMsg}, Code: ${callbackValue.errorCode}"); if (callbackValue.errorCode == 10004 && diff --git a/circle_app/lib/network/api.dart b/circle_app/lib/network/api.dart index 421157b..9a34947 100644 --- a/circle_app/lib/network/api.dart +++ b/circle_app/lib/network/api.dart @@ -1,7 +1,7 @@ import 'package:flutter/foundation.dart'; class Api { - static const baseUrl = kDebugMode ? 'http://192.168.3.55:2000/' : 'http://192.168.3.55:2000/'; + static const baseUrl = kDebugMode ? 'http://192.168.3.55:2000/' : 'https://leyuan666.com/zuul-service/'; // static const baseUrl = 'https://leyuan666.com/zuul-service/'; @@ -79,16 +79,35 @@ class Api { static const getUserMine = 'user-service/my/main'; - //个人信息 static const getUserInfo = 'user-service/my/home'; - //他人信息 static const getUserInfoTA = 'user-service/user/'; + //拉黑 + static const setBlock = 'user-service/user/'; + + + //喜欢 + static const setLike = 'user-service/user/'; + + + //注销账号 + static const offAccount = 'user-service/user/destroy'; + + + //绑定新手机号 + static const bindingPhoto = 'user-service/user/phone'; + + + //黑名单列表 + static const blackList = 'user-service/blacklist/users'; + + + //我的相册 static const getMyAlbum = 'up-service/my/albums'; @@ -117,13 +136,8 @@ class Api { static const getUrgeStatus = 'up-service/user/'; - //拉黑 - static const setBlock = 'user-service/user/'; - //喜欢 - static const setLike = 'user-service/user/'; - //关注列表 @@ -146,26 +160,11 @@ class Api { - //注销账号 - static const offAccount = 'user-service/user/destroy'; - //黑名单列表 - static const blackList = 'user-service/blacklist/users'; - - - - - - //绑定新手机号 - static const bindingPhoto = 'user-service/user/phone'; - - - - //意见反馈 static const getFeedBack = 'up-service/feedback'; diff --git a/circle_app/lib/util/eventBus.dart b/circle_app/lib/util/eventBus.dart index 6d3dca0..ad14806 100644 --- a/circle_app/lib/util/eventBus.dart +++ b/circle_app/lib/util/eventBus.dart @@ -38,4 +38,13 @@ class SendCoustomMessage { V2TimValueCallback? createCustomMessageRes = null; -SendCoustomMessage(this.createCustomMessageRes);} \ No newline at end of file +SendCoustomMessage(this.createCustomMessageRes); +} + +class CommentBlackEvent { + String userId = ""; + bool isBlack = false; + CommentBlackEvent( {required this.userId,required this.isBlack }); +} +class CommentBlackMoreEvent { +} \ No newline at end of file diff --git a/circle_app/macos/Flutter/GeneratedPluginRegistrant.swift b/circle_app/macos/Flutter/GeneratedPluginRegistrant.swift index 6ab1844..fe1d5d8 100644 --- a/circle_app/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/circle_app/macos/Flutter/GeneratedPluginRegistrant.swift @@ -12,6 +12,7 @@ import device_info_plus_macos import fc_native_video_thumbnail_for_us import file_selector_macos import geolocator_apple +import local_notifications_for_us import package_info_plus_macos import pasteboard import path_provider_foundation @@ -30,6 +31,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { FcNativeVideoThumbnailPlugin.register(with: registry.registrar(forPlugin: "FcNativeVideoThumbnailPlugin")) FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin")) + FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin")) FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin")) PasteboardPlugin.register(with: registry.registrar(forPlugin: "PasteboardPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) diff --git a/circle_app/pubspec.lock b/circle_app/pubspec.lock index a27baaf..10fd45b 100644 --- a/circle_app/pubspec.lock +++ b/circle_app/pubspec.lock @@ -329,6 +329,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.0.5" + dbus: + dependency: transitive + description: + name: dbus + sha256: "6f07cba3f7b3448d42d015bfd3d53fe12e5b36da2423f23838efc1d5fb31a263" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.7.8" desktop_drop: dependency: transitive description: @@ -433,6 +441,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0+3" + event_bus: + dependency: "direct main" + description: + name: event_bus + sha256: "44baa799834f4c803921873e7446a2add0f3efa45e101a054b1f0ab9b95f8edc" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.0.0" extended_image: dependency: transitive description: @@ -542,6 +558,14 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_apns_only: + dependency: transitive + description: + name: flutter_apns_only + sha256: "70da0d520a5b8088dc7a52abb9a63d3191521c7ec2360461af776cdaee50ab74" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.6.0" flutter_blurhash: dependency: transitive description: @@ -598,6 +622,22 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.0.1" + flutter_local_notifications_linux: + dependency: transitive + description: + name: flutter_local_notifications_linux + sha256: b472bfc173791b59ede323661eae20f7fff0b6908fea33dd720a6ef5d576bae8 + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.5.1" + flutter_local_notifications_platform_interface: + dependency: transitive + description: + name: flutter_local_notifications_platform_interface + sha256: "21bceee103a66a53b30ea9daf677f990e5b9e89b62f222e60dd241cd08d63d3a" + url: "https://pub.flutter-io.cn" + source: hosted + version: "5.0.0" flutter_luban: dependency: "direct main" description: @@ -614,6 +654,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "0.6.15" + flutter_native_splash: + dependency: "direct main" + description: + name: flutter_native_splash + sha256: "6777a3abb974021a39b5fdd2d46a03ca390e03903b6351f21d10e7ecc969f12d" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.2.16" flutter_page_indicator: dependency: transitive description: @@ -824,6 +872,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "4.0.2" + huawei_push: + dependency: transitive + description: + name: huawei_push + sha256: "71e84086f28eeab3bd4fef66f0cefad1adcb537a77ade154020af60c1dfe55fb" + url: "https://pub.flutter-io.cn" + source: hosted + version: "6.10.0+300" image: dependency: transitive description: @@ -952,6 +1008,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0+4" + local_notifications_for_us: + dependency: transitive + description: + name: local_notifications_for_us + sha256: "0453c3c8e021474d36bc1ccdae06688e7e1c6d3d62114e2f3c4eebd0e2f035d7" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.0.4" logging: dependency: transitive description: @@ -1216,6 +1280,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.6.0" + plain_notification_token_for_us: + dependency: transitive + description: + name: plain_notification_token_for_us + sha256: ba4e5ff9b24abec39aad2d2d07fbfc02966b37fd5ae98ed9f8af20e4c4f906ad + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.0.0+1" platform: dependency: transitive description: @@ -1461,6 +1533,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.0.4" + tencent_chat_push_for_china: + dependency: "direct main" + description: + name: tencent_chat_push_for_china + sha256: "7877e18a229c93fd5fa9dcda5b37bea0e4f6ad29ec93ceaeb2bca9bb82d75480" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.6.2+1" tencent_cloud_chat_sdk: dependency: transitive description: @@ -1581,6 +1661,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.0.1" + timezone: + dependency: transitive + description: + name: timezone + sha256: "1cfd8ddc2d1cfd836bc93e67b9be88c3adaeca6f40a00ca999104c30693cdca0" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.9.2" transformer_page_view: dependency: transitive description: @@ -1865,10 +1953,10 @@ packages: dependency: transitive description: name: xdg_directories - sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1 + sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.0" + version: "0.2.0+3" xml: dependency: transitive description: