diff --git a/circle_app/assets/images/home/icon_vip_android.png b/circle_app/assets/images/home/icon_vip_android.png new file mode 100644 index 0000000..684becf Binary files /dev/null and b/circle_app/assets/images/home/icon_vip_android.png differ diff --git a/circle_app/ios/Podfile b/circle_app/ios/Podfile index 82b0bf3..4ff76b1 100644 --- a/circle_app/ios/Podfile +++ b/circle_app/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '11.0' + platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/circle_app/ios/Podfile.lock b/circle_app/ios/Podfile.lock index fcd0b25..5b88e79 100644 --- a/circle_app/ios/Podfile.lock +++ b/circle_app/ios/Podfile.lock @@ -3,6 +3,9 @@ PODS: - Flutter - camera_avfoundation (0.0.1): - Flutter + - connectivity (0.0.1): + - Flutter + - Reachability - device_info (0.0.1): - Flutter - device_info_plus (0.0.1): @@ -56,9 +59,14 @@ PODS: - fluttertoast (0.0.2): - Flutter - Toast + - fluwx (0.0.1): + - Flutter + - WechatOpenSDK-XCFramework (~> 2.0.2) - FMDB (2.7.5): - FMDB/standard (= 2.7.5) - FMDB/standard (2.7.5) + - geolocator_apple (1.2.0): + - Flutter - HydraAsync (2.0.6) - image_gallery_saver (1.5.0): - Flutter @@ -83,11 +91,12 @@ PODS: - path_provider_foundation (0.0.1): - Flutter - FlutterMacOS - - permission_handler_apple (9.1.0): + - permission_handler_apple (9.1.1): - Flutter - photo_manager (2.0.0): - Flutter - FlutterMacOS + - Reachability (3.2) - ReactiveObjC (3.1.1) - SDWebImage (5.16.0): - SDWebImage/Core (= 5.16.0) @@ -108,35 +117,42 @@ PODS: - TXIMSDK_Plus_iOS (>= 7.2.4146) - tencent_cloud_uikit_core (0.0.1): - Flutter - - TUICore (~> 7.2.4123) + - TUICore (~> 7.3.4358) - tencent_open_file (0.0.1): - Flutter - Toast (4.0.0) - - TUICore (7.2.4146): + - TUICore (7.3.4358): - ReactiveObjC - SDWebImage - - TUICore/ImSDK_Plus (= 7.2.4146) - - TUICore/Base (7.2.4146): + - TUICore/ImSDK_Plus (= 7.3.4358) + - TUICore/Base (7.3.4358): - ReactiveObjC - SDWebImage - - TUICore/ImSDK_Plus (7.2.4146): + - TUICore/ImSDK_Plus (7.3.4358): - ReactiveObjC - SDWebImage - TUICore/Base - - TXIMSDK_Plus_iOS (= 7.2.4146) - - TXIMSDK_Plus_iOS (7.2.4146) + - TXIMSDK_Plus_iOS (= 7.3.4358) + - TXIMSDK_Plus_iOS (7.3.4358) - url_launcher_ios (0.0.1): - Flutter + - video_compress (0.3.0): + - Flutter - video_player_avfoundation (0.0.1): - Flutter + - video_thumbnail (0.0.1): + - Flutter + - libwebp - wakelock (0.0.1): - Flutter - webview_flutter_wkwebview (0.0.1): - Flutter + - WechatOpenSDK-XCFramework (2.0.2) DEPENDENCIES: - audioplayers_darwin (from `.symlinks/plugins/audioplayers_darwin/ios`) - camera_avfoundation (from `.symlinks/plugins/camera_avfoundation/ios`) + - connectivity (from `.symlinks/plugins/connectivity/ios`) - device_info (from `.symlinks/plugins/device_info/ios`) - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) - disk_space (from `.symlinks/plugins/disk_space/ios`) @@ -146,6 +162,8 @@ DEPENDENCIES: - flutter_image_compress (from `.symlinks/plugins/flutter_image_compress/ios`) - flutter_plugin_record_plus (from `.symlinks/plugins/flutter_plugin_record_plus/ios`) - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) + - fluwx (from `.symlinks/plugins/fluwx/ios`) + - geolocator_apple (from `.symlinks/plugins/geolocator_apple/ios`) - image_gallery_saver (from `.symlinks/plugins/image_gallery_saver/ios`) - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) @@ -159,7 +177,9 @@ DEPENDENCIES: - tencent_cloud_uikit_core (from `.symlinks/plugins/tencent_cloud_uikit_core/ios`) - tencent_open_file (from `.symlinks/plugins/tencent_open_file/ios`) - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) + - video_compress (from `.symlinks/plugins/video_compress/ios`) - video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/ios`) + - video_thumbnail (from `.symlinks/plugins/video_thumbnail/ios`) - wakelock (from `.symlinks/plugins/wakelock/ios`) - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`) @@ -171,6 +191,7 @@ SPEC REPOS: - HydraAsync - libwebp - Mantle + - Reachability - ReactiveObjC - SDWebImage - SDWebImageWebPCoder @@ -178,12 +199,15 @@ SPEC REPOS: - Toast - TUICore - TXIMSDK_Plus_iOS + - WechatOpenSDK-XCFramework EXTERNAL SOURCES: audioplayers_darwin: :path: ".symlinks/plugins/audioplayers_darwin/ios" camera_avfoundation: :path: ".symlinks/plugins/camera_avfoundation/ios" + connectivity: + :path: ".symlinks/plugins/connectivity/ios" device_info: :path: ".symlinks/plugins/device_info/ios" device_info_plus: @@ -202,6 +226,10 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/flutter_plugin_record_plus/ios" fluttertoast: :path: ".symlinks/plugins/fluttertoast/ios" + fluwx: + :path: ".symlinks/plugins/fluwx/ios" + geolocator_apple: + :path: ".symlinks/plugins/geolocator_apple/ios" image_gallery_saver: :path: ".symlinks/plugins/image_gallery_saver/ios" image_picker_ios: @@ -228,8 +256,12 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/tencent_open_file/ios" url_launcher_ios: :path: ".symlinks/plugins/url_launcher_ios/ios" + video_compress: + :path: ".symlinks/plugins/video_compress/ios" video_player_avfoundation: :path: ".symlinks/plugins/video_player_avfoundation/ios" + video_thumbnail: + :path: ".symlinks/plugins/video_thumbnail/ios" wakelock: :path: ".symlinks/plugins/wakelock/ios" webview_flutter_wkwebview: @@ -238,6 +270,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40 camera_avfoundation: 3125e8cd1a4387f6f31c6c63abb8a55892a9eeeb + connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467 device_info: d7d233b645a32c40dfdc212de5cf646ca482f175 device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed disk_space: e94d34bbdf77954adfb39e60bde9cc5c7233eda6 @@ -249,7 +282,9 @@ SPEC CHECKSUMS: flutter_image_compress: 5a5e9aee05b6553048b8df1c3bc456d0afaac433 flutter_plugin_record_plus: 79b8e13ee7ed9a94f6c067018653599528cee1fc fluttertoast: fafc4fa4d01a6a9e4f772ecd190ffa525e9e2d9c + fluwx: e9e728cfdb80e82dac5f4ff974b1901a7939dcd0 FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a + geolocator_apple: cc556e6844d508c95df1e87e3ea6fa4e58c50401 HydraAsync: 8d589bd725b0224f899afafc9a396327405f8063 image_gallery_saver: 259eab68fb271cfd57d599904f7acdc7832e7ef2 image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5 @@ -257,26 +292,30 @@ SPEC CHECKSUMS: Mantle: c5aa8794a29a022dfbbfc9799af95f477a69b62d package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e pasteboard: 982969ebaa7c78af3e6cc7761e8f5e77565d9ce0 - path_provider_foundation: eaf5b3e458fc0e5fbb9940fb09980e853fe058b8 - permission_handler_apple: 8f116445eff3c0e7c65ad60f5fef5490aa94b4e4 + path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 + permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6 photo_manager: 4f6810b7dfc4feb03b461ac1a70dacf91fba7604 + Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 ReactiveObjC: 011caa393aa0383245f2dcf9bf02e86b80b36040 SDWebImage: 2aea163b50bfcb569a2726b6a754c54a4506fcf6 SDWebImageWebPCoder: f0f287cee4cd96a59937fbf3c77a8cfda9ba67b0 - shared_preferences_foundation: e2dae3258e06f44cc55f49d42024fd8dd03c590c + shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126 sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f tencent_cloud_chat_sdk: 8a2bceccaf81e7f922e7b6509ab93c39c3884dda - tencent_cloud_uikit_core: d9ec9de7506192ad4af806eab14f2f6d6dd35b01 + tencent_cloud_uikit_core: c8f580dffd1be47b5e5514b1dd8ba35506c4a560 tencent_open_file: 1261db508715b8f43ef3b7e31c90824838038165 Toast: 91b396c56ee72a5790816f40d3a94dd357abc196 - TUICore: 4133d303a749d5c29aa1f7e03f5d787855b2c4e9 - TXIMSDK_Plus_iOS: 560464285b93add271d5fd7a2a26434293821c11 + TUICore: b0e525287eb03f95fe648a696c9ffb253fc87098 + TXIMSDK_Plus_iOS: bc72c7cec1b5e975c3cc6629692c849513a932f5 url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4 + video_compress: fce97e4fb1dfd88175aa07d2ffc8a2f297f87fbe video_player_avfoundation: 81e49bb3d9fb63dccf9fa0f6d877dc3ddbeac126 + video_thumbnail: c4e2a3c539e247d4de13cd545344fd2d26ffafd1 wakelock: d0fc7c864128eac40eba1617cb5264d9c940b46f webview_flutter_wkwebview: 2e2d318f21a5e036e2c3f26171342e95908bd60a + WechatOpenSDK-XCFramework: acdeeda129efbef9532bca8a10c24e1b4b8c7d69 -PODFILE CHECKSUM: 9f3fe3e871b4a811f0f2f55cc60906d65b3d629e +PODFILE CHECKSUM: 09e094488be8e69887949b64bfbb08a8be3d1fc1 COCOAPODS: 1.11.3 diff --git a/circle_app/ios/Runner.xcodeproj/project.pbxproj b/circle_app/ios/Runner.xcodeproj/project.pbxproj index ed712a6..46f020e 100644 --- a/circle_app/ios/Runner.xcodeproj/project.pbxproj +++ b/circle_app/ios/Runner.xcodeproj/project.pbxproj @@ -360,6 +360,7 @@ DEVELOPMENT_TEAM = C97QBVP4DP; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -494,6 +495,7 @@ DEVELOPMENT_TEAM = C97QBVP4DP; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -522,6 +524,7 @@ DEVELOPMENT_TEAM = C97QBVP4DP; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/circle_app/ios/Runner/Info.plist b/circle_app/ios/Runner/Info.plist index 79c92d1..19077d7 100644 --- a/circle_app/ios/Runner/Info.plist +++ b/circle_app/ios/Runner/Info.plist @@ -2,6 +2,8 @@ + App Transport Security Settings + NSLocationWhenInUseUsageDescription 应用想要访问您的位置,用于设置个人资料 NSLocationAlwaysUsageDescription diff --git a/circle_app/lib/app/aboutapp/logic.dart b/circle_app/lib/app/aboutapp/logic.dart index 40cd61f..4c3100e 100644 --- a/circle_app/lib/app/aboutapp/logic.dart +++ b/circle_app/lib/app/aboutapp/logic.dart @@ -1,4 +1,6 @@ -import 'package:flutter_install_app/flutter_install_app.dart'; +// import 'package:flutter_install_app/flutter_install_app.dart'; +import 'package:dio/dio.dart'; +// import 'package:flutter_install_app/flutter_install_app.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; @@ -40,7 +42,7 @@ class AboutappLogic extends GetxController { // SmartDialog.dismiss(); // print(error); // }); - await AppInstaller.installApk(filePath, actionRequired: false); + // await AppInstaller.installApk(filePath, actionRequired: false); } diff --git a/circle_app/lib/app/account/view.dart b/circle_app/lib/app/account/view.dart index 9780e20..f0a6271 100644 --- a/circle_app/lib/app/account/view.dart +++ b/circle_app/lib/app/account/view.dart @@ -1,3 +1,4 @@ +import 'package:circle_app/main.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; diff --git a/circle_app/lib/app/blacklist/view.dart b/circle_app/lib/app/blacklist/view.dart index 5541c12..fa52d99 100644 --- a/circle_app/lib/app/blacklist/view.dart +++ b/circle_app/lib/app/blacklist/view.dart @@ -36,6 +36,7 @@ class BlacklistPage extends StatelessWidget { controller: logic.refreshController, onRefresh: _onRefresh, onLoading: _onLoading, + enablePullUp: true, child: ListView.builder( itemCount: logic.lists.length, diff --git a/circle_app/lib/app/chat/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_chat_history_message_list_item.dart b/circle_app/lib/app/chat/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_chat_history_message_list_item.dart index 7911022..f806c17 100644 --- a/circle_app/lib/app/chat/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_chat_history_message_list_item.dart +++ b/circle_app/lib/app/chat/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_chat_history_message_list_item.dart @@ -3,9 +3,12 @@ import 'dart:math'; import 'package:circle_app/app/chat/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_text_elem.dart'; import 'package:circle_app/app/chat/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_merger_message_elem.dart'; +import 'package:circle_app/util/util.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; import 'package:loading_animation_widget/loading_animation_widget.dart'; import 'package:provider/provider.dart'; import 'package:tencent_cloud_chat_uikit/data_services/core/tim_uikit_wide_modal_operation_key.dart'; @@ -396,6 +399,68 @@ class _TIMUIKItHistoryMessageListItemState () => model.jumpMsgID = "", )!; } + if (messageItem.customElem?.extension?.contains('cardData') ?? false) { + Map info = jsonDecode(messageItem.customElem?.data ?? ''); + return Container( + height: info.containsKey('city') ? 175 : 140, + width: Get.width, + + margin: EdgeInsets.only(left: 20), + decoration: BoxDecoration( + image: DecorationImage( + fit: BoxFit.fill, + image: AssetImage( + getCircleImage('pic_bg'), + ))), + child: Column( + children: [ + Container( + padding: EdgeInsets.only(left: 12,right: 12), + // height: 60, + child: Column( + children: [ + if (info.containsKey('city')) + Container( + margin: EdgeInsets.only(top: 10), + child: Row( + children: [ + Container( + margin: EdgeInsets.only(right: 5),width: 3,height: 3,decoration: BoxDecoration(borderRadius: BorderRadius.circular(1.5),color: Color(0xFF00FFF4)),), + Text(info['city'],style: TextStyle(color: Colors.white,fontSize: 14,fontWeight: FontWeight.w500),) + ], + ), + ), + if (info.containsKey('both_interests')) + Container( + margin: EdgeInsets.only(top: 16), + child: Row( + children: [ + Container( + margin: EdgeInsets.only(right: 5),width: 3,height: 3,decoration: BoxDecoration(borderRadius: BorderRadius.circular(1.5),color: Color(0xFF00FFF4)),), + Text(info['both_interests'],style: TextStyle(color: Colors.white,fontSize: 14,fontWeight: FontWeight.w500),) + ], + ), + ), + Container( + margin: EdgeInsets.only(top: 10,bottom: 10), + alignment: Alignment.centerLeft, + child: Text(isFromSelf ? info['user']['signature'] : info['my']['signature'],style: TextStyle(color: Colors.white,fontSize: 14,fontWeight: FontWeight.w500),maxLines: 2,overflow: TextOverflow.ellipsis,), + ), + Image.asset( + getCircleImage('line'), + width: Get.width, + fit: BoxFit.fill, + ), + interestWdiget(isFromSelf ? info['interests'] : info['myInterests']) + ], + ), + ) + ], + ), + ); + } + + return TIMUIKitCustomElem( message: messageItem, customElem: messageItem.customElem, @@ -580,6 +645,58 @@ class _TIMUIKItHistoryMessageListItemState } } + interestWdiget(List data) { + return Container( + // color: Colors.red, + alignment: Alignment.centerLeft, + height: 49.sp, + width: Get.width, + child: ListView.builder( + scrollDirection: Axis.horizontal, + itemCount: data.length, + padding: EdgeInsets.symmetric(vertical: 11.sp), + itemBuilder: (context, index) { + return Container( + margin: EdgeInsets.only(right: 11.sp), // 替换为实际的 item 间距 + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(17.0), // 设置圆角半径 + gradient: LinearGradient( + colors: [ + Color(0xFF06F9FA), + Color(0xFFDC5BFD), + ], + ), + color: Color(0xFF392D53), + ), + child: Container( + margin: EdgeInsets.all(0.5.sp), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(17.0), + // shape: BoxShape.circle, + color: Color(0xFF392D53), + ), + child: Padding( + padding: EdgeInsets.only( + top: 2.sp, bottom: 2.sp, left: 15.sp, right: 15.sp), + child: Center( + child: Text( + data[index]['title'], + style: TextStyle( + fontSize: 11.0, + color: Colors.white, + ), + ), + ), + ), + ), + ), // 替换为实际的列表项小部件 + ); + }, + ), + ); + } + Widget _groupTipsMessageBuilder(TUIChatSeparateViewModel model) { final messageItem = widget.message; return Container( @@ -1233,12 +1350,16 @@ class _TIMUIKItHistoryMessageListItemState } } }, - child: Row( + child: + (message.customElem?.extension?.contains('cardData') ?? false) ? _getMessageItemBuilder(message, 1, model) : Row( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: isSelf ? MainAxisAlignment.end : MainAxisAlignment.start, children: [ + + + if (!isSelf && widget.showAvatar) InkWell( onLongPress: () { @@ -1321,7 +1442,7 @@ class _TIMUIKItHistoryMessageListItemState Row( crossAxisAlignment: CrossAxisAlignment.end, children: [ - if (isSelf) + if (isSelf && message.elemType != 2) renderHoverTipAndReadStatus(model, isSelf, message, isPeerRead, theme), Container( @@ -1408,7 +1529,7 @@ class _TIMUIKItHistoryMessageListItemState left: 5, bottom: 12), child: Icon(Icons.circle, color: theme.cautionColor, size: 10)), - if (!isSelf) + if (!isSelf && message.elemType != 2) renderHoverTipAndReadStatus(model, isSelf, message, isPeerRead, theme), ], @@ -1426,7 +1547,7 @@ class _TIMUIKItHistoryMessageListItemState size: 20, ), ), - if (isSelf && widget.showAvatar) + if (isSelf && widget.showAvatar && message.elemType != 2) widget.userAvatarBuilder != null ? widget.userAvatarBuilder!(context, message) : SizedBox( diff --git a/circle_app/lib/app/chat/TIMUIKitChat/tim_uikit_chat.dart b/circle_app/lib/app/chat/TIMUIKitChat/tim_uikit_chat.dart index 2a1f164..bd47020 100644 --- a/circle_app/lib/app/chat/TIMUIKitChat/tim_uikit_chat.dart +++ b/circle_app/lib/app/chat/TIMUIKitChat/tim_uikit_chat.dart @@ -364,7 +364,7 @@ class _TUIChatState extends TIMUIKitState { } } - return bgWidget(context, GestureDetector( + return BgWidget(widget:GestureDetector( onTap: () { textFieldController.hideAllPanel(); }, diff --git a/circle_app/lib/app/chat/view.dart b/circle_app/lib/app/chat/view.dart index dc6aa15..3e9c648 100644 --- a/circle_app/lib/app/chat/view.dart +++ b/circle_app/lib/app/chat/view.dart @@ -1,6 +1,7 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:circle_app/app/chat/TIMUIKitChat/tim_uikit_chat.dart'; import 'package:circle_app/components/my_app_bar.dart'; +import 'package:circle_app/router/app_routers.dart'; import 'package:circle_app/util/util.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -82,6 +83,9 @@ class ChatPage extends StatelessWidget { customAppBar: MyAppBar( centerTitle: logic.selectedConversation!.showName!, actionWdiget: GestureDetector( + onTap: () { + Get.toNamed(AppRoutes.UserInfoActivity,arguments: logic.selectedConversation!.userID.toString().split('_').last); + }, child: Text('TA的主页',style: TextStyle(color: Color(0xFF00FFF4),fontSize:12.sp,fontWeight: FontWeight.w500),), ), onPressed: () {}, @@ -89,6 +93,7 @@ class ChatPage extends StatelessWidget { userAvatarBuilder: (BuildContext context, V2TimMessage message) { return avatarWidget(message.faceUrl ?? 'http://qiniuyun.ikuayou.com/avatar/default/default_header.png'); }, + ); } diff --git a/circle_app/lib/app/circle/logic.dart b/circle_app/lib/app/circle/logic.dart index c5ec7b8..6a07c7c 100644 --- a/circle_app/lib/app/circle/logic.dart +++ b/circle_app/lib/app/circle/logic.dart @@ -1,13 +1,14 @@ +import 'package:circle_app/main.dart'; import 'package:circle_app/router/app_routers.dart'; import 'package:circle_app/util/util.dart'; import 'package:flutter/cupertino.dart'; import 'package:get/get.dart'; - import '../../network/api.dart'; import '../../network/dio_manager.dart'; import 'state.dart'; class CircleLogic extends GetxController { + PageController pageController = PageController(initialPage: 1, viewportFraction: 0.8); InterestsBean circle = InterestsBean(lists: []); @@ -74,6 +75,20 @@ class CircleLogic extends GetxController { Get.toNamed(AppRoutes.UserInfoActivity, arguments: userId); } + void getPipeiData() async { + var data = await DioManager.instance + .get(url: Api.getMatch); + if(data['code'] == 200) { + //发送消息 + bool isSuccess = await createCustomMsg(data['data']['account_id'].toString().split('_').last,data['data']['account_id']); + if (!isSuccess) { + await sendTextMsg(data['data']['account_id']); + } + } else { + showToast(data['msg']); + } + } + } diff --git a/circle_app/lib/app/circle/view.dart b/circle_app/lib/app/circle/view.dart index de3c8fe..3afd007 100644 --- a/circle_app/lib/app/circle/view.dart +++ b/circle_app/lib/app/circle/view.dart @@ -86,7 +86,7 @@ class _CirclePageState extends State List numbers = []; numbers.add(MyConfigData( logic.getCircleIndex().id.toString(), - logic.getCircleIndex().title, + logic.getCircleIndex().title!, false)); var data = await Get.toNamed(AppRoutes.Call_out, arguments: {'numbers': numbers}); @@ -371,7 +371,7 @@ class _CirclePageState extends State GestureDetector( onTap: () { Navigator.pop(context); - logic.outCircle(bean.id.toString(), bean.isJoin); + logic.outCircle(bean.id.toString(), bean.isJoin!); }, child: Container( margin: EdgeInsets.only(top: 24.sp), diff --git a/circle_app/lib/app/circle/widgets/info_list_view.dart b/circle_app/lib/app/circle/widgets/info_list_view.dart index 7f1b9af..5991868 100644 --- a/circle_app/lib/app/circle/widgets/info_list_view.dart +++ b/circle_app/lib/app/circle/widgets/info_list_view.dart @@ -176,7 +176,7 @@ class _InfoListViewState extends State with AutomaticKeepAliveClie var data = await DioManager.instance.get( url: "/up-service/callout/${bean.id}/chat",); if (data["code"] == 200) { - pushChatPage(data['data']['account_id'], bean.user!.nickname!); + pushChatPage(data['data']['account_id'],data['data']['account_id'], bean.user!.nickname!); } } diff --git a/circle_app/lib/app/friendslist/view.dart b/circle_app/lib/app/friendslist/view.dart index 22558cc..70dd541 100644 --- a/circle_app/lib/app/friendslist/view.dart +++ b/circle_app/lib/app/friendslist/view.dart @@ -35,6 +35,7 @@ class FriendslistPage extends StatelessWidget { controller: logic.refreshController, onRefresh: _onRefresh, onLoading: _onLoading, + enablePullUp: true, child: ListView.builder( padding: EdgeInsets.all(10.sp), itemCount: logic.lists.length, diff --git a/circle_app/lib/app/likelist/view.dart b/circle_app/lib/app/likelist/view.dart index ee7d895..e35a8a0 100644 --- a/circle_app/lib/app/likelist/view.dart +++ b/circle_app/lib/app/likelist/view.dart @@ -39,6 +39,7 @@ class LikelistPage extends StatelessWidget { controller: logic.refreshController, onRefresh: _onRefresh, onLoading: _onLoading, + enablePullUp: true, child: ListView.builder( padding: EdgeInsets.all(10.sp), itemCount: logic.lists.length, 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 e0ff4d6..65e0d3f 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 @@ -1,6 +1,7 @@ // ignore_for_file: empty_catches import 'package:cached_network_image/cached_network_image.dart'; +import 'package:circle_app/app/msg/TIMUIKitConversation/tim_uikit_conversation_last_msg.dart'; import 'package:flutter/material.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/screen_utils.dart'; import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitConversation/tim_uikit_conversation_item.dart'; @@ -67,7 +68,7 @@ class TIMConversationItem extends TIMUIKitStatelessWidget { lastMessageBuilder!(lastMsg, groupAtInfoList) != null) { return lastMessageBuilder!(lastMsg, groupAtInfoList)!; } - return TIMUIKitLastMsg( + return TIMLastMsg( fontSize: isDesktopScreen ? 12 : 14, groupAtInfoList: groupAtInfoList, lastMsg: lastMsg, diff --git a/circle_app/lib/app/msg/TIMUIKitConversation/tim_uikit_conversation_last_msg.dart b/circle_app/lib/app/msg/TIMUIKitConversation/tim_uikit_conversation_last_msg.dart index 09a335a..00db050 100644 --- a/circle_app/lib/app/msg/TIMUIKitConversation/tim_uikit_conversation_last_msg.dart +++ b/circle_app/lib/app/msg/TIMUIKitConversation/tim_uikit_conversation_last_msg.dart @@ -9,13 +9,13 @@ import 'package:tencent_cloud_chat_uikit/ui/utils/message.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_base.dart'; import 'package:tencent_im_base/tencent_im_base.dart'; -class TIMUIKitLastMsg extends StatefulWidget { +class TIMLastMsg extends StatefulWidget { final V2TimMessage? lastMsg; final List groupAtInfoList; final BuildContext context; final double fontSize; - const TIMUIKitLastMsg( + const TIMLastMsg( {Key? key, this.lastMsg, required this.groupAtInfoList, @@ -24,10 +24,10 @@ class TIMUIKitLastMsg extends StatefulWidget { : super(key: key); @override - State createState() => _TIMUIKitLastMsgState(); + State createState() => _TIMLastMsgState(); } -class _TIMUIKitLastMsgState extends TIMUIKitState { +class _TIMLastMsgState extends TIMUIKitState { String groupTipsAbstractText = ""; @override @@ -37,7 +37,7 @@ class _TIMUIKitLastMsgState extends TIMUIKitState { } @override - void didUpdateWidget(covariant TIMUIKitLastMsg oldWidget) { + void didUpdateWidget(covariant TIMLastMsg oldWidget) { super.didUpdateWidget(oldWidget); if ((oldWidget.lastMsg?.msgID != widget.lastMsg?.msgID) || (oldWidget.lastMsg?.id != widget.lastMsg?.id)) { @@ -73,6 +73,11 @@ class _TIMUIKitLastMsgState extends TIMUIKitState { final msgType = message!.elemType; switch (msgType) { case MessageElemType.V2TIM_ELEM_TYPE_CUSTOM: + { + if (message.customElem?.desc?.isNotEmpty ?? false) { + return message.customElem!.desc!; + } + } return TIM_t("[自定义]"); case MessageElemType.V2TIM_ELEM_TYPE_SOUND: return TIM_t("[语音]"); diff --git a/circle_app/lib/app/msg/sys_notify_list/binding.dart b/circle_app/lib/app/msg/sys_notify_list/binding.dart new file mode 100644 index 0000000..9e38c69 --- /dev/null +++ b/circle_app/lib/app/msg/sys_notify_list/binding.dart @@ -0,0 +1,10 @@ +import 'package:get/get.dart'; + +import 'logic.dart'; + +class Sys_notify_listBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut(() => Sys_notify_listLogic()); + } +} diff --git a/circle_app/lib/app/msg/sys_notify_list/logic.dart b/circle_app/lib/app/msg/sys_notify_list/logic.dart new file mode 100644 index 0000000..90d6ea4 --- /dev/null +++ b/circle_app/lib/app/msg/sys_notify_list/logic.dart @@ -0,0 +1,115 @@ +import 'package:circle_app/network/api.dart'; +import 'package:circle_app/network/dio_manager.dart'; +import 'package:get/get.dart'; +import 'package:pull_to_refresh/pull_to_refresh.dart'; + +class Sys_notify_listLogic extends GetxController { + @override + void dispose() { + refreshController.dispose(); + super.dispose(); + + } + + final RefreshController refreshController = RefreshController(); + + int page = 0; + int isVip = 0; + bool isLoad = true; + List lists = []; + + @override + void onInit() async { + super.onInit(); + initList(); + } + + + initList() async { + if (page == 1) { + lists.clear(); + update(); + } + + var data = + await DioManager.instance.get(url: Api.getNotices, params: { + 'last_id':page > 0 ? page : '','size':'10' + }); + // pagevar bean = BaseResponse.fromJson( + // data, (data) => UserList.fromJson(data)); + // if (bean.isSuccess()) { + // lists.addAll(bean.data.lists); + // } + + List bean = data['data']['lists']; + if (bean.length > 0) { + bean.forEach((element) { + lists.add(Lists.fromJson(element)); + }); + } + isLoad = false; + update(); + if (page == 0) { + page = lists.last.id!; + refreshController.refreshCompleted(); + } else { + refreshController.loadComplete(); + } + } + + void onRefresh() async { + page = 0; + initList(); + } + + void onLoading() { + // page = page + 1; + initList(); + } + +} + +class Lists { + String? content; + String? createTime; + int? id; + String? image; + String? note; + String? scene; + int? status; + String? title; + + Lists( + {this.content, + this.createTime, + this.id, + this.image, + this.note, + this.scene, + this.status, + this.title}); + + Lists.fromJson(Map json) { + content = json['content']; + createTime = json['createTime']; + id = json['id']; + image = json['image']; + note = json['note']; + scene = json['scene']; + status = json['status']; + title = json['title']; + } + + Map toJson() { + final Map data = new Map(); + data['content'] = this.content; + data['createTime'] = this.createTime; + data['id'] = this.id; + data['image'] = this.image; + data['note'] = this.note; + data['scene'] = this.scene; + data['status'] = this.status; + data['title'] = this.title; + return data; + } +} diff --git a/circle_app/lib/app/msg/sys_notify_list/view.dart b/circle_app/lib/app/msg/sys_notify_list/view.dart new file mode 100644 index 0000000..9201717 --- /dev/null +++ b/circle_app/lib/app/msg/sys_notify_list/view.dart @@ -0,0 +1,142 @@ +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:circle_app/components/my_app_bar.dart'; +import 'package:circle_app/util/util.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:pull_to_refresh/pull_to_refresh.dart'; +import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; + +import 'logic.dart'; + +class Sys_notify_listPage extends StatelessWidget { + Sys_notify_listPage({Key? key}) : super(key: key); + + final logic = Get.find(); + + Widget build(BuildContext context) { + return GetBuilder(builder: (logic) { + return Container( + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage(getBaseImage("home_back")), + fit: BoxFit.cover, + ), + ), + child: Scaffold( + backgroundColor: Colors.transparent, + appBar: MyAppBar( + centerTitle: "系统通知", + ), + body: Container( + width: Get.width, + height: Get.height, + child: SafeArea( + child: logic.isLoad + ? loaddingWidget(true) + : logic.lists.isEmpty + ? noResultWidget() + : SmartRefresher( + controller: logic.refreshController, + enablePullUp: true, + onRefresh: logic.onRefresh, + onLoading: () { + logic.onLoading(); + }, + child: ListView.builder( + padding: EdgeInsets.all(10.sp), + itemCount: logic.lists.length, + itemBuilder: (context, index) { + return ListItem(logic.lists[index]); + }, + ), + ), + ), + ), + ), + ); + }); + } + + ListItem(Lists data) { + V2TimConversation con = Get.arguments; + List widgets = []; + if (data.image != null) { + widgets.add(Image.network( + data.image!, + width: 267, + height: 114.sp, + fit: BoxFit.fill, + )); + } + if (data.title?.isNotEmpty ?? false) { + widgets.add(Container( + margin: EdgeInsets.only( + top: 8.sp, left: 16.sp, right: 16.sp), + child: Text( + data.title!, + style: TextStyle( + color: Color(0xFFF7FAFA), + fontSize: 14.sp, + fontWeight: FontWeight.w500), + ), + ),); + } + + if (data.content?.isNotEmpty ?? false) { + widgets.add(Container( + margin: EdgeInsets.only( + top: 10.sp, left: 16.sp, right: 16.sp,bottom: 10.sp), + child: Text( + data.content!, + style: TextStyle( + color: Color(0xFFF7FAFA), + fontSize: 14.sp, + fontWeight: FontWeight.w500), + ), + )); + } + + return Container( + child: Column( + children: [ + Container( + margin: EdgeInsets.only(bottom: 10.sp), + width: Get.width, + alignment: Alignment.center, + child: Text( + data.createTime ?? '', + style: TextStyle( + color: Color(0xFFB7BECC), + fontSize: 12.sp, + fontWeight: FontWeight.w500), + ), + ), + Row( + children: [ + CachedNetworkImage( + imageUrl: con.faceUrl!, + width: 34.sp, + ), + Column( + children: [ + Container( + width: 267.sp, + margin: EdgeInsets.only(left: 10.sp), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.sp), + color: Color(0xFF292836)), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children:widgets + ), + ) + ], + ) + ], + ) + ], + ), + ); + } +} diff --git a/circle_app/lib/app/msg/view.dart b/circle_app/lib/app/msg/view.dart index c0c0b99..ed9bb40 100644 --- a/circle_app/lib/app/msg/view.dart +++ b/circle_app/lib/app/msg/view.dart @@ -113,6 +113,9 @@ class MsgPage extends StatelessWidget { Positioned( right: 0, child: GestureDetector( + onTap: () { + logic.getPipeiData(); + }, child: Image.asset( getMsgImage('msg_pipei'), width: 85.sp, @@ -248,6 +251,11 @@ class MsgPage extends StatelessWidget { msgWdiget(context) { return TIMConversation( onTapItem: (selectedConv) { + String type = selectedConv.userID!.split('_')[2]; + if (int.parse(type) == 11) { + Get.toNamed(AppRoutes.Sys_notify_list,arguments: selectedConv); + return; + } Get.toNamed(AppRoutes.Chat,arguments: selectedConv); }, diff --git a/circle_app/lib/app/signal_circle_list/binding.dart b/circle_app/lib/app/signal_circle_list/binding.dart new file mode 100644 index 0000000..951d5cc --- /dev/null +++ b/circle_app/lib/app/signal_circle_list/binding.dart @@ -0,0 +1,10 @@ +import 'package:get/get.dart'; + +import 'logic.dart'; + +class Signal_circle_listBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut(() => Signal_circle_listLogic()); + } +} diff --git a/circle_app/lib/app/signal_circle_list/logic.dart b/circle_app/lib/app/signal_circle_list/logic.dart new file mode 100644 index 0000000..8408f51 --- /dev/null +++ b/circle_app/lib/app/signal_circle_list/logic.dart @@ -0,0 +1,7 @@ +import 'package:get/get.dart'; + +import 'state.dart'; + +class Signal_circle_listLogic extends GetxController { + final Signal_circle_listState state = Signal_circle_listState(); +} diff --git a/circle_app/lib/app/signal_circle_list/state.dart b/circle_app/lib/app/signal_circle_list/state.dart new file mode 100644 index 0000000..0af9e94 --- /dev/null +++ b/circle_app/lib/app/signal_circle_list/state.dart @@ -0,0 +1,5 @@ +class Signal_circle_listState { + Signal_circle_listState() { + ///Initialize variables + } +} diff --git a/circle_app/lib/app/signal_circle_list/view.dart b/circle_app/lib/app/signal_circle_list/view.dart new file mode 100644 index 0000000..0f0420c --- /dev/null +++ b/circle_app/lib/app/signal_circle_list/view.dart @@ -0,0 +1,57 @@ +import 'package:circle_app/app/circle/logic.dart'; +import 'package:circle_app/app/circle/widgets/info_list_view.dart'; +import 'package:circle_app/components/my_app_bar.dart'; +import 'package:circle_app/util/util.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +import 'logic.dart'; + +class Signal_circle_listPage extends StatelessWidget { + Signal_circle_listPage({Key? key}) : super(key: key); + + final logic = Get.find(); + final state = Get.find().state; + + @override + Widget build(BuildContext context) { + + return Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height, + decoration: BoxDecoration( + color: Color(0xFF423055), + image: DecorationImage( + fit: BoxFit.fill, + image: AssetImage(getBaseImage('home_back')))), + child: Scaffold( + backgroundColor: Colors.transparent, + body: SafeArea( + child: GetBuilder(builder: (Signal_circle_listLogic controller) { + return Stack( + children: [ + Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height, + child: Column(children: [ + backNavigatorItem(), + // Text(controller.state.msg), + //组件使用 + // Expanded( + // child: InfoListView(0, Circle(id: Get.arguments['id']), controller)); + ]), + ), + ], + ); + }), + ), + )); + + } + + backNavigatorItem() { + return MyAppBar( + centerTitle: Get.arguments['title'], + ); + } +} diff --git a/circle_app/lib/app/userinfo/view.dart b/circle_app/lib/app/userinfo/view.dart index c132a81..70e74ee 100644 --- a/circle_app/lib/app/userinfo/view.dart +++ b/circle_app/lib/app/userinfo/view.dart @@ -1,5 +1,6 @@ import 'package:cached_network_image/cached_network_image.dart'; +import 'package:circle_app/app/chat/logic.dart'; import 'package:circle_app/app/userinfo/widgets/home_call_out.dart'; import 'package:circle_app/main.dart'; import 'package:flutter/material.dart'; @@ -143,7 +144,13 @@ class _MyTabbedScreenState extends State final chatButton = GestureDetector( onTap: () { if (logic.userInfoBean != null) { - pushChatPage(logic.imId, logic.userInfoBean!.nickname); + + final chatLogic = Get.find(); + if (chatLogic.selectedConversation!.userID == logic.imId) { + Get.back(); + return; + } + pushChatPage(logic.userInfoBean!.id.toString(),logic.imId, logic.userInfoBean!.nickname); } }, child: Container( diff --git a/circle_app/lib/app/visitorlist/view.dart b/circle_app/lib/app/visitorlist/view.dart index ebc39d6..c48d7fe 100644 --- a/circle_app/lib/app/visitorlist/view.dart +++ b/circle_app/lib/app/visitorlist/view.dart @@ -36,6 +36,7 @@ class VisitorlistPage extends StatelessWidget { controller: logic.refreshController, onRefresh: _onRefresh, onLoading: _onLoading, + enablePullUp:true, child: ListView.builder( padding: EdgeInsets.all(10.sp), itemCount: logic.lists.length, @@ -121,7 +122,7 @@ class VisitorlistPage extends StatelessWidget { // Pla Spacer(), GestureDetector(onTap: (){ - pushChatPage(item.accountId, item.user.nickname); + pushChatPage(item.user.id.toString(),item.accountId, item.user.nickname); }, diff --git a/circle_app/lib/components/func_widget.dart b/circle_app/lib/components/func_widget.dart index 5156422..f1cfce1 100644 --- a/circle_app/lib/components/func_widget.dart +++ b/circle_app/lib/components/func_widget.dart @@ -1,13 +1,20 @@ import 'package:circle_app/util/util.dart'; import 'package:flutter/cupertino.dart'; -Widget bgWidget(BuildContext context, Widget widget) { - return Container( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.height, - decoration: BoxDecoration( - image: DecorationImage( - fit: BoxFit.fill, image: AssetImage(getBaseImage('home_back')))), - child: widget, - ); +class BgWidget extends StatelessWidget { + Widget widget; + + BgWidget({Key? key, required this.widget}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height, + decoration: BoxDecoration( + image: DecorationImage( + fit: BoxFit.fill, image: AssetImage(getBaseImage('home_back')))), + child: widget, + ); + } } diff --git a/circle_app/lib/network/api.dart b/circle_app/lib/network/api.dart index 8e4c143..0ef9cb9 100644 --- a/circle_app/lib/network/api.dart +++ b/circle_app/lib/network/api.dart @@ -219,4 +219,9 @@ class Api { // /up-service/my/interests /up-service/interest/statistics static const getMyCircleInterests = 'up-service/my/interests'; + //缘分匹配 + static const getMatch = 'msg-service/im/chat/match'; + //系统通知 + static const getNotices = 'msg-service/system/notices'; + } \ No newline at end of file diff --git a/circle_app/lib/router/app_pages.dart b/circle_app/lib/router/app_pages.dart index 36bb7a1..9b3fa63 100644 --- a/circle_app/lib/router/app_pages.dart +++ b/circle_app/lib/router/app_pages.dart @@ -24,6 +24,8 @@ import 'package:circle_app/app/login/login/view.dart'; import 'package:circle_app/app/minefragment/binding.dart'; import 'package:circle_app/app/minefragment/view.dart'; import 'package:circle_app/app/msg/binding.dart'; +import 'package:circle_app/app/msg/sys_notify_list/binding.dart'; +import 'package:circle_app/app/msg/sys_notify_list/view.dart'; import 'package:circle_app/app/msg/view.dart'; import 'package:circle_app/app/my_circle/binding.dart'; import 'package:circle_app/app/my_circle/view.dart'; @@ -193,5 +195,10 @@ class AppPages { page: () => VisitorlistPage(), binding: VisitorlistBinding(), ), + GetPage( + name: AppRoutes.Sys_notify_list, + page: () => Sys_notify_listPage(), + binding: Sys_notify_listBinding(), + ), ]; } diff --git a/circle_app/lib/router/app_routers.dart b/circle_app/lib/router/app_routers.dart index 553917f..80716ff 100644 --- a/circle_app/lib/router/app_routers.dart +++ b/circle_app/lib/router/app_routers.dart @@ -27,4 +27,6 @@ abstract class AppRoutes { static const MyCircle = '/myCircle'; static const MyFeedBackListActivity = '/mine/MyFeedBackListActivity'; + + static const Sys_notify_list = '/msg/Sys_notify_list'; } \ No newline at end of file diff --git a/circle_app/lib/util/util.dart b/circle_app/lib/util/util.dart index 73022f5..7966f15 100644 --- a/circle_app/lib/util/util.dart +++ b/circle_app/lib/util/util.dart @@ -143,7 +143,7 @@ String convertToTenThousand(int number) { } pushLoginPage() async { - logoutIM(); + await logoutIM(); SharedPreferencesHelper.getInstance().then((sharedPreferences) { String loginPhone = sharedPreferences.getString(SharedPreferencesHelper.LOGINPHONE); print(loginPhone); diff --git a/circle_app/pubspec.yaml b/circle_app/pubspec.yaml index 8426dc1..af9771e 100644 --- a/circle_app/pubspec.yaml +++ b/circle_app/pubspec.yaml @@ -55,7 +55,7 @@ dependencies: #七牛 qiniu_flutter_sdk: ^0.5.0 #内置游览器插件 - webview_flutter: ^4.2.2 + webview_flutter: ^4.2.0 #http dio: ^5.0.0 #获取设备信息 @@ -65,7 +65,7 @@ dependencies: #集成腾讯IM包含UIKIT库 tencent_cloud_chat_uikit: ^2.0.0 #权限申请 - permission_handler: ^10.3.0 + permission_handler: any #loading flutter_smart_dialog: ^4.9.2 #获取位置信息 @@ -84,8 +84,6 @@ dependencies: video_compress: ^3.1.2 #图片缓存 cached_network_image: ^3.2.3 - #安装apk - flutter_install_app: 1.3.0 #网络拦截 connectivity: ^3.0.6 # 支付宝SDK插件 @@ -95,7 +93,6 @@ dependencies: - dev_dependencies: flutter_test: sdk: flutter