From 730ec0f5cd3045786039c40d2717f11f277de82e Mon Sep 17 00:00:00 2001 From: CYH <13923927013@163.com> Date: Mon, 10 Feb 2025 09:31:13 +0800 Subject: [PATCH] =?UTF-8?q?2.4.3=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- circle_app/android/app/build.gradle | 4 +- circle_app/ios/Runner/Info.plist | 7 + circle_app/lib/circle_app/call_out/logic.dart | 57 +- circle_app/lib/circle_app/call_out/view.dart | 897 +++++++++++------- .../tim_uikit_text_field_layout/narrow.dart | 189 ++-- .../chat/widget/initmacy_dialog.dart | 32 +- .../circle/widgets/info_list_view.dart | 2 +- .../circle_app/circle/widgets/new_people.dart | 6 +- .../circle_app/circle/widgets/video_item.dart | 1 + circle_app/lib/circle_app/home/logic.dart | 21 +- circle_app/lib/circle_app/home/view.dart | 83 +- .../login/complete_material/logic.dart | 216 +++-- .../lib/circle_app/login/login/logic.dart | 6 +- .../lib/circle_app/minefragment/logic.dart | 4 + .../circle_app/minefragment/my_call_out.dart | 177 ++-- .../tim_uikit_conversation.dart | 11 +- circle_app/lib/circle_app/msg/view.dart | 1 + circle_app/lib/circle_app/quick/view.dart | 6 +- circle_app/lib/circle_app/userinfo/view.dart | 11 +- .../userinfo/widgets/home_call_out.dart | 13 +- .../userinfo/widgets/home_call_out_logic.dart | 5 + .../lib/circle_app/world_call_out/logic.dart | 1 - circle_app/lib/net/api.dart | 3 + circle_app/lib/net/dio_manager.dart | 6 +- circle_app/lib/utils/cache_img.dart | 4 +- circle_app/lib/utils/util.dart | 19 +- circle_app/lib/view/notice.dart | 2 + 27 files changed, 1014 insertions(+), 770 deletions(-) diff --git a/circle_app/android/app/build.gradle b/circle_app/android/app/build.gradle index 8b43156..7288fd6 100644 --- a/circle_app/android/app/build.gradle +++ b/circle_app/android/app/build.gradle @@ -71,8 +71,8 @@ android { // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion 21 targetSdkVersion flutter.targetSdkVersion - versionCode 85 - versionName "2.4.0" + versionCode 87 + versionName "2.4.2" manifestPlaceholders = [ vivo_APPID: "105669716", vivo_APPKEY:"84f750207787376b310ca5b0d5969122", diff --git a/circle_app/ios/Runner/Info.plist b/circle_app/ios/Runner/Info.plist index 4f230df..5662e2d 100644 --- a/circle_app/ios/Runner/Info.plist +++ b/circle_app/ios/Runner/Info.plist @@ -45,6 +45,13 @@ CFBundleVersion $(CURRENT_PROJECT_VERSION) + LSApplicationQueriesSchemes + + weixinURLParamsAPI + weixinULAPI + weixin + wechat + LSRequiresIPhoneOS NSCameraUsageDescription diff --git a/circle_app/lib/circle_app/call_out/logic.dart b/circle_app/lib/circle_app/call_out/logic.dart index 75ffa87..bfafd06 100644 --- a/circle_app/lib/circle_app/call_out/logic.dart +++ b/circle_app/lib/circle_app/call_out/logic.dart @@ -37,6 +37,9 @@ class Call_outLogic extends GetxController { final Call_outState state = Call_outState(); TextEditingController textEditingController = TextEditingController(); ScrollController scrollController = ScrollController(); + + ScrollController allScrollController = ScrollController(); + ScrollController textscrollController = ScrollController(); bool isCheck = false; late ConfigBean configBean; String circleName = ""; @@ -335,7 +338,7 @@ class Call_outLogic extends GetxController { // String outputPath = path+"ceshishuiyin"; // File(outputPath).writeAsBytesSync(img.encodeJpg(watermarkedImage)); - SmartDialog.showLoading(); + SmartDialog.showLoading(msg: '上传中'); uploadImage(quToken, pickedFile!, ImgPath.CALL_OUT_IMAGE, (result) { SmartDialog.dismiss(); state.imaglist.add(result); @@ -387,12 +390,13 @@ class Call_outLogic extends GetxController { if (null == pickedFile) { return; } - SmartDialog.showLoading(); + SmartDialog.showLoading(msg: '上传中'); // var path = await getApplicationSupportDirectoryPath(); videoPlayerController = VideoPlayerController.file( File(pickedFile.path), videoPlayerOptions: VideoPlayerOptions(mixWithOthers: true), ); + await videoPlayerController?.initialize(); final Duration videoDuration = videoPlayerController!.value.duration; final double durationInSeconds = videoDuration.inSeconds.toDouble(); @@ -417,57 +421,8 @@ class Call_outLogic extends GetxController { } } catch (e) {} - //压缩 感觉越压越大 - // try { - // final XFile? pickedFile = await _picker.pickVideo( - // source: ImageSource.gallery, - // ); - // if(null==pickedFile){ - // return; - // } - // SmartDialog.showLoading(); - // var path = await getApplicationSupportDirectoryPath(); - // - // - // compressVideo(pickedFile.path, path, (result) async { - // print(result); - // videoPlayerController = VideoPlayerController.file( - // File(result), - // videoPlayerOptions: VideoPlayerOptions(mixWithOthers: true), - // ); - // await videoPlayerController?.initialize(); - // final Duration videoDuration = videoPlayerController!.value.duration; - // final double durationInSeconds = videoDuration.inSeconds.toDouble(); - // print("////////////"); - // print(durationInSeconds.toString()); - // if (durationInSeconds >= 5 && durationInSeconds <= 30) { - // videoPlayerController?.setLooping(true); - // videoPlayerController?.addListener(() { - // if (!videoPlayerController!.value.isPlaying) { - // // Navigator.pop(context); - // } - // }); - // - // updataQiniu(result, pickedFile.name, CONFIG.CALL_OUT_VIDEO, quToken, - // (result) { - // SmartDialog.dismiss(); - // state.videolist.add(result); - // update(); - // }); - // } else { - // SmartDialog.dismiss(); - // showToast("请上传5-30秒的视频"); - // } - // }); - // } catch (e) {} } - Future _loadCaptions(BuildContext context) async { - final String fileContents = await DefaultAssetBundle.of(context) - .loadString('assets/bumble_bee_captions.vtt'); - return WebVTTCaptionFile( - fileContents); // For vtt files, use WebVTTCaptionFile - } } class MyBean { diff --git a/circle_app/lib/circle_app/call_out/view.dart b/circle_app/lib/circle_app/call_out/view.dart index 1f38ada..e71aefa 100644 --- a/circle_app/lib/circle_app/call_out/view.dart +++ b/circle_app/lib/circle_app/call_out/view.dart @@ -20,7 +20,7 @@ class Call_outPage extends StatefulWidget { State createState() => _Call_outPageState(); } -class _Call_outPageState extends State { +class _Call_outPageState extends State { final logic = Get.find(); final state = Get.find().state; @@ -31,19 +31,30 @@ class _Call_outPageState extends State { void initState() { // TODO: implement initState super.initState(); + logic.scrollController.addListener(() { if (logic.scrollController.position.pixels == logic.scrollController.position.maxScrollExtent) { logic.startSelectCircleActivity(); } }); + + logic.textscrollController.addListener(() { + print(logic.textscrollController.offset); + if (logic.textscrollController.offset <= 1.0) { + logic.allScrollController.animateTo(0, + duration: Duration(milliseconds: 150), curve: Curves.easeIn); + } + }); } + @override void dispose() { // TODO: implement dispose super.dispose(); logic.scrollController.dispose(); + logic.textscrollController.dispose(); } @override @@ -54,6 +65,10 @@ class _Call_outPageState extends State { return GestureDetector( onTap: () { FocusManager.instance.primaryFocus?.unfocus(); + isShowKeyboard = false; + if (mounted) { + setState(() {}); + } }, child: Container( width: MediaQuery.of(context).size.width, @@ -62,333 +77,478 @@ class _Call_outPageState extends State { image: DecorationImage( fit: BoxFit.fill, image: AssetImage(getBaseImage('home_back')))), - child: Scaffold( - resizeToAvoidBottomInset: false, - backgroundColor: Colors.transparent, - appBar: MyAppBar( - centerTitle: '圈内喊话', - actionWdiget: Image.asset( - getCircleImage('push'), - width: 54.sp, - ), - onPressed: () { - logic.sendShout(); - }, - ), - body: SafeArea( - child: Stack( - fit: StackFit.expand, - children: [ - Column( + child: Stack( + fit: StackFit.expand, + children: [ + Scaffold( + // resizeToAvoidBottomInset: false, + backgroundColor: Colors.transparent, + appBar: MyAppBar( + centerTitle: '圈内喊话', + actionWdiget: Image.asset( + getCircleImage('push'), + width: 54.sp, + ), + onPressed: () { + logic.sendShout(); + }, + ), + body: Container( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - GestureDetector( - behavior: HitTestBehavior.opaque, - onTap: () async { - logic.startSelectCircleActivity(); - }, - child: Container( - height: 45.sp, - padding: - EdgeInsets.only(left: 17.sp, right: 17.sp), - child: Row( - children: [ - Text( - '🌍选择圈子:', - style: TextStyle( - color: Colors.white, fontSize: 16.sp), - ), - Expanded(child: Container()), - logic.circleName == '' - ? Container( - child: Text( - '选择合适的圈子更容易吸引圈友', - style: - TextStyle(color: Colors.grey), - ), - ) - : Container( - padding: EdgeInsets.only( - left: 7.sp, right: 7.sp), - height: 21.sp, - alignment: Alignment.center, - decoration: BoxDecoration( - borderRadius: - BorderRadius.circular( - 21 * 0.5.sp), - gradient: const LinearGradient( - begin: Alignment.centerLeft, - end: Alignment.centerRight, - colors: [ - Color(0xff0AFCFF), - Color(0xffD739EA) - ])), - child: Text( - logic.circleName, - style: TextStyle( - color: Colors.white, - fontSize: 12.sp), - ), - ), - Image.asset( - getHomeImage('icon_in'), - width: 24.sp, - ), - ], - ), - ), - ), - _buildInterestsListView(logic.interests), - Container( - margin: EdgeInsets.only(top: 8.sp), - child: Image.asset( - getCircleImage('line'), - width: Get.width, - fit: BoxFit.fill, - ), - ), Expanded( - child: Container( - padding: EdgeInsets.only(top: 15.sp), - child: Stack( - children: [ - Column( + child: SingleChildScrollView( + controller: logic.allScrollController, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, children: [ - SizedBox( - height: 150.sp, - child: TextField( - controller: - controller.textEditingController, - onChanged: (value) { - controller.update(); - }, - onTap: () { - isShowKeyboard = true; - setState(() {}); - }, - style: TextStyle( - color: Colors.white, - fontSize: 17.0.sp), - maxLines: 32, - maxLength: 200, - decoration: InputDecoration( - hintStyle: TextStyle( - color: const Color.fromRGBO( - 255, 255, 255, 0.6), - fontSize: 14.sp), - hintText: '请输入...(左下角上传图片或视频)', - border: InputBorder.none, - contentPadding: EdgeInsets.only( - left: 17.sp, right: 17.sp), - counter: const Text('')), + GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () async { + logic.startSelectCircleActivity(); + }, + child: Container( + height: 45.sp, + padding: EdgeInsets.only( + left: 17.sp, right: 17.sp), + child: Row( + children: [ + Text( + '🌍选择圈子:', + style: TextStyle( + color: Colors.white, + fontSize: 16.sp), + ), + Expanded(child: Container()), + logic.circleName == '' + ? Container( + child: Text( + '选择合适的圈子更容易吸引圈友', + style: TextStyle( + color: Colors.grey), + ), + ) + : Container( + padding: EdgeInsets.only( + left: 7.sp, + right: 7.sp), + height: 21.sp, + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: + BorderRadius + .circular(21 * + 0.5.sp), + gradient: + const LinearGradient( + begin: Alignment + .centerLeft, + end: Alignment + .centerRight, + colors: [ + Color(0xff0AFCFF), + Color(0xffD739EA) + ])), + child: Text( + logic.circleName, + style: TextStyle( + color: Colors.white, + fontSize: 12.sp), + ), + ), + Image.asset( + getHomeImage('icon_in'), + width: 24.sp, + ), + ], + ), + ), + ), + _buildInterestsListView(logic.interests), + Container( + margin: EdgeInsets.only(top: 8.sp), + child: Image.asset( + getCircleImage('line'), + width: Get.width, + fit: BoxFit.fill, + ), + ), + Container( + padding: EdgeInsets.only( + top: 5.sp, bottom: 5.sp), + child: Column( + children: [ + if (controller + .state.imaglist.isNotEmpty) + Container( + margin: EdgeInsets.only( + top: 5.sp, + left: 10.sp, + bottom: 5.sp, + right: 10.sp, + ), + constraints: BoxConstraints( + maxHeight: logic + .state + .imaglist + .length > + 3 + ? 240.sp + : 120.sp), + child: + _imageAdapter(controller)), + Container( + margin: EdgeInsets.only( + top: 0.sp, + left: 15.sp, + right: 15.sp, + bottom: 0.sp), + child: _showVideo(controller), + ), + Container( + // color: Colors.yellow, + margin: EdgeInsets.symmetric(horizontal: 16.sp), + child: SizedBox( + height: Get.height - + MediaQuery.of(context).padding.top - + MediaQuery.of(context).padding.bottom - + 300.sp, + child: TextField( + maxLines: 15, + scrollController: logic.textscrollController, + // scrollPhysics: NeverScrollableScrollPhysics(), + textAlignVertical: TextAlignVertical.center, + maxLength: 200, + controller: logic.textEditingController, + + onChanged: (msg) { + logic.update(); + }, + onTap: () { + isShowKeyboard = true; + logic.update(); + + }, + decoration: InputDecoration( + counterText: '', + // isCollapsed: true, + hintText: '请输入...(左下角上传图片或视频)', + hintStyle: TextStyle( + color: Colors.grey.shade300, + fontSize: 14.0, + ), + counterStyle: TextStyle( + color: Colors.grey.shade300, + fontSize: 14.0, + ), + border: InputBorder.none, + ), + style: TextStyle( + color: Colors.white, + fontSize: 14.0.sp, + height: 1.5.sp, + ), + ), + ), + ), + + // SizedBox( + // height: Get.height - + // MediaQuery.of(context) + // .padding + // .top - + // MediaQuery.of(context) + // .padding + // .bottom - + // 0.sp, + // child: TextField( + // controller: controller + // .textEditingController, + // scrollController: + // logic.textscrollController, + // textAlignVertical: + // TextAlignVertical.center, + // // scrollPhysics: NeverScrollableScrollPhysics(), + // onChanged: (value) { + // controller.update(); + // }, + // onTap: () { + // isShowKeyboard = true; + // setState(() {}); + // }, + // style: TextStyle( + // color: Colors.white, + // fontSize: 17.0.sp), + // maxLines: 32, + // maxLength: 200, + // decoration: InputDecoration( + // hintStyle: TextStyle( + // color: + // const Color.fromRGBO( + // 255, + // 255, + // 255, + // 0.6), + // fontSize: 14.sp), + // hintText: + // '请输入...(左下角上传图片或视频)', + // border: InputBorder.none, + // contentPadding: + // EdgeInsets.only( + // left: 17.sp, + // right: 17.sp), + // counter: const Text('')), + // ), + // ), + ], ), ), - Row( - children: [ - Expanded(child: Container()), - Text( - '${controller.textEditingController.text.length}/200', - style: TextStyle( - color: Colors.white, - fontSize: 12.sp), - ), - SizedBox( - width: 15.sp, - ) - ], - ) ], + )), + ), + Container( + margin: EdgeInsets.only(bottom: 10.sp), + child: Row( + children: [ + Expanded(child: Container()), + Text( + '${controller.textEditingController.text.length}/200', + style: TextStyle( + color: Colors.white, fontSize: 12.sp), + ), + InkWell(onTap: () { + navigateToContentGuidelines(); + },child: Container(margin: EdgeInsets.only(left: 5.sp),height: 20.sp,width: 20.sp,decoration: BoxDecoration( + // color: const Color(0xFF898F99), + borderRadius: BorderRadius.circular(10.sp), + border: Border.all(color: Color(0xFF898F99),width: 1) + ),child: Icon(Icons.question_mark,color: const Color(0xFF898F99),size: 16.sp,))), + + SizedBox( + width: 15.sp, ), - // Positioned( - // right: 15.sp, - // top: 100.sp, - // child:), - Container( - margin: EdgeInsets.only(top: 180.sp), - child: _imageAdapter(controller)), - Container( - margin: EdgeInsets.only( - top: 180.sp, left: 15.sp, right: 15.sp), - child: _showVideo(controller), - ) ], ), - )), - if (!isShowKeyboard) + ), Container( - height: 90.sp, + width: Get.width, + height: 85.sp, + margin: EdgeInsets.only(bottom: 15.sp), + color: Colors.transparent, padding: EdgeInsets.only( - left: 17.sp, right: 17.sp, bottom: 5.sp), + left: 17.sp, right: 17.sp), child: Column( children: [ optionAtWidget(), - Row( - children: [ - GestureDetector( - onTap: () { - logic.showImg(); - }, - child: Image.asset( - getCircleImage('photo'), - width: 30.sp, - ), - ), - const SizedBox( - width: 16, - ), - GestureDetector( - onTap: () { - logic.showVideo(); - }, - child: Image.asset( - getCircleImage('video'), - width: 30.sp, - ), - ), - Expanded( - child: GestureDetector( - onTap: () { - if (controller.vip == 2) { - controller.isCheck = - !controller.isCheck; - controller.update(); - } else { - showOKToast( - "至尊喊话为年会员特权,开通年会员即可享受哦~"); - controller.showRechargeDialog(); - } - }, - child: Row( - mainAxisAlignment: - MainAxisAlignment.center, - children: [ - Image.asset( - getCircleImage( - controller.isCheck - ? 'check' - : 'uncheck'), - width: 17.5.sp, + Expanded( + child: Stack( + fit: StackFit.expand, + alignment: Alignment.center, + children: [ + Row( + children: [ + GestureDetector( + onTap: () { + logic.showImg(); + }, + child: Image.asset( + getCircleImage('photo'), + width: 30.sp, ), - SizedBox( - width: 4.sp, + ), + const SizedBox( + width: 16, + ), + GestureDetector( + onTap: () { + logic.showVideo(); + }, + child: Image.asset( + getCircleImage('video'), + width: 30.sp, ), - Text( - '使用至尊喊话', + ), + Spacer(), + + GestureDetector( + onTap: () { + FocusManager.instance.primaryFocus + ?.unfocus(); + isShowKeyboard = false; + if (mounted) { + setState(() {}); + } + }, + child: Text( + '收起', style: TextStyle( - color: Colors.white, - fontSize: 16.sp), - ) - ], + color: isShowKeyboard ? Colors.white : Colors.transparent, fontSize: 14.sp), + ), + ) + ], + ), + Positioned( + child: GestureDetector( + onTap: () { + if (controller.vip == 2) { + controller.isCheck = + !controller.isCheck; + controller.update(); + } else { + showOKToast( + "至尊喊话为年会员特权,开通年会员即可享受哦~"); + controller.showRechargeDialog(); + } + }, + child: Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + Image.asset( + getCircleImage( + controller.isCheck + ? 'check' + : 'uncheck'), + width: 17.5.sp, + ), + SizedBox( + width: 4.sp, + ), + Text( + '使用至尊喊话', + style: TextStyle( + color: Colors.white, + fontSize: 16.sp), + ) + ], + ), ), - ), - ), - GestureDetector( - onTap: () { - navigateToContentGuidelines(); - }, - child: Text( - '内容规范', - style: TextStyle( - color: Colors.white, - fontSize: 14.sp), - ), - ) - ], + ) + ], + ), ), ], ), ) ], ), - if (isShowKeyboard) - Positioned( - bottom: keyboardSize, - child: Container( - width: Get.width, - height: 90.sp, - padding: EdgeInsets.only( - left: 17.sp, right: 17.sp, bottom: 5.sp), - child: Column( - children: [ - optionAtWidget(), - Row( - children: [ - GestureDetector( - onTap: () { - logic.showImg(); - }, - child: Image.asset( - getCircleImage('photo'), - width: 30.sp, - ), - ), - const SizedBox( - width: 16, - ), - GestureDetector( - onTap: () { - logic.showVideo(); - }, - child: Image.asset( - getCircleImage('video'), - width: 30.sp, - ), - ), - Expanded( - child: GestureDetector( - onTap: () { - if (controller.vip == 2) { - controller.isCheck = - !controller.isCheck; - controller.update(); - } else { - showOKToast( - "至尊喊话为年会员特权,开通年会员即可享受哦~"); - controller.showRechargeDialog(); - } - }, - child: Row( - mainAxisAlignment: - MainAxisAlignment.center, - children: [ - Image.asset( - getCircleImage( - controller.isCheck - ? 'check' - : 'uncheck'), - width: 17.5.sp, - ), - SizedBox( - width: 4.sp, - ), - Text( - '使用至尊喊话', - style: TextStyle( - color: Colors.white, - fontSize: 16.sp), - ) - ], - ), - ), - ), - GestureDetector( - onTap: () { - navigateToContentGuidelines(); - }, - child: Text( - '内容规范', - style: TextStyle( - color: Colors.white, - fontSize: 14.sp), - ), - ) - ], - ), - ], - ), - )) - ], + ), ), - ), + // if (isShowKeyboard) + // Column( + // children: [ + // Expanded(child: Container()), + // Container( + // width: Get.width, + // height: 105.sp, + // // color: isShowKeyboard + // // ? AppColor.bgColor + // // : Colors.transparent, + // margin: EdgeInsets.only(bottom: keyboardSize), + // padding: EdgeInsets.only( + // left: 17.sp, right: 17.sp, bottom: 5.sp), + // child: Column( + // children: [ + // Container( + // margin: EdgeInsets.only(bottom: 10.sp), + // child: Row( + // children: [ + // Expanded(child: Container()), + // Text( + // '${controller.textEditingController.text.length}/200', + // style: TextStyle( + // color: Colors.white, fontSize: 12.sp), + // ), + // SizedBox( + // width: 15.sp, + // ), + // ], + // ), + // ), + // optionAtWidget(), + // Row( + // children: [ + // GestureDetector( + // onTap: () { + // logic.showImg(); + // }, + // child: Image.asset( + // getCircleImage('photo'), + // width: 30.sp, + // ), + // ), + // const SizedBox( + // width: 16, + // ), + // GestureDetector( + // onTap: () { + // logic.showVideo(); + // }, + // child: Image.asset( + // getCircleImage('video'), + // width: 30.sp, + // ), + // ), + // Expanded( + // child: GestureDetector( + // onTap: () { + // if (controller.vip == 2) { + // controller.isCheck = + // !controller.isCheck; + // controller.update(); + // } else { + // showOKToast("至尊喊话为年会员特权,开通年会员即可享受哦~"); + // controller.showRechargeDialog(); + // } + // }, + // child: Row( + // mainAxisAlignment: + // MainAxisAlignment.center, + // children: [ + // Image.asset( + // getCircleImage(controller.isCheck + // ? 'check' + // : 'uncheck'), + // width: 17.5.sp, + // ), + // SizedBox( + // width: 4.sp, + // ), + // Text( + // '使用至尊喊话', + // style: TextStyle( + // color: Colors.white, + // fontSize: 16.sp), + // ) + // ], + // ), + // ), + // ), + // GestureDetector( + // onTap: () { + // FocusManager.instance.primaryFocus + // ?.unfocus(); + // isShowKeyboard = false; + // if (mounted) { + // setState(() {}); + // } + // }, + // child: Text( + // '收起', + // style: TextStyle( + // color: Colors.white, fontSize: 14.sp), + // ), + // ) + // ], + // ), + // ], + // ), + // ), + // ], + // ) + ], ))); }); } @@ -408,16 +568,14 @@ class _Call_outPageState extends State { child: Container( height: 30.sp, width: Get.width, - padding: EdgeInsets.only(left: 4.sp,right: 4.sp), + padding: EdgeInsets.only(left: 4.sp, right: 4.sp), margin: EdgeInsets.only( - // left: 15.sp, bottom: 10.sp, ), decoration: BoxDecoration( color: CupertinoColors.systemGrey.withOpacity(0.2), - borderRadius: BorderRadius.circular(15.sp) - ), + borderRadius: BorderRadius.circular(15.sp)), child: Row( // mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -509,7 +667,8 @@ class _Call_outPageState extends State { children: [ Container( margin: EdgeInsets.all(0.2.sp), - padding: EdgeInsets.only(left: 5.sp, right: 5.sp, top: 5.sp), + padding: + EdgeInsets.only(left: 5.sp, right: 5.sp, top: 5.sp), decoration: BoxDecoration( borderRadius: BorderRadius.circular(8.0), color: const Color(0xFF392D53), @@ -527,7 +686,9 @@ class _Call_outPageState extends State { ), ), ), - SizedBox(height: 4.sp,), + SizedBox( + height: 4.sp, + ), Text( interest.pushTitle, style: TextStyle( @@ -537,10 +698,14 @@ class _Call_outPageState extends State { ), ], )), - Positioned(top: 2.sp,right:4.sp,child: Image.asset( - getHomeImage('icon_in'), - width: 24.sp, - ),) + Positioned( + top: 2.sp, + right: 4.sp, + child: Image.asset( + getHomeImage('icon_in'), + width: 24.sp, + ), + ) ], ), ), @@ -560,57 +725,60 @@ class _Call_outPageState extends State { // Widget _maxVideo(Call_outLogic controller){ Widget _mixVideo(Call_outLogic controller) { - return SizedBox( - width: controller.videoPlayerController!.value.size.width < - controller.videoPlayerController!.value.size.height - ? 135.sp - : 240.sp, - height: controller.videoPlayerController!.value.size.width < - controller.videoPlayerController!.value.size.height - ? 135.sp / controller.videoPlayerController!.value.aspectRatio - : 240.sp / controller.videoPlayerController!.value.aspectRatio, - child: GestureDetector( - onTap: () { - if (controller.videoPlayerController!.value.isPlaying) { - controller.videoPlayerController!.pause(); - } else { - controller.videoPlayerController!.play(); - } - controller.update(); - }, - child: AspectRatio( - aspectRatio: controller.videoPlayerController!.value.aspectRatio, - child: Stack( - children: [ - VideoPlayer(controller.videoPlayerController!), - Center( - child: controller.videoPlayerController!.value.isPlaying - ? Container() - : Image( - image: AssetImage(getMineImage("icon_play")), - width: 30.sp, - height: 30.sp, + return Container( + alignment: Alignment.bottomLeft, + child: SizedBox( + width: controller.videoPlayerController!.value.size.width < + controller.videoPlayerController!.value.size.height + ? 135.sp + : 240.sp, + height: controller.videoPlayerController!.value.size.width < + controller.videoPlayerController!.value.size.height + ? 135.sp / controller.videoPlayerController!.value.aspectRatio + : 240.sp / controller.videoPlayerController!.value.aspectRatio, + child: GestureDetector( + onTap: () { + if (controller.videoPlayerController!.value.isPlaying) { + controller.videoPlayerController!.pause(); + } else { + controller.videoPlayerController!.play(); + } + controller.update(); + }, + child: AspectRatio( + aspectRatio: controller.videoPlayerController!.value.aspectRatio, + child: Stack( + children: [ + VideoPlayer(controller.videoPlayerController!), + Center( + child: controller.videoPlayerController!.value.isPlaying + ? Container() + : Image( + image: AssetImage(getMineImage("icon_play")), + width: 30.sp, + height: 30.sp, + ), + ), + Positioned( + top: 0, + right: 0, + child: GestureDetector( + onTap: () { + // showToast("删除"); + _showDelVideoDialog(Get.context!, controller); + }, + child: Image( + image: AssetImage(getMineImage("icon_img_del")), + width: 20.sp, + height: 20.sp, ), - ), - Positioned( - top: 0, - right: 0, - child: GestureDetector( - onTap: () { - // showToast("删除"); - _showDelVideoDialog(Get.context!, controller); - }, - child: Image( - image: AssetImage(getMineImage("icon_img_del")), - width: 20.sp, - height: 20.sp, - ), - )) + )) - // ClosedCaption(text: controller.videoPlayerController!.value.caption.text), - // _ControlsOverlay(controller: controller.videoPlayerController), - // VideoProgressIndicator(controller.videoPlayerController!, allowScrubbing: true), - ], + // ClosedCaption(text: controller.videoPlayerController!.value.caption.text), + // _ControlsOverlay(controller: controller.videoPlayerController), + // VideoProgressIndicator(controller.videoPlayerController!, allowScrubbing: true), + ], + ), ), ), ), @@ -619,13 +787,14 @@ class _Call_outPageState extends State { Widget _imageAdapter(Call_outLogic controller) { return GridView.builder( + physics: NeverScrollableScrollPhysics(), gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 3, // 每行显示的项目数量 + crossAxisCount: 3, ), itemCount: controller.state.imaglist.length, // 项目的总数量,包括固定图片和接口获取的项目 itemBuilder: (BuildContext context, int index) { return Container( - margin: EdgeInsets.all(5.sp), + margin: EdgeInsets.all(2.5.sp), child: Center( child: _buildImageItem( controller.state.imaglist[index], controller, index)), diff --git a/circle_app/lib/circle_app/chat/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart b/circle_app/lib/circle_app/chat/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart index 69c1b65..10b2c36 100644 --- a/circle_app/lib/circle_app/chat/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart +++ b/circle_app/lib/circle_app/chat/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart @@ -359,7 +359,6 @@ class _TIMTextFieldLayoutNarrowState } } - _openEmojiPanel() { widget.onCursorChange(); showKeyboard = showEmojiPanel; @@ -542,13 +541,13 @@ class _TIMTextFieldLayoutNarrowState showSendSoundText = !showSendSoundText; }); } else { - //未授权则发起一次申请 if (Platform.isAndroid && !isShowVoiceOverLay) { - EventBusManager.fire(PermissionInfo('麦克风权限申请说明', '为了发送语音消息,需要获取麦克风权限')); + EventBusManager.fire(PermissionInfo( + '麦克风权限申请说明', '为了发送语音消息,需要获取麦克风权限')); } var data = - await Permission.microphone.request(); + await Permission.microphone.request(); if (Platform.isAndroid) { isShowVoiceOverLay = true; EventBusManager.fire(PermissionClose()); @@ -629,7 +628,7 @@ class _TIMTextFieldLayoutNarrowState : TextInputAction .send, onEditingComplete: () { - widget.onSubmitted(); + widget.onSubmitted(); if (showKeyboard) { widget.focusNode .requestFocus(); @@ -751,9 +750,10 @@ class _TIMTextFieldLayoutNarrowState } getImageFile(); }, - child: - Opacity(opacity: 0.75, - child: Image.asset(getMsgImage('photo'), width: 40.sp)), + child: Opacity( + opacity: 0.75, + child: Image.asset(getMsgImage('photo'), + width: 40.sp)), ), GestureDetector( onTap: () { @@ -764,8 +764,9 @@ class _TIMTextFieldLayoutNarrowState } getTakeImageFile(); }, - child: Opacity(opacity: 0.75, - child: Image.asset(getMsgImage('take_photo'), + child: Opacity( + opacity: 0.75, + child: Image.asset(getMsgImage('take_photo'), width: 40.sp), ), ), @@ -792,7 +793,8 @@ class _TIMTextFieldLayoutNarrowState } getVideoFile(ImageSource.gallery); }, - child: Opacity(opacity: 0.75, + child: Opacity( + opacity: 0.75, child: Image.asset(getMsgImage('icon_video'), width: 40.sp), ), @@ -806,7 +808,8 @@ class _TIMTextFieldLayoutNarrowState } getVideoFile(ImageSource.camera); }, - child: Opacity(opacity: 0.75, + child: Opacity( + opacity: 0.75, child: Image.asset(getMsgImage('icon_video_camera'), width: 40.sp), ), @@ -864,17 +867,19 @@ class _TIMTextFieldLayoutNarrowState _showIsCancelBlackDialog(context); return; } - var reulst1 = - await DioManager.instance.get(url: Api.canMsgRandOne + widget.conversationID.split('_').last); + var reulst1 = await DioManager.instance.get( + url: Api.canMsgRandOne + + widget.conversationID.split('_').last); if (reulst1['code'] == 200) { - var reulst = - await DioManager.instance.get(url: Api.msgRandOne); + var reulst = await DioManager.instance + .get(url: Api.msgRandOne); String text = reulst['data']; var result = await widget.model.sendTextMessage( text: text, convID: widget.conversationID, convType: ConvType.c2c); - sendHotAction(1, widget.conversationID.split('_').last); + sendHotAction( + 1, widget.conversationID.split('_').last); } else { showOKToast(reulst1['msg']); } @@ -896,7 +901,9 @@ class _TIMTextFieldLayoutNarrowState enableDrag: false); }), if (userInfoBean != null && logic.isProd) - userInfoBean!.contact.isNotEmpty ? chatWxActionWidget() : chatWantWxActionWidget() + userInfoBean!.contact.isNotEmpty + ? chatWxActionWidget() + : chatWantWxActionWidget() ], ), ), @@ -908,7 +915,10 @@ class _TIMTextFieldLayoutNarrowState } opacityWidget(Widget child) { - return Opacity(opacity: 0.75,child: widget,); + return Opacity( + opacity: 0.75, + child: widget, + ); } chatActionWidget(String img, String action, GestureTapCallback onTap) { @@ -931,7 +941,8 @@ class _TIMTextFieldLayoutNarrowState child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - Image.asset( getMsgImage(img), + Image.asset( + getMsgImage(img), width: 20.sp, ), SizedBox( @@ -947,12 +958,15 @@ class _TIMTextFieldLayoutNarrowState ); } - chatWantWxActionWidget() { - double textWidth = boundingTextSize(Get.context!, userInfoBean!.contact!, TextStyle(color: Colors.white, fontSize: 16.sp)).width; + double textWidth = boundingTextSize(Get.context!, userInfoBean!.contact!, + TextStyle(color: Colors.white, fontSize: 16.sp)) + .width; return GestureDetector( onTap: () async { - var result = await DioManager.instance.get(url: Api.noticeWxNum + userInfoBean!.id.toString(),); + var result = await DioManager.instance.get( + url: Api.noticeWxNum + userInfoBean!.id.toString(), + ); if (result['code'] == 200) { showOKToast('已提醒对方填写'); } else { @@ -960,7 +974,7 @@ class _TIMTextFieldLayoutNarrowState } }, child: Container( - width:115.sp, + width: 115.sp, height: 28.sp, margin: EdgeInsets.only(right: 4.sp), alignment: Alignment.center, @@ -990,7 +1004,6 @@ class _TIMTextFieldLayoutNarrowState '想要联系方式', style: TextStyle(color: Colors.white, fontSize: 13.sp), ), - ], )), ), @@ -998,17 +1011,24 @@ class _TIMTextFieldLayoutNarrowState } chatWxActionWidget() { - double textWidth = boundingTextSize(Get.context!, userInfoBean!.contact!, TextStyle(color: Colors.white, fontSize: 16.sp)).width; + double textWidth = boundingTextSize(Get.context!, userInfoBean!.contact!, + TextStyle(color: Colors.white, fontSize: 16.sp)) + .width; return GestureDetector( onTap: () async { - if (unLockWxNum != 1) { - var result = await DioManager().post(url: Api.unlockStatus,params: {'targetUserId':userInfoBean!.id!}); + if (unLockWxNum != 1) { + var result = await DioManager().post( + url: Api.unlockStatus, + params: {'targetUserId': userInfoBean!.id!}); if (result['code'] == 200) { int price = result['data']['unlockPrice']; int residueUnlockNum = result['data']['residueUnlockNum']; if (price > 0 && (residueUnlockNum == -1 || residueUnlockNum > 0)) { - Get.bottomSheet(UnlockWxTip(userInfoBean!.id.toString(), userInfoBean!.avatar,false), - isScrollControlled: true, enableDrag: false) + Get.bottomSheet( + UnlockWxTip(userInfoBean!.id.toString(), + userInfoBean!.avatar, false), + isScrollControlled: true, + enableDrag: false) .then((value) { if (value != null) { sendHotAction(3, userInfoBean!.id.toString()); @@ -1016,24 +1036,31 @@ class _TIMTextFieldLayoutNarrowState } }); } else if (price > 0) { - Get.bottomSheet(UnlockWxTip(userInfoBean!.id.toString(), userInfoBean!.avatar,true), - isScrollControlled: true, enableDrag: true) + Get.bottomSheet( + UnlockWxTip(userInfoBean!.id.toString(), + userInfoBean!.avatar, true), + isScrollControlled: true, + enableDrag: true) .then((value) { if (value != null) { loadUserData(); sendHotAction(3, userInfoBean!.id.toString()); } }); - } else { - var result = await DioManager() - .post(url: Api.unlockWx, params: {'targetUserId': userInfoBean!.id}); + } else { + var result = await DioManager().post( + url: Api.unlockWx, + params: {'targetUserId': userInfoBean!.id}); if (result['code'] == 200) { showOKToast('解锁成功'); sendHotAction(3, userInfoBean!.id.toString()); loadUserData(); } else { - Get.bottomSheet(UnlockWxTip(userInfoBean!.id.toString(), userInfoBean!.avatar,true), - isScrollControlled: true, enableDrag: false) + Get.bottomSheet( + UnlockWxTip(userInfoBean!.id.toString(), + userInfoBean!.avatar, true), + isScrollControlled: true, + enableDrag: false) .then((value) { if (value != null) { loadUserData(); @@ -1046,7 +1073,8 @@ class _TIMTextFieldLayoutNarrowState } }, child: Container( - width: textWidth + (userInfoBean!.contact!.contains('*')? 50.sp : 30.sp), + width: + textWidth + (userInfoBean!.contact!.contains('*') ? 50.sp : 30.sp), height: 28.sp, margin: EdgeInsets.only(right: 4.sp), alignment: Alignment.center, @@ -1066,7 +1094,11 @@ class _TIMTextFieldLayoutNarrowState width: 4.sp, ), Image.asset( - getMineImage(userInfoBean!.contactType! == 1 ? 'phone_icon' : userInfoBean!.contactType! == 3 ? 'qq' : 'wx'), + getMineImage(userInfoBean!.contactType! == 1 + ? 'phone_icon' + : userInfoBean!.contactType! == 3 + ? 'qq' + : 'wx'), width: 20.sp, ), SizedBox( @@ -1100,24 +1132,21 @@ class _TIMTextFieldLayoutNarrowState int code = data['code']; if (code == 200) { - try { - var result = - await DioManager.instance.get(url: Api.adImstate + widget.conversationID.split('_').last); - if (result['code'] == 21201) { - Get.bottomSheet( - Scaffold( - backgroundColor: Colors.transparent, - body: Open_vip_tipPage(false,'chat'), - ), - isScrollControlled: true, - enableDrag: false); - imStatusOK = false; - return false; - } - } catch (e) { - - - } + try { + var result = await DioManager.instance + .get(url: Api.adImstate + widget.conversationID.split('_').last); + if (result['code'] == 21201) { + Get.bottomSheet( + Scaffold( + backgroundColor: Colors.transparent, + body: Open_vip_tipPage(false, 'chat'), + ), + isScrollControlled: true, + enableDrag: false); + imStatusOK = false; + return false; + } + } catch (e) {} imStatusOK = true; } else { @@ -1125,7 +1154,7 @@ class _TIMTextFieldLayoutNarrowState Get.bottomSheet( Scaffold( backgroundColor: Colors.transparent, - body: Open_vip_tipPage(false,'chat'), + body: Open_vip_tipPage(false, 'chat'), ), isScrollControlled: true, enableDrag: false); @@ -1160,20 +1189,29 @@ class _TIMTextFieldLayoutNarrowState if (widget.userId?.contains('qpqz_prod_10_') ?? false) { return true; } - var data = - await DioManager.instance.get(url: Api.getIsVips,params: {'plate':plate,'targetId':widget.userId!.split('_').last}); + var data = await DioManager.instance.get( + url: Api.getIsVips, + params: {'plate': plate, 'targetId': widget.userId!.split('_').last}); if (data['code'] == 200) { isVip = !data['data']; } if (!isVip) { - showOKToast(plate== 5 ? '开通会员之后才能发送语音' : (plate == 1 || plate == 3) ? '开通会员之后才能发送图片' : '开通会员之后才能发送视频'); - String source = plate== 5 ? 'chat_send_voice' : (plate == 1 || plate == 3) ? 'chat_send_photo' : 'chat_send_video'; + showOKToast(plate == 5 + ? '开通会员之后才能发送语音' + : (plate == 1 || plate == 3) + ? '开通会员之后才能发送图片' + : '开通会员之后才能发送视频'); + String source = plate == 5 + ? 'chat_send_voice' + : (plate == 1 || plate == 3) + ? 'chat_send_photo' + : 'chat_send_video'; Get.bottomSheet( Scaffold( backgroundColor: Colors.transparent, - body: Open_vip_tipPage(false,source), + body: Open_vip_tipPage(false, source), ), isScrollControlled: true, enableDrag: false); @@ -1184,8 +1222,6 @@ class _TIMTextFieldLayoutNarrowState return isVip; } - - addChatRecord(String msgContent, String msgId, String sendTime) async { String str = DateTime.now().toString().split('.').first; @@ -1213,7 +1249,6 @@ class _TIMTextFieldLayoutNarrowState await requestStoragePermission(); } - XFile? pickedFile; String? thumbnailPath; // 声明 thumbnailPath 变量 @@ -1298,7 +1333,7 @@ class _TIMTextFieldLayoutNarrowState if (!isOK) { return; } - checkPhotosStatus(); + checkPhotosStatus(); try { final XFile? pickedFile = await _picker.pickImage( source: ImageSource.gallery, @@ -1432,7 +1467,7 @@ class _TIMTextFieldLayoutNarrowState child: Text( "是否解除拉黑", style: - TextStyle(color: Colors.white, fontSize: 16.sp), + TextStyle(color: Colors.white, fontSize: 16.sp), ), ), Container( @@ -1495,14 +1530,16 @@ class _TIMTextFieldLayoutNarrowState onTap: () async { Get.back(); var data = await DioManager.instance.post( - url: '${Api.setBlock + widget.conversationID.split('_').last}/block', params: {'status': '0'}); + url: + '${Api.setBlock + widget.conversationID.split('_').last}/block', + params: {'status': '0'}); var bean = BaseResponse.fromJson( data, - (jsonData) => jsonData, + (jsonData) => jsonData, ); if (bean.isSuccess()) { final FriendshipServices _friendshipServices = - serviceLocator(); + serviceLocator(); isBlack = false; } showOKToast(bean.msg); @@ -1559,17 +1596,13 @@ class _TIMTextFieldLayoutNarrowState userInfoBean = bean.data.user; unLockWxNum = userInfoBean!.contact!.contains('*') ? 0 : 1; setState(() {}); - } catch (e) { - - } - + } catch (e) {} } } } - class ChatFuncAction { int index; String imId; - ChatFuncAction(this.index,this.imId); -} \ No newline at end of file + ChatFuncAction(this.index, this.imId); +} diff --git a/circle_app/lib/circle_app/chat/widget/initmacy_dialog.dart b/circle_app/lib/circle_app/chat/widget/initmacy_dialog.dart index 4bb9e0e..dfa0a82 100644 --- a/circle_app/lib/circle_app/chat/widget/initmacy_dialog.dart +++ b/circle_app/lib/circle_app/chat/widget/initmacy_dialog.dart @@ -79,7 +79,8 @@ class _InitmacyDialogState extends State { child: Container( height: 40.sp, decoration: BoxDecoration( - color: AppColor.bgColor, + gradient: LinearGradient( + colors: [Color(0xFF132B40), Color(0xFF251240)]), borderRadius: BorderRadius.only( topLeft: Radius.circular(10.sp), topRight: Radius.circular(10.sp))), @@ -87,7 +88,6 @@ class _InitmacyDialogState extends State { alignment: Alignment.centerLeft, children: [ Container(width: Get.width, height: 40.sp), - // "intimacy" -> 2315 Container( margin: EdgeInsets.only(left: 110.sp), child: Text( @@ -145,18 +145,26 @@ class _InitmacyDialogState extends State { ), Container( height: 10.sp, - color: AppColor.bgColor, + decoration: BoxDecoration( + gradient: LinearGradient( + colors: [Color(0xFF132B40), Color(0xFF251240)]), + ), ), Container( - color: AppColor.bgColor, + // color: AppColor.bgColor, + decoration: BoxDecoration( + gradient: LinearGradient( + colors: [Color(0xFF132B40), Color(0xFF251240)]), + ), child: Column( children: [ Container( margin: EdgeInsets.all(10.sp), padding: EdgeInsets.all(10.sp), decoration: BoxDecoration( - gradient: LinearGradient( - colors: [Color(0xFF132B40), Color(0xFF251240)]), + color: AppColor.bgColor, + // gradient: LinearGradient( + // colors: [Color(0xFF132B40), Color(0xFF251240)]), borderRadius: BorderRadius.circular(10.sp)), child: Column( children: [ @@ -295,7 +303,10 @@ class _InitmacyDialogState extends State { ), Expanded( child: Container( - color: AppColor.bgColor, + decoration: BoxDecoration( + gradient: LinearGradient( + colors: [Color(0xFF132B40), Color(0xFF251240)]), + ), child: SingleChildScrollView( child: Column( // rewardConfs @@ -306,7 +317,10 @@ class _InitmacyDialogState extends State { ), )), Container( - color: AppColor.bgColor, + decoration: BoxDecoration( + gradient: LinearGradient( + colors: [Color(0xFF132B40), Color(0xFF251240)]), + ), height: 10.sp + MediaQuery.of(context).padding.bottom, ) ], @@ -319,7 +333,7 @@ class _InitmacyDialogState extends State { actionWidget(Map info) { return Container( - color: AppColor.bgColor, + // color: AppColor.bgColor, padding: EdgeInsets.only(top: 20.sp, left: 15.sp, right: 15.sp), child: Row( children: [ diff --git a/circle_app/lib/circle_app/circle/widgets/info_list_view.dart b/circle_app/lib/circle_app/circle/widgets/info_list_view.dart index 7cd6ec0..b47040f 100644 --- a/circle_app/lib/circle_app/circle/widgets/info_list_view.dart +++ b/circle_app/lib/circle_app/circle/widgets/info_list_view.dart @@ -1175,7 +1175,6 @@ class InfoListViewState extends State with AutomaticKeepAliveClien SizedBox( height: 72.sp, child: Row( - // mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ GestureDetector( onTap: ()async { @@ -1492,6 +1491,7 @@ class InfoListViewState extends State with AutomaticKeepAliveClien padding: EdgeInsets.only(left: 12.sp, right: 12.sp), child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox( height: 72.sp, diff --git a/circle_app/lib/circle_app/circle/widgets/new_people.dart b/circle_app/lib/circle_app/circle/widgets/new_people.dart index 931e93e..3b86270 100644 --- a/circle_app/lib/circle_app/circle/widgets/new_people.dart +++ b/circle_app/lib/circle_app/circle/widgets/new_people.dart @@ -529,9 +529,9 @@ class _NewPeopleItemState extends State { // 新人报道(7天内)-在n个圈子发布n喊话—最新加入了「**圈」-填写了联系方式-成为「**榜榜首」-绑定了「**」关系 item.vip == 2 - ? '成为了「年VIP」' + ? '通过开通年度会员成为「年VIP」' : item.isBacker == 1 - ? '通过金主认证' + ? '通过充值小票成为「金主」' : item.lastAgentInterest .isNotEmpty ? '最近代理了「${item.lastAgentInterest['title']}」并收到打赏' @@ -556,7 +556,7 @@ class _NewPeopleItemState extends State { 1 ? '填写了联系方式' : item.lastRankTopDesc.isNotEmpty - ? '成为「${item.lastRankTopDesc}」' + ? '通过冲榜成为「${item.lastRankTopDesc}」' : '绑定了「${item.lastUserRelation}」关系', style: TextStyle( diff --git a/circle_app/lib/circle_app/circle/widgets/video_item.dart b/circle_app/lib/circle_app/circle/widgets/video_item.dart index ef5c151..45f6037 100644 --- a/circle_app/lib/circle_app/circle/widgets/video_item.dart +++ b/circle_app/lib/circle_app/circle/widgets/video_item.dart @@ -20,6 +20,7 @@ class _VideoItemWidgetState extends State { Widget build(BuildContext context) { return Container( // color: Colors.red, + width: Get.width - 120.sp, alignment: Alignment.topLeft, child: GestureDetector( diff --git a/circle_app/lib/circle_app/home/logic.dart b/circle_app/lib/circle_app/home/logic.dart index 3296de5..8f1ca73 100644 --- a/circle_app/lib/circle_app/home/logic.dart +++ b/circle_app/lib/circle_app/home/logic.dart @@ -286,18 +286,19 @@ class HomeLogic extends GetxController with WidgetsBindingObserver { logic.update(); } else if (int.parse(event) == 8) { //有新的喊话 + Map jump = jsonDecode(jsonData['content']); + if (jump.containsKey('jumpInfo')) { + Map jumpInfo = jsonDecode(jump['jumpInfo']); + if (jumpInfo['scene'] == 'receive_user_welfare' || jumpInfo['scene'] == + 'watch_free_castle_gift' || jumpInfo['scene'] == 'visit_big_backer') { + EventBusManager.fire(CallOutAtionTipClass(jump)); + } + } + if (Get.isRegistered()) { World_call_outLogic logic = Get.find(); logic.isNewMsg = true; logic.update(); - Map jump = jsonDecode(jsonData['content']); - if (jump.containsKey('jumpInfo')) { - Map jumpInfo = jsonDecode(jump['jumpInfo']); - if (jumpInfo['scene'] == 'receive_user_welfare' || jumpInfo['scene'] == - 'watch_free_castle_gift') { - EventBusManager.fire(CallOutAtionTipClass(jump)); - } - } if (jump['content'].toString().contains('一个福袋')) { logic.loadBannerData(); @@ -555,7 +556,7 @@ class HomeLogic extends GetxController with WidgetsBindingObserver { data['data']['account_id'].toString(), data['data']['user_sig']); accountId = data['data']['account_id'].toString(); } else { - if (Get.currentRoute != Routes.Login) { + if (Get.currentRoute != Routes.Login || data['code'] > 5000) { getIMData(); } } @@ -752,7 +753,7 @@ class HomeLogic extends GetxController with WidgetsBindingObserver { } void awaitShowLikeRecomandDialog() { - // Future.delayed(Duration(seconds: 1), () async { + // Future.delayed(Duration(seconds: 30), () async { // var data = await DioManager.instance.get( // url: Api.recommendLikeList, // ); diff --git a/circle_app/lib/circle_app/home/view.dart b/circle_app/lib/circle_app/home/view.dart index 92de3fa..bb6f1ec 100644 --- a/circle_app/lib/circle_app/home/view.dart +++ b/circle_app/lib/circle_app/home/view.dart @@ -61,6 +61,10 @@ class _HomePageState extends State vsync: this, initialIndex: 0, animationDuration: Duration.zero); + addSub(); + } + + void addSub() { sub = EventBusManager.on().listen((event) { var info = event.info; showGiftButtonOverlay(context!, info['msg'], info['fromUser'], info['toUser'], () { @@ -121,8 +125,8 @@ class _HomePageState extends State sub1.cancel(); giftAnimationNotifySub.cancel(); callOutActionNotifySub.cancel(); - // permissionNotifySub.canel(); - + permissionNotifySub.cancel(); + permissionCloseNotifySub.cancel(); routeObserver.unsubscribe(this); } @@ -341,6 +345,7 @@ class _HomePageState extends State void showFloatingCallOutActionOverlay( Map info ) { + if (Get.currentRoute == Routes.Chat) return; OverlayState? overlayState = Overlay.of(context); late OverlayEntry overlayEntry; bool showMessage = false; @@ -385,15 +390,18 @@ class _HomePageState extends State try { overlayEntry!.remove(); } catch (e) {} - - Get.until((route) => route.isFirst); - logic.updateIndex(2); - World_call_outLogic calloutLogic = Get.find(); - calloutLogic.isNewMsg = false; - calloutLogic.index = 1; - calloutLogic.isMore = true; - calloutLogic.refreshController.resetNoData(); - calloutLogic.loadData(); + if (action == '立即拜访') { + Get.toNamed(Routes.UserInfoPage,arguments:info['userId'].toString()); + } else { + Get.until((route) => route.isFirst); + logic.updateIndex(2); + World_call_outLogic calloutLogic = Get.find(); + calloutLogic.isNewMsg = false; + calloutLogic.index = 1; + calloutLogic.isMore = true; + calloutLogic.refreshController.resetNoData(); + calloutLogic.loadData(); + } }, child: Container( width: Get.width - 8, @@ -412,40 +420,29 @@ class _HomePageState extends State crossAxisAlignment: CrossAxisAlignment.center, // direction: Axis.vertical, children: [ - GestureDetector( - onTap: () { - countdownTimer.cancel(); - try { - overlayEntry!.remove(); - } catch (e) {} - // "userId" -> 30629 - Get.toNamed(Routes.UserInfoPage,arguments:info['userId'].toString()); - }, - child: Row( - children: [ - ClipOval( - child: CachedImg( - fit: BoxFit.cover, - // "avatarUrl" -> "https://qiniuyun.ikuayou.com/ky_user_info_avatar/202401/sk1Y2_pT52gc1L3vimage_picker_82A96698-792D-4..." - imageUrl: info['avatarUrl'], - width: 30.sp, - height: 30.sp, + Row( + children: [ + ClipOval( + child: CachedImg( + fit: BoxFit.cover, + imageUrl: info['avatarUrl'], + width: 30.sp, + height: 30.sp, + ), + ), + SizedBox(width: 2.sp,), + Container( + // width: 70.sp, + child: Text( + info['nickname'], + overflow: TextOverflow.ellipsis, + style: TextStyle( + color: AppColor.mainColor, + fontSize: 14.sp, ), ), - SizedBox(width: 2.sp,), - Container( - // width: 70.sp, - child: Text( - info['nickname'], - overflow: TextOverflow.ellipsis, - style: TextStyle( - color: AppColor.mainColor, - fontSize: 14.sp, - ), - ), - ), - ], - ), + ), + ], ), Container( // width: 70.sp, diff --git a/circle_app/lib/circle_app/login/complete_material/logic.dart b/circle_app/lib/circle_app/login/complete_material/logic.dart index 9150e0d..2dc0d98 100644 --- a/circle_app/lib/circle_app/login/complete_material/logic.dart +++ b/circle_app/lib/circle_app/login/complete_material/logic.dart @@ -1,4 +1,3 @@ - import 'dart:convert'; import 'package:app_settings/app_settings.dart'; @@ -30,11 +29,10 @@ class Complete_materialLogic extends GetxController { @override void onReady() { // TODO: implement onReady - // FlutterNativeSplash.remove(); + // FlutterNativeSplash.remove(); super.onReady(); - - } + final Complete_materialState state = Complete_materialState(); final ImagePicker _picker = ImagePicker(); var type = Get.arguments ?? ""; @@ -49,7 +47,7 @@ class Complete_materialLogic extends GetxController { int unLockWxNum = 0; Map wxStatusInfo = {}; - + Map wxInfo = {}; late ConfigBean configBean; List numbers = []; @@ -63,7 +61,7 @@ class Complete_materialLogic extends GetxController { List provinceList = []; - List genderTagList = [];//你想认识 + List genderTagList = []; //你想认识 List watchGenderList = []; Map cityMap = {}; @@ -73,16 +71,16 @@ class Complete_materialLogic extends GetxController { FlutterNativeSplash.remove(); await loadCofigData(); getCityList(); - if(type!=''){ + if (type != '') { loadWXEditStatus(); var data = await DioManager.instance.get(url: Api.getUserInfo); var bean = BaseResponse.fromJson( data, (data) => ResponseBean.fromJson(data)); - if(bean.isSuccess()){ + if (bean.isSuccess()) { unLockWxNum = bean.data.unLockWxNum; userInfoBean = bean.data.user; - state.wxEditingController.text = userInfoBean!.wx_num ; + state.wxEditingController.text = userInfoBean!.wx_num; state.nickName = userInfoBean!.nickname; state.sex = getGenderStr(userInfoBean!.gender); state.genderId = userInfoBean!.gender.toString(); @@ -97,7 +95,6 @@ class Complete_materialLogic extends GetxController { element.isSelect = true; } }); - } state.orientationId = userInfoBean!.orientation.toString(); state.textEditingController.text = userInfoBean!.nickname; @@ -105,50 +102,57 @@ class Complete_materialLogic extends GetxController { state.descEditingController.text = userInfoBean!.signature; headUrl = userInfoBean!.avatar; userInfoBean!.interests.forEach((element) { - numbers.add(MyConfigData(element.id.toString(),element.title,false)); + numbers + .add(MyConfigData(element.id.toString(), element.title, false)); }); + await loadMyWxInfoData(); update(); - // state.nickName = userInfoBean!.nickname; - }else{ + // state.nickName = userInfoBean!.nickname; + } else { showOKToast(bean.msg); } - } else { watchGenderList[1].isSelect = true; update(); } + } + loadMyWxInfoData() async { + var data = + await DioManager.instance.get(url: Api.mycontactConf, params: {}); + if (data['code'] == 200) { + wxInfo = data['data']; - + state.wxEditingController.text = wxInfo['contact'] ?? ''; + contactType = wxInfo['contactType'] ?? 2; + } } loadWXEditStatus() async { - var data = - await DioManager.instance.get(url: Api.checkWxNumState,); + var data = await DioManager.instance.get( + url: Api.checkWxNumState, + ); if (data['code'] == 200) { - // code 200 直接跳填微信,不提示,4000 不让填写,32100 弹返回的提示 - // - // BAN_ACTION(4000, "用户当前操作被禁止"), - // - // NOTICE_UPDATE_WXNUM(32100, "填写/更新微信需要消耗{}小票哦"); - + // code 200 直接跳填微信,不提示,4000 不让填写,32100 弹返回的提示 + // + // BAN_ACTION(4000, "用户当前操作被禁止"), + // + // NOTICE_UPDATE_WXNUM(32100, "填写/更新微信需要消耗{}小票哦"); } else { wxStatusInfo['${data['code']}'] = data['msg']; } } - loadCofigData() async { + loadCofigData() async { var data = await DioManager.instance.get(url: Api.getqiniuToken, params: {}); var bean = BaseResponse.fromJson( data, (data) => QnTokenData.fromJson(data)); - if(bean.isSuccess()){ + if (bean.isSuccess()) { quToken = bean.data!.token.toString(); } - - var data1 = - await DioManager.instance.get(url: Api.getConfig, params: {}); + var data1 = await DioManager.instance.get(url: Api.getConfig, params: {}); var bean1 = BaseResponse.fromJson( data1, (data1) => ConfigBean.fromJson(data1)); configBean = bean1.data!; @@ -192,36 +196,32 @@ class Complete_materialLogic extends GetxController { } Future getImageFile() async { - - checkPhotosStatus(); try { final XFile? pickedFile = await _picker.pickImage( source: ImageSource.gallery, ); - if(null==pickedFile){ + if (null == pickedFile) { return; } SmartDialog.showLoading(msg: '上传中'); - uploadImage(quToken,pickedFile!,ImgPath.USER_INFO_AVATAR,(result){ + uploadImage(quToken, pickedFile!, ImgPath.USER_INFO_AVATAR, (result) { SmartDialog.dismiss(force: true); headUrl = result; update(); }); - } catch (e) { SmartDialog.dismiss(); print(e); PlatformException? exception = e as PlatformException?; // invalid_image - if(exception!.code == 'invalid_image') { + if (exception!.code == 'invalid_image') { showOKToast('不支持的图片格式,请另外选择图片'); } } } - checkInfo() async { FocusManager.instance.primaryFocus?.unfocus(); if (headUrl == '') { @@ -232,10 +232,10 @@ class Complete_materialLogic extends GetxController { showOKToast('请输入您的昵称'); focusNickNode.requestFocus(); return; - } else if(state.textEditingController.text.length < 2){ + } else if (state.textEditingController.text.length < 2) { showOKToast('昵称不能低于两个字'); return; - } else if(state.textEditingController.text.length > 6){ + } else if (state.textEditingController.text.length > 6) { showOKToast('昵称最多输入6个字'); return; } @@ -258,7 +258,7 @@ class Complete_materialLogic extends GetxController { return; } else if (numbers.isEmpty) { showOKToast('请选择您的兴趣圈子'); - return; + return; } else if (state.descEditingController.text.isEmpty) { showOKToast('请输入您的交友宣言'); focusNode.requestFocus(); @@ -267,7 +267,7 @@ class Complete_materialLogic extends GetxController { showOKToast('您的交友宣言太短'); focusNode.requestFocus(); return; - } else if (state.descEditingController.text.length > 40) { + } else if (state.descEditingController.text.length > 40) { showOKToast('您的交友宣言超出40个字啦'); focusNode.requestFocus(); return; @@ -276,17 +276,17 @@ class Complete_materialLogic extends GetxController { genderTagList.clear(); List tagIds = []; watchGenderList.forEach((element) { - if(element.isSelect){ + if (element.isSelect) { tagIds.add(element.id); genderTagList.add(element.id); } }); - if(genderTagList.isEmpty){ + if (genderTagList.isEmpty) { // showOKToast("请点击选择你想认识的人"); // return; } - // LatLng location = await getLocation(); + // LatLng location = await getLocation(); List interestsList = []; numbers.forEach((element) { interestsList.add(element.id); @@ -294,7 +294,7 @@ class Complete_materialLogic extends GetxController { if (state.brithday.isEmpty) { var date = PDuration.now(); PDuration p = - PDuration(year: date.year! - 20, month: date.month, day: date.day); + PDuration(year: date.year! - 20, month: date.month, day: date.day); String month = p.month! < 10 ? '0${p.month!}' : p.month!.toString(); String day = p.day! < 10 ? '0${p.day!}' : p.day!.toString(); @@ -302,19 +302,36 @@ class Complete_materialLogic extends GetxController { state.brithday = time; } - if (state.wxEditingController.text.isNotEmpty) { bool isPass = false; - if (state.wxEditingController.text.length == 11) { - RegExp exp = RegExp( - r'^((13[0-9])|(14[0-9])|(15[0-9])|(16[0-9])|(17[0-9])|(18[0-9])|(19[0-9]))\d{8}$'); - isPass = exp.hasMatch(state.wxEditingController.text); - } + if (contactType == 2) { + if (state.wxEditingController.text.length == 11) { + RegExp exp = RegExp( + r'^((13[0-9])|(14[0-9])|(15[0-9])|(16[0-9])|(17[0-9])|(18[0-9])|(19[0-9]))\d{8}$'); + isPass = exp.hasMatch(state.wxEditingController.text); + } - if (state.wxEditingController.text.isNotEmpty && !isPass) { - RegExp wxReg = RegExp(r'^[-_a-zA-Z][-_a-zA-Z0-9]{5,19}$'); - if (!wxReg.hasMatch(state.wxEditingController.text)) { - showOKToast('请输入正确的微信号'); + if (state.wxEditingController.text.isNotEmpty && !isPass) { + RegExp wxReg = RegExp(r'^[-_a-zA-Z][-_a-zA-Z0-9]{5,19}$'); + if (!wxReg.hasMatch(state.wxEditingController.text)) { + showOKToast('请输入正确的微信号'); + return; + } + } + } else if (contactType == 3) { + isPass = isValidQQ(state.wxEditingController.text); + if (!isPass) { + showOKToast('请输入正确的QQ号'); + return; + } + } else if (contactType == 1) { + if (state.wxEditingController.text.length == 11) { + RegExp exp = RegExp( + r'^((13[0-9])|(14[0-9])|(15[0-9])|(16[0-9])|(17[0-9])|(18[0-9])|(19[0-9]))\d{8}$'); + isPass = exp.hasMatch(state.wxEditingController.text); + } + if (!isPass) { + showOKToast('请输入正确的手机号'); return; } } @@ -324,9 +341,12 @@ class Complete_materialLogic extends GetxController { return; } + Map params = { + "hideContact": wxInfo.containsKey('hideContact') ? wxInfo['hideContact'] : 0, + 'contactType':contactType, + "contact": state.wxEditingController.text}; - - var result = await DioManager().post(url: Api.updateWxNum,params: {'type':2,'wxNum':state.wxEditingController.text}); + var result = await DioManager().postBody(url: Api.confset,params: params); if (result['code'] == 31201) { // showToast. showOKToast(result['msg']); @@ -340,16 +360,15 @@ class Complete_materialLogic extends GetxController { print(result); } - bool isNickOK = await checkText(state.textEditingController,'昵称'); + bool isNickOK = await checkText(state.textEditingController, '昵称'); if (!isNickOK) { return; } - bool isDescOk = await checkText(state.descEditingController,'交友宣言'); + bool isDescOk = await checkText(state.descEditingController, '交友宣言'); if (!isDescOk) { return; } - var data = await DioManager.instance.put(url: Api.UpdataUserInfo, params: { 'avatar_url': headUrl, 'birthday': state.brithday, @@ -357,8 +376,8 @@ class Complete_materialLogic extends GetxController { 'role': state.roleId, //Int 角色 'interests': interestsList, //兴趣 'orientation': state.orientationId, //Int 爱好 - 'city':state.city.isNotEmpty ? state.city : '上海市', - 'orientations':genderTagList.isEmpty ? [2] : genderTagList, + 'city': state.city.isNotEmpty ? state.city : '上海市', + 'orientations': genderTagList.isEmpty ? [2] : genderTagList, // 'lat': location.latitude, // 'lng': location.longitude, 'nickname': state.textEditingController.text.trim(), @@ -367,7 +386,7 @@ class Complete_materialLogic extends GetxController { var bean = BaseResponse.fromJson(data, (data) => data); if (bean.code == 200) { Get.offAllNamed(Routes.Home); - }else{ + } else { showOKToast(bean.msg); } } @@ -378,11 +397,11 @@ class Complete_materialLogic extends GetxController { showOKToast('请输入您的昵称'); focusNickNode.requestFocus(); return; - } else if(state.textEditingController.text.length>6){ + } else if (state.textEditingController.text.length > 6) { showOKToast('昵称最多输入6个字'); focusNickNode.requestFocus(); return; - }else if (state.sex.isEmpty) { + } else if (state.sex.isEmpty) { showOKToast('请选择您的属性'); return; } else if (state.age.isEmpty) { @@ -419,40 +438,64 @@ class Complete_materialLogic extends GetxController { genderTagList.clear(); List tagIds = []; watchGenderList.forEach((element) { - if(element.isSelect){ + if (element.isSelect) { tagIds.add(element.id); genderTagList.add(element.id); } }); - if(genderTagList.isEmpty){ + if (genderTagList.isEmpty) { showOKToast("请点击选择你想认识的人"); return; } - if (state.wxEditingController.text.isNotEmpty && userInfoBean!.wx_num != state.wxEditingController.text) { + if (state.wxEditingController.text.isNotEmpty && + (userInfoBean!.wx_num != state.wxEditingController.text || contactType != (wxInfo['contactType'] ?? 2))) { bool isPass = false; - if (state.wxEditingController.text.length == 11) { - RegExp exp = RegExp( - r'^((13[0-9])|(14[0-9])|(15[0-9])|(16[0-9])|(17[0-9])|(18[0-9])|(19[0-9]))\d{8}$'); - isPass = exp.hasMatch(state.wxEditingController.text); - } + if (contactType == 2) { + if (state.wxEditingController.text.length == 11) { + RegExp exp = RegExp( + r'^((13[0-9])|(14[0-9])|(15[0-9])|(16[0-9])|(17[0-9])|(18[0-9])|(19[0-9]))\d{8}$'); + isPass = exp.hasMatch(state.wxEditingController.text); + } - if (state.wxEditingController.text.isNotEmpty && !isPass) { - RegExp wxReg = RegExp(r'^[-_a-zA-Z][-_a-zA-Z0-9]{5,19}$'); - if (!wxReg.hasMatch(state.wxEditingController.text)) { - showOKToast('请输入正确的微信号'); + if (state.wxEditingController.text.isNotEmpty && !isPass) { + RegExp wxReg = RegExp(r'^[-_a-zA-Z][-_a-zA-Z0-9]{5,19}$'); + if (!wxReg.hasMatch(state.wxEditingController.text)) { + showOKToast('请输入正确的微信号'); + return; + } + } + + } else if (contactType == 3) { + isPass = isValidQQ(state.wxEditingController.text); + if (!isPass) { + showOKToast('请输入正确的QQ号'); + return; + } + } else if (contactType == 1) { + if (state.wxEditingController.text.length == 11) { + RegExp exp = RegExp( + r'^((13[0-9])|(14[0-9])|(15[0-9])|(16[0-9])|(17[0-9])|(18[0-9])|(19[0-9]))\d{8}$'); + isPass = exp.hasMatch(state.wxEditingController.text); + } + if (!isPass) { + showOKToast('请输入正确的手机号'); return; } } - + if (wxStatusInfo.containsKey('4000')) { showOKToast(wxStatusInfo['40000']); return; } + Map params = { + "hideContact": wxInfo.containsKey('hideContact') ? wxInfo['hideContact'] : 0, + 'contactType':contactType, + "contact": state.wxEditingController.text}; - var result = await DioManager().post(url: Api.updateWxNum,params: {'type':2,'wxNum':state.wxEditingController.text}); - if (result['code'] == 31201) { + var result = await DioManager().postBody(url: Api.confset,params: params); + if (result['code'] == 10081) { // showToast. showOKToast(result['msg']); showRechargeScreenDialog('set_contact'); @@ -465,23 +508,21 @@ class Complete_materialLogic extends GetxController { print(result); } //TODO 强制获取经纬度 - // LatLng location = await getLocation(); + // LatLng location = await getLocation(); List interestsList = []; numbers.forEach((element) { interestsList.add(element.id); }); - - bool isNickOK = await checkText(state.textEditingController,'昵称'); + bool isNickOK = await checkText(state.textEditingController, '昵称'); if (!isNickOK) { return; } - bool isDescOk = await checkText(state.descEditingController,'交友宣言'); + bool isDescOk = await checkText(state.descEditingController, '交友宣言'); if (!isDescOk) { return; } - var data = await DioManager.instance.put(url: Api.UpdataUserInfo, params: { 'avatar_url': headUrl, 'birthday': state.brithday, @@ -489,8 +530,8 @@ class Complete_materialLogic extends GetxController { 'role': state.roleId, //Int 角色 'interests': interestsList, //兴趣 'orientation': state.orientationId, //Int 爱好 - 'orientations':genderTagList, - 'city':state.city, + 'orientations': genderTagList, + 'city': state.city, // 'lat': location.latitude, // 'lng': location.longitude, 'nickname': state.textEditingController.text, @@ -508,9 +549,6 @@ class Complete_materialLogic extends GetxController { mineFragment.orientation = int.parse(state.orientationId); mineFragment.update(); Get.back(); - - - } else { showOKToast(bean.msg); } @@ -562,4 +600,4 @@ class SysTag { tagName: json['tagName'], ); } -} \ No newline at end of file +} diff --git a/circle_app/lib/circle_app/login/login/logic.dart b/circle_app/lib/circle_app/login/login/logic.dart index b4e23b6..9d25346 100644 --- a/circle_app/lib/circle_app/login/login/logic.dart +++ b/circle_app/lib/circle_app/login/login/logic.dart @@ -39,9 +39,9 @@ class LoginLogic extends GetxController { // TODO: implement onInit super.onInit(); readClipboardData(); - if (!kDebugMode) { - checkNetworkUrl(); - } + // if (!kDebugMode) { + // checkNetworkUrl(); + // } SharedPreferences sharedPreferences = await SharedPreferences.getInstance(); String loginPhone = await sharedPreferences.getString(SharedPreferencesHelper.LOGINPHONE) ?? diff --git a/circle_app/lib/circle_app/minefragment/logic.dart b/circle_app/lib/circle_app/minefragment/logic.dart index 8252962..c67a3a0 100644 --- a/circle_app/lib/circle_app/minefragment/logic.dart +++ b/circle_app/lib/circle_app/minefragment/logic.dart @@ -1,6 +1,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; +import 'package:fluwx/fluwx.dart'; import 'package:get/get.dart'; import 'package:image_picker/image_picker.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; @@ -115,6 +116,9 @@ class MinefragmentLogic extends GetxController { loadDyanmicListData() async { String requestUserId = ''; HomeLogic homeLogic = Get.find(); + if (homeLogic.model == null) { + await homeLogic.loadMyInfoData(); + } requestUserId = homeLogic.model!.id.toString(); var result = await DioManager.instance.get(url: Api.userTrends, diff --git a/circle_app/lib/circle_app/minefragment/my_call_out.dart b/circle_app/lib/circle_app/minefragment/my_call_out.dart index d72f2d8..4a0d809 100644 --- a/circle_app/lib/circle_app/minefragment/my_call_out.dart +++ b/circle_app/lib/circle_app/minefragment/my_call_out.dart @@ -38,7 +38,7 @@ class _MyCallOutViewState extends State with AutomaticKeepAliveClientMixin { @override bool get wantKeepAlive => true; - HomeCallOutLogic? listsLg; + UserHomeCallOutLogic? listsLg; final RefreshController refreshController = RefreshController(); ScrollController scrollController = ScrollController(); MinefragmentLogic logic = Get.find(); @@ -70,8 +70,8 @@ class _MyCallOutViewState extends State scrollController.jumpTo(0); }); - Get.lazyPut(() => HomeCallOutLogic()); - listsLg = Get.find(); + Get.lazyPut(() => UserHomeCallOutLogic()); + listsLg = Get.find(); listsLg?.loadCallOutListData(widget.userId); listsLg!.scrollController.addListener(() { @@ -90,12 +90,12 @@ class _MyCallOutViewState extends State scrollController.dispose(); sub.cancel(); sub1.cancel(); - listsLg?.onClose(); + // listsLg?.onClose(); } @override Widget build(BuildContext context) { - return GetBuilder( + return GetBuilder( assignId: true, builder: (listLogic) { return listLogic.lists.isEmpty @@ -147,7 +147,8 @@ class _MyCallOutViewState extends State Widget descText = logic.openCallOutIdList.contains(lists.id) ? Text( lists.content!, - style: TextStyle(color: Colors.white, fontSize: 14.sp), + style: TextStyle(color: Colors.white, fontSize: 14.sp,letterSpacing: 1.3.sp, // 设置字间距,单位是像素 + height: 1.8), ) : HideText( text: lists.content!, @@ -156,7 +157,8 @@ class _MyCallOutViewState extends State : Get.width - 20.sp, additionText: '查看更多', maxLines: 15, - style: TextStyle(color: Colors.white, fontSize: 14.sp), + style: TextStyle(color: Colors.white, fontSize: 14.sp,letterSpacing: 1.3.sp, // 设置字间距,单位是像素 + height: 1.8), additionStyle: TextStyle(color: const Color(0xFFFF4DF6), fontSize: 14.sp), onTap: () { @@ -394,50 +396,56 @@ class _MyCallOutViewState extends State ), atWidget, Container( + // color: Colors.red, alignment: Alignment.topLeft, // margin: EdgeInsets.only(top: 4.sp), child: descText, ), Container( height: picHeight, + // color: Colors.blue, margin: EdgeInsets.only(top: 5.sp), child: picHeight == 200.sp ? ClipRRect( borderRadius: BorderRadius.circular(6.sp), child: VideoItemWidget(lists.album![0]!.url!)) - : GridView.builder( - controller: scrollController, - itemCount: lists.album!.length, - physics: const NeverScrollableScrollPhysics(), - gridDelegate: - SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 3, //横轴三个子widget - crossAxisSpacing: 8.sp, - mainAxisSpacing: 8.sp, - childAspectRatio: 0.8 //宽高比为1时,子widget - ), - itemBuilder: (contentxt, currentIndex) { - Album album = lists.album![currentIndex]; - return GestureDetector( - onTap: () { - var imgList = []; - for (var element in lists.album!) { - imgList.add(element.url!); - } - Get.toNamed(Routes.SwiperPage, arguments: { - 'imaglist': imgList, - 'index': currentIndex - }); - }, - child: ClipRRect( - borderRadius: BorderRadius.circular(6.sp), - child: CachedImg( - imageUrl: album.url!, - fit: BoxFit.cover, + :MediaQuery.removePadding( + removeTop: true, + context: context, + child: GridView.builder( + controller: scrollController, + itemCount: lists.album!.length, + physics: const NeverScrollableScrollPhysics(), + gridDelegate: + SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 3, //横轴三个子widget + crossAxisSpacing: 4.sp, + mainAxisSpacing: 4.sp, + childAspectRatio: 0.8 //宽高比为1时,子widget + ), + itemBuilder: (contentxt, currentIndex) { + Album album = lists.album![currentIndex]; + return GestureDetector( + onTap: () { + var imgList = []; + for (var element in lists.album!) { + imgList.add(element.url!); + } + Get.toNamed(Routes.SwiperPage, arguments: { + 'imaglist': imgList, + 'index': currentIndex + }); + }, + child: ClipRRect( + borderRadius: BorderRadius.circular(6.sp), + child: CachedImg( + imageUrl: album.url!, + fit: BoxFit.cover, + ), ), - ), - ); - }), + ); + }), + ), ), if (widget.userId.isEmpty) Container( @@ -481,7 +489,8 @@ class _MyCallOutViewState extends State Widget descText = logic.openCallOutIdList.contains(lists.id) ? Text( lists.content!, - style: TextStyle(color: Colors.white, fontSize: 14.sp), + style: TextStyle(color: Colors.white, fontSize: 14.sp,letterSpacing: 1.3.sp, // 设置字间距,单位是像素 + height: 1.8), ) : HideText( text: lists.content!, @@ -490,9 +499,11 @@ class _MyCallOutViewState extends State : Get.width - 20.sp, additionText: '查看更多', maxLines: 15, - style: TextStyle(color: Colors.white, fontSize: 14.sp), + style: TextStyle(color: Colors.white, fontSize: 14.sp,letterSpacing: 1.3.sp, // 设置字间距,单位是像素 + height: 1.8), additionStyle: TextStyle(color: const Color(0xFFFF4DF6), fontSize: 14.sp), + onTap: () { logic.openCallOutIdList.add(lists.id); setState(() {}); @@ -558,6 +569,7 @@ class _MyCallOutViewState extends State } return Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( margin: EdgeInsets.only(top: 14.sp, bottom: 10.sp), @@ -615,9 +627,10 @@ class _MyCallOutViewState extends State Container( // height: 130.sp + contentHeight(lists.content!) + picHeight, width: Get.width, - // color: Colors.blue, + padding: EdgeInsets.only(left: 12.sp, right: 12.sp), child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( height: 72.sp, @@ -733,44 +746,48 @@ class _MyCallOutViewState extends State borderRadius: BorderRadius.circular(6.sp), child: VideoItemWidget(lists.album![0].url!)) - : GridView.builder( - controller: scrollController, - // shrinkWrap: true, - itemCount: lists.album!.length, - physics: - const NeverScrollableScrollPhysics(), - gridDelegate: - SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 3, //横轴三个子widget - crossAxisSpacing: 8.sp, - mainAxisSpacing: 8.sp, - childAspectRatio: - 0.8 //宽高比为1时,子widget - ), - itemBuilder: (contentxt, currentIndex) { - Album album = lists.album![currentIndex]; - return GestureDetector( - onTap: () { - var imgList = []; - for (var element in lists.album!) { - imgList.add(element.url!); - } - Get.toNamed(Routes.SwiperPage, - arguments: { - 'imaglist': imgList, - 'index': currentIndex - }); - }, - child: ClipRRect( - borderRadius: - BorderRadius.circular(6.sp), - child: CachedImg( - imageUrl: album.url!, - fit: BoxFit.cover, + : MediaQuery.removePadding( + removeTop: true, + context: context, + child: GridView.builder( + controller: scrollController, + // shrinkWrap: true, + itemCount: lists.album!.length, + physics: + const NeverScrollableScrollPhysics(), + gridDelegate: + SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 3, //横轴三个子widget + crossAxisSpacing: 8.sp, + mainAxisSpacing: 8.sp, + childAspectRatio: + 0.8 //宽高比为1时,子widget + ), + itemBuilder: (contentxt, currentIndex) { + Album album = lists.album![currentIndex]; + return GestureDetector( + onTap: () { + var imgList = []; + for (var element in lists.album!) { + imgList.add(element.url!); + } + Get.toNamed(Routes.SwiperPage, + arguments: { + 'imaglist': imgList, + 'index': currentIndex + }); + }, + child: ClipRRect( + borderRadius: + BorderRadius.circular(6.sp), + child: CachedImg( + imageUrl: album.url!, + fit: BoxFit.cover, + ), ), - ), - ); - })) + ); + }), + )) : Container(), if (widget.userId.isEmpty) Container( @@ -1227,3 +1244,5 @@ class _MyCallOutViewState extends State } } } + + diff --git a/circle_app/lib/circle_app/msg/TIMUIKitConversation/tim_uikit_conversation.dart b/circle_app/lib/circle_app/msg/TIMUIKitConversation/tim_uikit_conversation.dart index acac05f..eeaba3a 100644 --- a/circle_app/lib/circle_app/msg/TIMUIKitConversation/tim_uikit_conversation.dart +++ b/circle_app/lib/circle_app/msg/TIMUIKitConversation/tim_uikit_conversation.dart @@ -412,10 +412,15 @@ class _TIMConversationState extends TIMUIKitState { if (end > userIdList.length) { end = userIdList.length; // 防止越界 } + try { + List dataList = (await getUserListData(userIdList.sublist(start, end))) + .whereType() + .toList(); - List dataList = await getUserListData( - userIdList.sublist(start, end)); - list.addAll(dataList); + list.addAll(dataList); + } catch (e) { + + } } return list; } else { diff --git a/circle_app/lib/circle_app/msg/view.dart b/circle_app/lib/circle_app/msg/view.dart index b3f16c0..6eb3289 100644 --- a/circle_app/lib/circle_app/msg/view.dart +++ b/circle_app/lib/circle_app/msg/view.dart @@ -113,6 +113,7 @@ class _MsgPageState extends State with AutomaticKeepAliveClientMixin { child: Swiper( autoplay: true, loop: true, + autoplayDelay: 6000, scrollDirection: Axis.vertical, itemBuilder: (BuildContext context, int index) { Map item = controller.bannerList[index]; diff --git a/circle_app/lib/circle_app/quick/view.dart b/circle_app/lib/circle_app/quick/view.dart index 1e1ffe7..780ca5a 100644 --- a/circle_app/lib/circle_app/quick/view.dart +++ b/circle_app/lib/circle_app/quick/view.dart @@ -1199,9 +1199,9 @@ class _LocationItemState extends State { // 新人报道(7天内)-在n个圈子发布n喊话—最新加入了「**圈」-填写了联系方式-成为「**榜榜首」-绑定了「**」关系 item.vip == 2 - ? '成为了「年VIP」' + ? '通过开通年度会员成为「年VIP' : item.isBacker == 1 - ? '通过金主认证' + ? '通过充值小票成为「金主」' : item.lastAgentInterest .isNotEmpty ? '最近代理了「${item.lastAgentInterest['title']}」并收到打赏' @@ -1225,7 +1225,7 @@ class _LocationItemState extends State { 1 ? '填写了联系方式' : item.lastRankTopDesc.isNotEmpty - ? '成为「${item.lastRankTopDesc}」' + ? '通过冲榜成为「${item.lastRankTopDesc}」' : '绑定了「${item.lastUserRelation}」关系', style: TextStyle( diff --git a/circle_app/lib/circle_app/userinfo/view.dart b/circle_app/lib/circle_app/userinfo/view.dart index fa516ad..1a4b030 100644 --- a/circle_app/lib/circle_app/userinfo/view.dart +++ b/circle_app/lib/circle_app/userinfo/view.dart @@ -888,6 +888,7 @@ class MyTabbedScreenState extends State ), ), ), + if (logic.relationTypeList.isNotEmpty) InkWell( onTap: () { if (Get.isRegistered()) { @@ -1128,7 +1129,7 @@ class MyTabbedScreenState extends State } return Container( alignment: Alignment.centerLeft, - padding: EdgeInsets.only(left: 0, right: 10.sp), + padding: EdgeInsets.only(left: 10.sp, right: 10.sp), height: 27.sp, child: Row( // mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -1342,7 +1343,7 @@ class MyTabbedScreenState extends State // : return Container( // margin: EdgeInsets.only( 0.sp), - padding: EdgeInsets.symmetric(horizontal: 19.sp), + padding: EdgeInsets.symmetric(horizontal: 10.sp), child: Stack( children: [ Column( @@ -1424,7 +1425,7 @@ class MyTabbedScreenState extends State controller.getImageFile(); }, child: Container( - margin: EdgeInsets.all(5.sp), + margin: EdgeInsets.all(2.5.sp), child: Image( image: AssetImage( getMineImage("icon_img_add")), @@ -1433,7 +1434,7 @@ class MyTabbedScreenState extends State ); } else { return Container( - margin: EdgeInsets.all(5.sp), + margin: EdgeInsets.all(2.5.sp), child: Center( child: _buildImageItem( controller.state.imaglist[index - 1].url, @@ -1446,7 +1447,7 @@ class MyTabbedScreenState extends State } } else { return Container( - margin: EdgeInsets.all(5.sp), + margin: EdgeInsets.all(2.5.sp), child: Center( child: _buildImageItem( controller.state.imaglist[index].urlThumb, diff --git a/circle_app/lib/circle_app/userinfo/widgets/home_call_out.dart b/circle_app/lib/circle_app/userinfo/widgets/home_call_out.dart index 71627c2..98fa3db 100644 --- a/circle_app/lib/circle_app/userinfo/widgets/home_call_out.dart +++ b/circle_app/lib/circle_app/userinfo/widgets/home_call_out.dart @@ -136,7 +136,8 @@ class _HomeCallOutViewState extends State Widget descText = logic.openCallOutIdList.contains(lists.id) ? Text( lists.content!, - style: TextStyle(color: Colors.white, fontSize: 14.sp), + style: TextStyle(color: Colors.white, fontSize: 14.sp,letterSpacing: 1.3.sp, // 设置字间距,单位是像素 + height: 1.8), ) : HideText( text: lists.content!, @@ -145,7 +146,8 @@ class _HomeCallOutViewState extends State : Get.width - 20.sp, additionText: '查看更多', maxLines: 15, - style: TextStyle(color: Colors.white, fontSize: 14.sp), + style: TextStyle(color: Colors.white, fontSize: 14.sp,letterSpacing: 1.3.sp, // 设置字间距,单位是像素 + height: 1.8), additionStyle: TextStyle(color: const Color(0xFFFF4DF6), fontSize: 14.sp), onTap: () { @@ -459,7 +461,8 @@ class _HomeCallOutViewState extends State Widget descText = logic.openCallOutIdList.contains(lists.id) ? Text( lists.content!, - style: TextStyle(color: Colors.white, fontSize: 14.sp), + style: TextStyle(color: Colors.white, fontSize: 14.sp,letterSpacing: 1.3.sp, // 设置字间距,单位是像素 + height: 1.8), ) : HideText( text: lists.content!, @@ -468,7 +471,8 @@ class _HomeCallOutViewState extends State : Get.width - 20.sp, additionText: '查看更多', maxLines: 15, - style: TextStyle(color: Colors.white, fontSize: 14.sp), + style: TextStyle(color: Colors.white, fontSize: 14.sp,letterSpacing: 1.3.sp, // 设置字间距,单位是像素 + height: 1.8), additionStyle: TextStyle(color: const Color(0xFFFF4DF6), fontSize: 14.sp), onTap: () { @@ -584,6 +588,7 @@ class _HomeCallOutViewState extends State // color: Colors.blue, padding: EdgeInsets.only(left: 12.sp, right: 12.sp), child: Column( + crossAxisAlignment:CrossAxisAlignment.start, children: [ Container( height: 72.sp, diff --git a/circle_app/lib/circle_app/userinfo/widgets/home_call_out_logic.dart b/circle_app/lib/circle_app/userinfo/widgets/home_call_out_logic.dart index 94d3732..8f41130 100644 --- a/circle_app/lib/circle_app/userinfo/widgets/home_call_out_logic.dart +++ b/circle_app/lib/circle_app/userinfo/widgets/home_call_out_logic.dart @@ -121,4 +121,9 @@ class HomeCallOutLogic extends GetxController { showOKToast('操作失败'); } } +} + + +class UserHomeCallOutLogic extends HomeCallOutLogic { + } \ No newline at end of file diff --git a/circle_app/lib/circle_app/world_call_out/logic.dart b/circle_app/lib/circle_app/world_call_out/logic.dart index 706784a..ec63c3d 100644 --- a/circle_app/lib/circle_app/world_call_out/logic.dart +++ b/circle_app/lib/circle_app/world_call_out/logic.dart @@ -181,7 +181,6 @@ class World_call_outLogic extends GetxController { } - DateTime? lastHourStartTime = null; // 记录上一个小时开始的时间 List result = []; int subIndex = -1; for (int i = 0; i < tempLists.length; i++) { diff --git a/circle_app/lib/net/api.dart b/circle_app/lib/net/api.dart index 103142d..c26fbba 100644 --- a/circle_app/lib/net/api.dart +++ b/circle_app/lib/net/api.dart @@ -638,4 +638,7 @@ class Api { //用户收入总计 static const userIncomeTotal = '/mall-service/wallet/userIncomeTotal'; + //关系邀请 + static const relationInvite = '/user-service/user/relation/invite'; + } diff --git a/circle_app/lib/net/dio_manager.dart b/circle_app/lib/net/dio_manager.dart index 16417bb..c889a87 100644 --- a/circle_app/lib/net/dio_manager.dart +++ b/circle_app/lib/net/dio_manager.dart @@ -311,8 +311,8 @@ class DioManager { } // 其他类型的错误(如协议错误、解析错误等) var info = await FlutterBugly.uploadException( - message: url + e.error.toString(), - detail: Platform.isIOS ? 'crash_attach.log' : 'extraMessage.txt', + message: url + ':' + e.error.toString(), + detail: e.message ?? '', ); print(info); return {'code': 500, 'msg': '服务器开小差了,请重试'}; @@ -324,7 +324,7 @@ class DioManager { // 其他类型的错误(如协议错误、解析错误等) var info = await FlutterBugly.uploadException( message: url + e.toString(), - detail: Platform.isIOS ? 'crash_attach.log' : 'extraMessage.txt', + detail: '', ); // 其他一些意外的报错 return {'code': 500, 'msg': '加载中...'}; diff --git a/circle_app/lib/utils/cache_img.dart b/circle_app/lib/utils/cache_img.dart index 7312ad7..a7c8352 100644 --- a/circle_app/lib/utils/cache_img.dart +++ b/circle_app/lib/utils/cache_img.dart @@ -29,11 +29,9 @@ class _CachedImgState extends State { Widget build(BuildContext context) { return CachedNetworkImage( imageUrl: widget.imageUrl, - fit: widget.fit, + fit: widget.fit ?? BoxFit.cover, width: widget.width, height: widget.height, - useOldImageOnUrlChange:true, - memCacheWidth: Get.width.toInt(), errorWidget: (context, url, error) => CachedNetworkImage( imageUrl:Api.defaultAvatar, fit: BoxFit.cover, diff --git a/circle_app/lib/utils/util.dart b/circle_app/lib/utils/util.dart index 071755d..2d7cbc2 100644 --- a/circle_app/lib/utils/util.dart +++ b/circle_app/lib/utils/util.dart @@ -1025,22 +1025,8 @@ sendApplyRelationTypeCustomMsg(String userId, String data, String desc) async { //发送邀请关系自定义消息 sendInventRelationTypeCustomMsg(String userId, String data, String desc) async { - // // 创建自定义消息 - // V2TimValueCallback createCustomMessageRes = - // await TencentImSDKPlugin.v2TIMManager - // .getMessageManager() - // .createCustomMessage( - // data: data, - // desc: desc, - // extension: 'InventRelationType', - // ); - // if (createCustomMessageRes.code == 0) { - // String? id = createCustomMessageRes.data?.id; - // // 发送自定义消息 - // EventBusManager.fire(SendCoustomMessage(createCustomMessageRes)); - // } Map info = jsonDecode(data); - var result = await DioManager.instance.post(url: Api.relationTypeApply,params: {'type':2,'relationTypeId':info['typeId'],'targetId':userId.split('_').last});//自定义extension + var result = await DioManager.instance.post(url: Api.relationInvite,params: {'type':2,'relationTypeId':info['typeId'],'targetId':userId.split('_').last});//自定义extension if (result['code'] == 200) { info['relationTypeId'] = result['data']; data = jsonEncode(info); @@ -1639,9 +1625,10 @@ pushPage(String action,String param,{String name = '',bool isShowUpdate = true}) } } else if (action == 'receive_user_welfare') { + if (Get.isRegistered()) { World_call_outLogic logic = Get.find(); logic.getWelfareDetailData(param,-1); - + } } else if (action == 'watch_free_castle_gift') { World_call_outLogic logic = Get.find(); logic.treatWatch(param); diff --git a/circle_app/lib/view/notice.dart b/circle_app/lib/view/notice.dart index 3ccb015..9628090 100644 --- a/circle_app/lib/view/notice.dart +++ b/circle_app/lib/view/notice.dart @@ -240,6 +240,7 @@ void showFloatingButtonOverlay(BuildContext context, String nickname, void showGiftButtonOverlay(BuildContext context, String content, Map sendUser, Map recevierUser, NoticeCallback noticeCallback) { + if (Get.currentRoute == Routes.Chat) return; OverlayState? overlayState = Overlay.of(context); late OverlayEntry overlayEntry; bool showMessage = false; @@ -463,6 +464,7 @@ void showGiftButtonOverlay(BuildContext context, String content, Map sendUser, void showPeopleCallOutOverlay( BuildContext context, String content, NoticeCallback noticeCallback) { if (content == null) return; + if (Get.currentRoute == Routes.Chat) return; OverlayState? overlayState = Overlay.of(context); late OverlayEntry overlayEntry; bool showMessage = false;