diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/WGShare.Mobile.Flutter.iml b/.idea/WGShare.Mobile.Flutter.iml new file mode 100644 index 0000000..0520c2b --- /dev/null +++ b/.idea/WGShare.Mobile.Flutter.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..639900d --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..a8525f8 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/wgshare/ios/Podfile b/wgshare/ios/Podfile index 9ea1e18..d97f17e 100644 --- a/wgshare/ios/Podfile +++ b/wgshare/ios/Podfile @@ -39,65 +39,6 @@ end post_install do |installer| installer.pods_project.targets.each do |target| - # Here are some configurations automatically generated by flutter - - # Start of the permission_handler configuration - target.build_configurations.each do |config| - - # You can enable the permissions needed here. For example to enable camera - # permission, just remove the `#` character in front so it looks like this: - # - # ## dart: PermissionGroup.camera - # 'PERMISSION_CAMERA=1' - # - # Preprocessor definitions can be found in: https://github.com/Baseflow/flutter-permission-handler/blob/master/permission_handler_apple/ios/Classes/PermissionHandlerEnums.h - config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [ - '$(inherited)', - - ## dart: PermissionGroup.calendar - # 'PERMISSION_EVENTS=1', - - ## dart: PermissionGroup.reminders - # 'PERMISSION_REMINDERS=1', - - ## dart: PermissionGroup.contacts - # 'PERMISSION_CONTACTS=1', - - ## dart: PermissionGroup.camera - 'PERMISSION_CAMERA=1', - - ## dart: PermissionGroup.microphone - 'PERMISSION_MICROPHONE=1', - - ## dart: PermissionGroup.speech - # 'PERMISSION_SPEECH_RECOGNIZER=1', - - ## dart: PermissionGroup.photos - # 'PERMISSION_PHOTOS=1', - - ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse] - # 'PERMISSION_LOCATION=1', - - ## dart: PermissionGroup.notification - # 'PERMISSION_NOTIFICATIONS=1', - - ## dart: PermissionGroup.mediaLibrary - # 'PERMISSION_MEDIA_LIBRARY=1', - - ## dart: PermissionGroup.sensors - # 'PERMISSION_SENSORS=1', - - ## dart: PermissionGroup.bluetooth - # 'PERMISSION_BLUETOOTH=1', - - ## dart: PermissionGroup.appTrackingTransparency - # 'PERMISSION_APP_TRACKING_TRANSPARENCY=1', - - ## dart: PermissionGroup.criticalAlerts - # 'PERMISSION_CRITICAL_ALERTS=1' - ] - - end - # End of the permission_handler configuration + flutter_additional_ios_build_settings(target) end end diff --git a/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index af68b0a..c68df94 100644 --- a/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,121 +1,120 @@ { - "images" : [ - { - "filename" : "40.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "20x20" - }, - { - "filename" : "60.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "20x20" - }, - { - "filename" : "29.png", - "idiom" : "iphone", - "scale" : "1x", - "size" : "29x29" - }, - { - "filename" : "58.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "29x29" - }, - { - "filename" : "87.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "29x29" - }, - { - "filename" : "80.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "40x40" - }, - { - "filename" : "120.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "40x40" - }, - { - "filename" : "120 1.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "60x60" - }, - { - "filename" : "180.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "60x60" - }, - { - "filename" : "20.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "20x20" - }, - { - "filename" : "40 1.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "20x20" - }, - { - "filename" : "29 1.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "29x29" - }, - { - "filename" : "58 1.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "29x29" - }, - { - "filename" : "40 2.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "40x40" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "40x40" - }, - { - "filename" : "76.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "76x76" - }, - { - "filename" : "152.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "76x76" - }, - { - "filename" : "167.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "83.5x83.5" - }, - { - "filename" : "1024.png", - "idiom" : "ios-marketing", - "scale" : "1x", - "size" : "1024x1024" + "images": [ + { + "size": "20x20", + "idiom": "universal", + "filename": "icon-20@2x.png", + "scale": "2x", + "platform": "ios" + }, + { + "size": "20x20", + "idiom": "universal", + "filename": "icon-20@3x.png", + "scale": "3x", + "platform": "ios" + }, + { + "size": "29x29", + "idiom": "universal", + "filename": "icon-29@2x.png", + "scale": "2x", + "platform": "ios" + }, + { + "size": "29x29", + "idiom": "universal", + "filename": "icon-29@3x.png", + "scale": "3x", + "platform": "ios" + }, + { + "size": "38x38", + "idiom": "universal", + "filename": "icon-38@2x.png", + "scale": "2x", + "platform": "ios" + }, + { + "size": "38x38", + "idiom": "universal", + "filename": "icon-38@3x.png", + "scale": "3x", + "platform": "ios" + }, + { + "size": "40x40", + "idiom": "universal", + "filename": "icon-40@2x.png", + "scale": "2x", + "platform": "ios" + }, + { + "size": "40x40", + "idiom": "universal", + "filename": "icon-40@3x.png", + "scale": "3x", + "platform": "ios" + }, + { + "size": "60x60", + "idiom": "universal", + "filename": "icon-60@2x.png", + "scale": "2x", + "platform": "ios" + }, + { + "size": "60x60", + "idiom": "universal", + "filename": "icon-60@3x.png", + "scale": "3x", + "platform": "ios" + }, + { + "size": "64x64", + "idiom": "universal", + "filename": "icon-64@2x.png", + "scale": "2x", + "platform": "ios" + }, + { + "size": "64x64", + "idiom": "universal", + "filename": "icon-64@3x.png", + "scale": "3x", + "platform": "ios" + }, + { + "size": "68x68", + "idiom": "universal", + "filename": "icon-68@2x.png", + "scale": "2x", + "platform": "ios" + }, + { + "size": "76x76", + "idiom": "universal", + "filename": "icon-76@2x.png", + "scale": "2x", + "platform": "ios" + }, + { + "size": "83.5x83.5", + "idiom": "universal", + "filename": "icon-83.5@2x.png", + "scale": "2x", + "platform": "ios" + }, + { + "size": "1024x1024", + "idiom": "universal", + "filename": "icon-1024.png", + "scale": "1x", + "platform": "ios" + } + ], + "info": { + "version": 1, + "author": "icon.wuruihong.com" } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} +} \ No newline at end of file diff --git a/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-1024.png b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-1024.png new file mode 100644 index 0000000..4e7a864 Binary files /dev/null and b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-1024.png differ diff --git a/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png new file mode 100644 index 0000000..ca89ff8 Binary files /dev/null and b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png differ diff --git a/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png new file mode 100644 index 0000000..99aab5d Binary files /dev/null and b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png differ diff --git a/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png new file mode 100644 index 0000000..1d21e48 Binary files /dev/null and b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png differ diff --git a/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png new file mode 100644 index 0000000..0f48f68 Binary files /dev/null and b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png differ diff --git a/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-38@2x.png b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-38@2x.png new file mode 100644 index 0000000..fdaffeb Binary files /dev/null and b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-38@2x.png differ diff --git a/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-38@3x.png b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-38@3x.png new file mode 100644 index 0000000..4825e62 Binary files /dev/null and b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-38@3x.png differ diff --git a/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png new file mode 100644 index 0000000..926c415 Binary files /dev/null and b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png differ diff --git a/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png new file mode 100644 index 0000000..bf9b441 Binary files /dev/null and b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png differ diff --git a/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png new file mode 100644 index 0000000..bf9b441 Binary files /dev/null and b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png differ diff --git a/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png new file mode 100644 index 0000000..f7a534f Binary files /dev/null and b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png differ diff --git a/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-64@2x.png b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-64@2x.png new file mode 100644 index 0000000..e37605e Binary files /dev/null and b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-64@2x.png differ diff --git a/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-64@3x.png b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-64@3x.png new file mode 100644 index 0000000..f3ee279 Binary files /dev/null and b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-64@3x.png differ diff --git a/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-68@2x.png b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-68@2x.png new file mode 100644 index 0000000..8adf5bc Binary files /dev/null and b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-68@2x.png differ diff --git a/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png new file mode 100644 index 0000000..0cd9309 Binary files /dev/null and b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png differ diff --git a/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png new file mode 100644 index 0000000..1889a12 Binary files /dev/null and b/wgshare/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png differ diff --git a/wgshare/ios/Runner/Info.plist b/wgshare/ios/Runner/Info.plist index 5411467..9aa1907 100644 --- a/wgshare/ios/Runner/Info.plist +++ b/wgshare/ios/Runner/Info.plist @@ -8,10 +8,6 @@ $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName 智汇享 - CFBundleDocumentTypes - - - CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -41,7 +37,7 @@ UIMainStoryboardFile Main UIRequiresFullScreen - + UISupportedInterfaceOrientations UIInterfaceOrientationPortrait diff --git a/wgshare/lib/pages/loginPage/agreement/agreement_read_view.dart b/wgshare/lib/pages/loginPage/agreement/agreement_read_view.dart index 471dc28..f7d2df2 100644 --- a/wgshare/lib/pages/loginPage/agreement/agreement_read_view.dart +++ b/wgshare/lib/pages/loginPage/agreement/agreement_read_view.dart @@ -2,9 +2,9 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; -import 'package:webview_flutter/webview_flutter.dart'; import 'agreement_read_logic.dart'; import 'agreement_read_state.dart'; @@ -23,7 +23,6 @@ class AgreementReadPageState extends State { @override void initState() { super.initState(); - if (Platform.isAndroid) WebView.platform = AndroidWebView(); } @override @@ -81,12 +80,15 @@ class AgreementReadPageState extends State { ), /// 中间布局 - const Expanded( - child: WebView( - initialUrl: - 'https://static.23544.com/WGShare-PrivacyPolicy.html', - ), - ), + Expanded( + child: InAppWebView( + initialUrlRequest: + URLRequest(url: WebUri("https://static.23544.com/WGShare-PrivacyPolicy.html")), + initialSettings: InAppWebViewSettings( + transparentBackground: true, + safeBrowsingEnabled: true, + isFraudulentWebsiteWarningEnabled: true), + )), ], )); } diff --git a/wgshare/lib/pages/metting/meeting_main_logic.dart b/wgshare/lib/pages/metting/meeting_main_logic.dart index b3f6d17..3a54584 100644 --- a/wgshare/lib/pages/metting/meeting_main_logic.dart +++ b/wgshare/lib/pages/metting/meeting_main_logic.dart @@ -17,7 +17,7 @@ import '../../utils/permission/PermissionService.dart'; import '../../utils/toast_utils.dart'; import 'meeting_main_state.dart'; -class MeetingMainLogic extends GetxController with RequestToolMixin{ +class MeetingMainLogic extends GetxController with RequestToolMixin { final MeetingMainState state = MeetingMainState(); @override @@ -45,10 +45,11 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ /// 获取会议室Token Future doHttpGetMeetingToken(bool isInit) async { - BaseStructureResult res = await getClient().getMeetingToken(state.roomNumber.value); + BaseStructureResult res = + await getClient().getMeetingToken(state.roomNumber.value); state.meetingToken.value = res.data!; - if(isInit == true){ + if (isInit == true) { initRtc(); signalRSocket(); } @@ -58,32 +59,33 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ /// 1.获取会议室信息 /// 2.获取会议室所有用户 Future mergeFetch() async { - try{ + try { ToastUtils.showLoading(); var results = await Future.wait([ getClient().getMeetingRoomInfo(state.roomNumber.value), - getClient().getMeetingRoomAllUser(state.roomNumber.value)]); + getClient().getMeetingRoomAllUser(state.roomNumber.value) + ]); getMeetingRoomInfo(results[0].data as MeetingRoomInfo); getMeetingRoomAllUser(results[1].data as List); - }finally{ + } finally { ToastUtils.dismiss(); } } /// 改变会议信息浮层显示状态 - void changeMeetingInfoState(bool isShow){ + void changeMeetingInfoState(bool isShow) { state.isShowMeetingInfoFloatingLayer.value = isShow; } /// 改变音频选择浮层显示状态 - void changeMeetingAudioState(bool isShow){ + void changeMeetingAudioState(bool isShow) { state.isShowMeetingAudioFloatingLayer.value = isShow; } /// 改变当前页面状态 - void changePageState(int pageState){ + void changePageState(int pageState) { state.pageState.value = pageState; } @@ -101,16 +103,17 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ } /// 启动计时 - void startTime(){ + void startTime() { state.stopwatch.value.start(); - state.timer.value = Timer.periodic(const Duration(milliseconds: 100), upTime); + state.timer.value = + Timer.periodic(const Duration(milliseconds: 100), upTime); } /// 更新计时 void upTime(Timer t) { - if(state.stopwatch.value.isRunning){ + if (state.stopwatch.value.isRunning) { state.duration.value = - "${state.stopwatch.value.elapsed.inHours.toString().padLeft(2, "0")}" + "${state.stopwatch.value.elapsed.inHours.toString().padLeft(2, "0")}" ":${(state.stopwatch.value.elapsed.inMinutes % 60).toString().padLeft(2, "0")}" ":${(state.stopwatch.value.elapsed.inSeconds % 60).toString().padLeft(2, "0")}"; } @@ -123,16 +126,16 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ } /// 搜索成员 - void searchMember(String value){ - if(value.isNotEmpty){ + void searchMember(String value) { + if (value.isNotEmpty) { List memberSearchList = []; - for(var i = 0; i < state.cacheUsers.value.length; i++){ - if(state.cacheUsers.value[i].userName.contains(value)){ + for (var i = 0; i < state.cacheUsers.value.length; i++) { + if (state.cacheUsers.value[i].userName.contains(value)) { memberSearchList.add(state.cacheUsers.value[i]); } } state.users.value = memberSearchList; - }else{ + } else { state.users.value = state.cacheUsers.value; } } @@ -145,128 +148,106 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ /// 关闭发言权限 Future doHttpCancelSpeak() async { - await getClient().cancelSpeak(state.meetingRoomInfo.value!.id, state.meetingRoomInfo.value!.roomNum, UserStore.to.userInfoEntity.value!.uid); + await getClient().cancelSpeak( + state.meetingRoomInfo.value!.id, + state.meetingRoomInfo.value!.roomNum, + UserStore.to.userInfoEntity.value!.uid); + } + + /// 关闭发言权限合并请求 + Future cancelSpeak() async { + try { + ToastUtils.showLoading(); + + await Future.wait( + [doHttpCancelSpeak(), doHttpSetMicr(false), doHttpSetCamer(false)]); + } finally { + ToastUtils.dismiss(); + } } /// ------------------------------------------------------------------------------麦克风相关(操作) /// 用户开闭麦 Future doHttpSetMicr(bool isOpenMicrophone) async { - await getClient().setMicr(state.roomNumber.value, isOpenMicrophone, UserStore.to.userInfoEntity.value!.uid); + await getClient().setMicr(state.roomNumber.value, isOpenMicrophone, + UserStore.to.userInfoEntity.value!.uid); } /// ------------------------------------------------------------------------------视频-屏幕相关(操作) /// 用户开闭摄像头 Future doHttpSetCamer(bool isOpenCamera) async { - await getClient().setCamera(state.roomNumber.value, isOpenCamera, UserStore.to.userInfoEntity.value!.uid); + await getClient().setCamera(state.roomNumber.value, isOpenCamera, + UserStore.to.userInfoEntity.value!.uid); } /// 设置视频是否开启 - void setCameraOpen(bool isOpen){ + void setCameraOpen(bool isOpen) { state.isOpenCamera.value = isOpen; } /// 获取当前全员观看主播 Future doHttpGetTvAnchor() async { - BaseStructureResult res = await getClient().getTvAnchor(state.roomNumber.value); + BaseStructureResult res = + await getClient().getTvAnchor(state.roomNumber.value); state.remoteUid.value = res.data!.toString(); + debugPrint("wgs输出===:获取当前全员观看主播${res.data}"); - if(res.data!.toString().length != 9){ + if (res.data!.toString().length != 9) { // 摄像头 - // 判断自己是不是全员观看主播 - if(state.remoteUid.value == UserStore.to.userInfoEntity.value!.uid) { - state.isSelf.value = true; - }else{ - state.isSelf.value = false; - } - - if(state.isSelf.value == true){ - // 如果自己是全员观看主播 - if(state.isOpenCamera.value == true){ - // 有发言权限且开了摄像头的时候才切换页面到视频状态 - changePageState(1); - state.floating.value?.close(); - }else{ - // 否则切换页面到语音状态 - changePageState(0); - } - }else{ - // 如果自己不是全员观看主播 - var isCurrentUserIsCamera = false; - // 遍历当前会议室用户列表获取对应用户判断 - for(var i = 0; i < state.cacheUsers.value.length; i++){ - if(state.remoteUid.value == state.cacheUsers.value[i].uid && state.cacheUsers.value[i].enableCamera == true){ - isCurrentUserIsCamera = true; - } - } - if(isCurrentUserIsCamera == true){ - changePageState(1); - }else{ - changePageState(0); - } - } - }else{ - // 共享屏幕 - // 判断是不是自己在共享 - if(state.remoteUid.value != UserStore.to.userInfoEntity.value!.screenShareId){ - state.isSelf.value = false; - }else{ - state.isSelf.value = true; - } - - // 不是自己在共享才切换页面状态 - if(state.isSelf.value == false){ - changePageState(1); - } - } - /*if(res.data!.toString().length != 9){ - if(state.remoteUid.value != UserStore.to.userInfoEntity.value!.uid) { - state.isSelf.value = false; - }else{ - state.isSelf.value = true; - } - if(state.isSelf.value == true){ - if(state.isOpenCamera.value == true){ - changePageState(1); - }else{ - changePageState(0); - } + if (state.remoteUid.value == UserStore.to.userInfoEntity.value!.uid) { + // 全员观看主播是自己 + // 设置主播ID为0(自己) + state.remoteUid.value = "0"; + // 关闭右上角悬浮窗 state.floating.value?.close(); - }else{ + + if (state.isSpeak.value == true && state.isOpenCamera.value == true) { + // 有发言权限且开启了摄像头时,切换页面到视频状态 + changePageState(1); + } else { + // 没有发言权限或没开启摄像头时,切换页面到语音状态 + changePageState(0); + } + } else { + // 全员观看主播不是自己 + // 判断当前会议室是否存在全员观看主播 var isCurrentUserIsCamera = false; - for(var i = 0; i < state.cacheUsers.value.length; i++){ - if(state.remoteUid.value == state.cacheUsers.value[i].uid && state.cacheUsers.value[i].enableCamera == true){ + for (var i = 0; i < state.cacheUsers.value.length; i++) { + if (state.remoteUid.value == state.cacheUsers.value[i].uid && + state.cacheUsers.value[i].enableCamera == true) { isCurrentUserIsCamera = true; } } - if(isCurrentUserIsCamera == true){ + + if (isCurrentUserIsCamera == true) { + // 当前会议室存在全员观看主播时,切换页面到视频状态 + debugPrint("wgs输出===:当前会议室存在全员观看主播时,切换页面到视频状态"); + changePageState(1); + } else { + // 当前会议室不存在全员观看主播时,设置主播ID为空并切换页面到视频状态 + debugPrint("wgs输出===:当前会议室不存在全员观看主播时,设置主播ID为空并切换页面到视频状态"); + state.remoteUid.value = ""; changePageState(1); - }else{ - changePageState(0); } } - }else{ - if(state.remoteUid.value != UserStore.to.userInfoEntity.value!.screenShareId){ - state.isSelf.value = false; + } else { + // 共享屏幕(此版本不做) + /*if(state.remoteUid.value == UserStore.to.userInfoEntity.value!.screenShareId){ + // 如果是自己在共享 }else{ - state.isSelf.value = true; - } - - if(state.isSelf.value == false){ + // 如果是别人在共享,切换页面到视频状态 changePageState(1); - } - }*/ + }*/ + } } /// 设置当前全员观看主播 Future doHttpSetTvAnchor(String id) async { - await getClient().setTvAnchor( - state.roomNumber.value, - id, - UserStore.to.userInfoEntity.value!.userName - ); + await getClient().setTvAnchor(state.roomNumber.value, id, + UserStore.to.userInfoEntity.value!.userName); } - /// 启动共享屏幕 + /// 启动共享屏幕(此版本不做) /*Future startScreenCapture() async { debugPrint("wgs输出===:RTC-启动屏幕共享"); state.isOpenShare.value = true; @@ -290,7 +271,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ doHttpSetTvAnchor(UserStore.to.userInfoEntity.value!.screenShareId); }*/ - /// 停止共享屏幕 + /// 停止共享屏幕(此版本不做) /*Future stopScreenCapture() async { debugPrint("wgs输出===:RTC-停止屏幕共享"); state.isOpenShare.value = false; @@ -308,16 +289,19 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ doHttpSetTvAnchor(UserStore.to.userInfoEntity.value!.uid); }*/ - /// ------------------------------------------------------------------------------signalR Socket相关 /// Socket长连接 Future signalRSocket() async { state.hubConnection.value = HubConnectionBuilder() - .withUrl('${RequestConfig().baseUrl}/session-manage', HttpConnectionOptions( - transport: HttpTransportType.webSockets, - accessTokenFactory: () async => await Future.value(UserStore.to.token), - logging: (level, message) => debugPrint("wgs输出===:SignalR Socket-$message"), - )) + .withUrl( + '${RequestConfig().baseUrl}/session-manage', + HttpConnectionOptions( + transport: HttpTransportType.webSockets, + accessTokenFactory: () async => + await Future.value(UserStore.to.token), + logging: (level, message) => + debugPrint("wgs输出===:SignalR Socket-$message"), + )) // 配置断线重连策略:默认重连4次,分别间隔10秒 4秒 10秒 10秒 .withAutomaticReconnect([10000, 4000, 10000, 10000]).build(); @@ -327,42 +311,41 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ /// ------------------------------------------------------------------------------发言权限相关回调 /// 开启关闭发言权限 - state.hubConnection.value?.on("ManagerRefresh", (e){ + state.hubConnection.value?.on("ManagerRefresh", (e) { // var jsonStr = const Utf8Decoder().convert(json.encode(e?[0]).runes.toList()); var jsonStr = json.encode(e?[0]); var listDynamic = jsonDecode(jsonStr); MeetingRoomUser meetingRoomUser = MeetingRoomUser.fromJson(listDynamic); - if(meetingRoomUser.isRoomManager == true){ + if (meetingRoomUser.isRoomManager == true) { debugPrint("wgs输出===:Socket-开启发言权限:${e?[0]}--${e?[1]}"); - for(MeetingRoomUser mru in state.cacheUsers.value){ - if(mru.uid == meetingRoomUser.uid){ + for (MeetingRoomUser mru in state.cacheUsers.value) { + if (mru.uid == meetingRoomUser.uid) { mru.roleId = meetingRoomUser.roleId; mru.enableMicr = true; mru.isRoomManager = meetingRoomUser.isRoomManager; } } - if(UserStore.to.userInfoEntity.value!.uid == meetingRoomUser.uid){ + if (UserStore.to.userInfoEntity.value!.uid == meetingRoomUser.uid) { state.isSpeak.value = true; state.isOpenMicrophone.value = true; // 设置声网SDK角色为主播 setClientRole("主播"); debugPrint("wgs输出===:Socket-开启发言权限:主播"); } - }else{ + } else { debugPrint("wgs输出===:Socket-关闭发言权限:${e?[0]}--${e?[1]}"); - for(MeetingRoomUser mru in state.cacheUsers.value){ - if(mru.uid == meetingRoomUser.uid){ + for (MeetingRoomUser mru in state.cacheUsers.value) { + if (mru.uid == meetingRoomUser.uid) { mru.roleId = meetingRoomUser.roleId; mru.enableMicr = false; mru.isRoomManager = meetingRoomUser.isRoomManager; } } - if(UserStore.to.userInfoEntity.value!.uid == meetingRoomUser.uid){ + if (UserStore.to.userInfoEntity.value!.uid == meetingRoomUser.uid) { state.isSpeak.value = false; state.isOpenMicrophone.value = false; state.isOpenCamera.value = false; state.isOpenShare.value = false; - state.isSelf.value = false; state.remoteUid.value = ""; // 设置声网SDK角色为观众 @@ -375,10 +358,9 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ state.floating.value?.close(); // 切换页面状态 changePageState(0); - // 停止共享屏幕 + // 停止共享屏幕(此版本不做) // stopScreenCapture(); - debugPrint("wgs输出===:Socket-关闭发言权限:观众"); } } @@ -386,13 +368,13 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ /// ------------------------------------------------------------------------------麦克风相关回调 /// 所有用户开闭麦回调 - state.hubConnection.value?.on("OperAllMicr", (e){ - if(e?[0] == true){ + state.hubConnection.value?.on("OperAllMicr", (e) { + if (e?[0] == true) { debugPrint("wgs输出===:Socket-全员开麦"); - }else{ + } else { debugPrint("wgs输出===:Socket-全员闭麦"); } - for(var i = 0; i < state.cacheUsers.value.length; i++){ + for (var i = 0; i < state.cacheUsers.value.length; i++) { state.cacheUsers.value[i].enableMicr = e?[0]; } state.users.value = state.cacheUsers.value; @@ -400,32 +382,34 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ }); /// 用户单独开闭麦回调 - state.hubConnection.value?.on("OperMicr", (e){ + state.hubConnection.value?.on("OperMicr", (e) { // var jsonStr = const Utf8Decoder().convert(json.encode(e?[0]).runes.toList()); var jsonStr = json.encode(e?[0]); var listDynamic = jsonDecode(jsonStr); MeetingRoomUser meetingRoomUser = MeetingRoomUser.fromJson(listDynamic); - if(meetingRoomUser.enableMicr == true){ - debugPrint("wgs输出===:Socket-用户单独开麦${meetingRoomUser.uid}-${meetingRoomUser.userName}"); - for(MeetingRoomUser mru in state.cacheUsers.value){ - if(mru.uid == meetingRoomUser.uid){ + if (meetingRoomUser.enableMicr == true) { + debugPrint( + "wgs输出===:Socket-用户单独开麦${meetingRoomUser.uid}-${meetingRoomUser.userName}"); + for (MeetingRoomUser mru in state.cacheUsers.value) { + if (mru.uid == meetingRoomUser.uid) { mru.enableMicr = true; } } - if(meetingRoomUser.uid == UserStore.to.userInfoEntity.value!.uid) { + if (meetingRoomUser.uid == UserStore.to.userInfoEntity.value!.uid) { state.isOpenMicrophone.value = true; // 恢复发布音频流 muteLocalAudioStream(false); } - }else{ - debugPrint("wgs输出===:Socket-用户单独闭麦${meetingRoomUser.uid}-${meetingRoomUser.userName}"); - for(MeetingRoomUser mru in state.cacheUsers.value){ - if(mru.uid == meetingRoomUser.uid){ + } else { + debugPrint( + "wgs输出===:Socket-用户单独闭麦${meetingRoomUser.uid}-${meetingRoomUser.userName}"); + for (MeetingRoomUser mru in state.cacheUsers.value) { + if (mru.uid == meetingRoomUser.uid) { mru.enableMicr = false; } } - if(meetingRoomUser.uid == UserStore.to.userInfoEntity.value!.uid) { + if (meetingRoomUser.uid == UserStore.to.userInfoEntity.value!.uid) { state.isOpenMicrophone.value = false; // 取消发布音频流 @@ -436,26 +420,27 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ /// ------------------------------------------------------------------------------会议室进出相关回调 /// 远端用户或主播加入会议室回调 - state.hubConnection.value?.on("UserJoined", (e){ + state.hubConnection.value?.on("UserJoined", (e) { // var jsonStr = const Utf8Decoder().convert(json.encode(user).runes.toList()); var jsonStr = json.encode(e); var listDynamic = jsonDecode(jsonStr); - List meetingRoomUsers = (listDynamic as List).map((e) => MeetingRoomUser.fromJson((e as Map))).toList(); + List meetingRoomUsers = (listDynamic as List) + .map((e) => MeetingRoomUser.fromJson((e as Map))) + .toList(); state.cacheUsers.value.addAll(meetingRoomUsers); state.users.value = state.cacheUsers.value; debugPrint("wgs输出===:Socket-远端用户或主播加入会议室:$jsonStr"); }); /// 远端用户或主播离开会议室回调 - state.hubConnection.value?.on("UserLeave", (e){ + state.hubConnection.value?.on("UserLeave", (e) { // var jsonStr = const Utf8Decoder().convert(json.encode(uid).runes.toList()); var jsonStr = json.encode(e); List listDynamic = jsonDecode(jsonStr); - for(String uidStr in listDynamic){ - for(var j = 0; j < state.cacheUsers.value.length; j++){ - if(state.cacheUsers.value[j].uid == uidStr){ + for (String uidStr in listDynamic) { + for (var j = 0; j < state.cacheUsers.value.length; j++) { + if (state.cacheUsers.value[j].uid == uidStr) { state.cacheUsers.value.removeAt(j); - doHttpGetTvAnchor(); } } } @@ -464,7 +449,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ }); /// 被移除会议回调 - state.hubConnection.value?.on("ForceExitRoom", (e){ + state.hubConnection.value?.on("ForceExitRoom", (e) { // var jsonStr = const Utf8Decoder().convert(json.encode(e).runes.toList()); var jsonStr = json.encode(e); debugPrint("wgs输出===:Socket-被移除会议:$jsonStr"); @@ -473,7 +458,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ }); /// 全员结束会议回调 - state.hubConnection.value?.on("AllLeave", (e){ + state.hubConnection.value?.on("AllLeave", (e) { debugPrint("wgs输出===:Socket-全员结束会议"); Get.back(); ToastUtils.showSuccess("会议已结束"); @@ -481,87 +466,88 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ /// ------------------------------------------------------------------------------会议室聊天相关回调 /// 会议室接收消息回调 - state.hubConnection.value?.on("ReceiveMessage", (e){ + state.hubConnection.value?.on("ReceiveMessage", (e) { // var jsonStr = const Utf8Decoder().convert(json.encode(e).runes.toList()); var jsonStr = json.encode(e); List list = json.decode(jsonStr); - MeetingRoomMsg meetingRoomMsg = MeetingRoomMsg(list[0],list[1],list[2],0); + MeetingRoomMsg meetingRoomMsg = + MeetingRoomMsg(list[0], list[1], list[2], 0); state.meetingRoomMsgs.value.add(meetingRoomMsg); update(); Future.delayed(const Duration(milliseconds: 100), () { - state.chatController.jumpTo(state.chatController.position.maxScrollExtent); + state.chatController + .jumpTo(state.chatController.position.maxScrollExtent); }); debugPrint("wgs输出===:Socket-会议室接收消息:$jsonStr"); }); /// ------------------------------------------------------------------------------摄像头或者屏幕相关回调 /// 用户单独开闭摄像头回调 - state.hubConnection.value?.on("OperCamera", (e){ + state.hubConnection.value?.on("OperCamera", (e) { // var jsonStr = const Utf8Decoder().convert(json.encode(e?[0]).runes.toList()); var jsonStr = json.encode(e?[0]); var listDynamic = jsonDecode(jsonStr); MeetingRoomUser meetingRoomUser = MeetingRoomUser.fromJson(listDynamic); - if(meetingRoomUser.enableCamera == true){ + if (meetingRoomUser.enableCamera == true) { debugPrint("wgs输出===:Socket-用户单独开摄像头"); - for(MeetingRoomUser mru in state.cacheUsers.value){ - if(mru.uid == meetingRoomUser.uid){ + + // 遍历会议室用户列表,更改摄像头状态 + for (MeetingRoomUser mru in state.cacheUsers.value) { + if (mru.uid == meetingRoomUser.uid) { mru.enableCamera = true; } } - if(meetingRoomUser.uid == UserStore.to.userInfoEntity.value!.uid){ + + if (meetingRoomUser.uid == UserStore.to.userInfoEntity.value!.uid) { + // 开启摄像头的用户是自己时 + // 更改自己摄像头状态为开启 state.isOpenCamera.value = true; // 恢复发布视频流 muteLocalVideoStream(false); // 开始本地预览 startPreview(); - // 只有在视频大屏,并且全员观看不是自己的时候 - if(state.pageIndex.value == 0 && state.isSelf.value == false){ - // 打开本地预览悬浮窗 + // 切换页面到视频状态 + changePageState(1); + // 只有在视频大屏并且全员观看主播不是自己的时候,才打开右上角悬浮窗 + if (state.pageIndex.value == 0 && state.remoteUid.value != "0") { state.floating.value?.open(state.context.value!); } - changePageState(1); } - }else{ + } else { debugPrint("wgs输出===:Socket-用户单独闭摄像头"); - for(MeetingRoomUser mru in state.cacheUsers.value){ - if(mru.uid == meetingRoomUser.uid){ + + // 遍历会议室用户列表,更改摄像头状态 + for (MeetingRoomUser mru in state.cacheUsers.value) { + if (mru.uid == meetingRoomUser.uid) { mru.enableCamera = false; } } - if(meetingRoomUser.uid == UserStore.to.userInfoEntity.value!.uid){ + + if (meetingRoomUser.uid == UserStore.to.userInfoEntity.value!.uid) { + // 关闭摄像头的用户是自己时 + // 更改自己摄像头状态为关闭 state.isOpenCamera.value = false; - - // 当前全员观看是自己时 - if(state.isSelf.value == true){ - changePageState(0); - state.isSelf.value = false; - } - // 取消发布视频流 muteLocalVideoStream(true); // 停止本地预览 stopPreview(); + // 当前全员观看主播是自己时 + if (state.remoteUid.value == "0") { + changePageState(0); + } // 关闭本地预览悬浮窗 - state.floating.value?.close(); - }else{ - if(meetingRoomUser.uid == state.remoteUid.value || meetingRoomUser.screenShareId == state.remoteUid.value){ - if(state.isOpenCamera.value == true){ - state.remoteUid.value = ""; - changePageState(0); - } + if (state.floating.value?.isShowing == true) { + state.floating.value?.close(); } } } }); /// 设置新的全员观看视频主播回调 - state.hubConnection.value?.on("ShowUser", (e){ + state.hubConnection.value?.on("ShowUser", (e) { // var jsonStr = const Utf8Decoder().convert(json.encode(e).runes.toList()); var jsonStr = json.encode(e); List list = json.decode(jsonStr); - /*if(list[0].toString().length != 9){ - state.remoteUid.value = list[0].toString(); - }*/ doHttpGetTvAnchor(); debugPrint("wgs输出===:Socket-设置新的全员观看视频主播:${list[0]}"); }); @@ -569,13 +555,15 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ /// 加入会议室 Future joinMeetingToSocket() async { - await state.hubConnection.value?.invoke("joinChannel", args: [state.roomNumber.value, false, false, false]); + await state.hubConnection.value?.invoke("joinChannel", + args: [state.roomNumber.value, false, false, false]); mergeFetch(); } /// 离开会议室 Future leaveMeetingToSocket() async { - await state.hubConnection.value?.invoke("levelChannel", args: [state.roomNumber.value]); + await state.hubConnection.value + ?.invoke("levelChannel", args: [state.roomNumber.value]); state.hubConnection.value?.stop(); } @@ -584,13 +572,16 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ MeetingRoomMsg meetingRoomMsg = MeetingRoomMsg( UserStore.to.userInfoEntity.value!.uid, UserStore.to.userInfoEntity.value!.userName, - msg,1); + msg, + 1); state.meetingRoomMsgs.value.add(meetingRoomMsg); update(); Future.delayed(const Duration(milliseconds: 100), () { - state.chatController.jumpTo(state.chatController.position.maxScrollExtent); + state.chatController + .jumpTo(state.chatController.position.maxScrollExtent); }); - await state.hubConnection.value?.invoke("sendChannelMsg", args: [state.roomNumber.value, msg]); + await state.hubConnection.value + ?.invoke("sendChannelMsg", args: [state.roomNumber.value, msg]); } /// ------------------------------------------------------------------------------声网SDK相关 @@ -615,119 +606,134 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ // 设置默认音频路由为听筒 await state.rctEngine.value?.setDefaultAudioRouteToSpeakerphone(false); // 打开用户音量回调 - await state.rctEngine.value?.enableAudioVolumeIndication(interval: 200, smooth: 3, reportVad: true); + await state.rctEngine.value?.enableAudioVolumeIndication( + interval: 200, smooth: 3, reportVad: true); joinMeetingToRtc(); // 回调 state.rctEngine.value?.registerEventHandler( RtcEngineEventHandler( + // 成功加入会议室回调 + onJoinChannelSuccess: (RtcConnection connection, int elapsed) { + debugPrint("wgs输出===:RTC-自己加入会议室,ID:${connection.localUid}"); + }, - // 成功加入会议室回调 - onJoinChannelSuccess: (RtcConnection connection, int elapsed) { - debugPrint("wgs输出===:RTC-自己加入会议室,ID:${connection.localUid}"); - }, + // 成功离开会议室回调 + onLeaveChannel: (RtcConnection connection, RtcStats stats) { + debugPrint("wgs输出===:RTC-自己离开会议室,ID:${connection.localUid}"); + }, - // 成功离开会议室回调 - onLeaveChannel: (RtcConnection connection, RtcStats stats){ - debugPrint("wgs输出===:RTC-自己离开会议室,ID:${connection.localUid}"); - }, + // 远端用户或主播加入当前会议室回调-主播角色才能接收该回调 + onUserJoined: (RtcConnection connection, int remoteUid, int elapsed) { + debugPrint("wgs输出===:RTC-远端用户或主播加入会议室,用户或主机的ID:$remoteUid"); + }, - // 远端用户或主播加入当前会议室回调-主播角色才能接收该回调 - onUserJoined: (RtcConnection connection, int remoteUid, int elapsed) { - debugPrint("wgs输出===:RTC-远端用户或主播加入会议室,用户或主机的ID:$remoteUid"); - }, + // 远端用户或主播离开当前会议室回调-主播角色才能接收该回调 + onUserOffline: (RtcConnection connection, int remoteUid, + UserOfflineReasonType reason) async { + debugPrint("wgs输出===:RTC-远端用户或主播离开会议室,用户或主机的ID:$remoteUid"); + }, - // 远端用户或主播离开当前会议室回调-主播角色才能接收该回调 - onUserOffline: (RtcConnection connection, int remoteUid, UserOfflineReasonType reason) async { - debugPrint("wgs输出===:RTC-远端用户或主播离开会议室,用户或主机的ID:$remoteUid"); - }, + // 音频路由发生变化回调 + onAudioRoutingChanged: (int routing) { + debugPrint("wgs输出===:RTC-音频路由切换:$routing"); + state.communicationMode.value = routing; + if (routing == 1) { + debugPrint("wgs输出===:RTC-音频路由切换为听筒"); + } else if (routing == 3) { + debugPrint("wgs输出===:RTC-音频路由切换为扬声器"); + } else { + debugPrint("wgs输出===:RTC-音频路由切换为外接设备"); + } + }, - // 音频路由发生变化回调 - onAudioRoutingChanged: (int routing){ - debugPrint("wgs输出===:RTC-音频路由切换:$routing"); - state.communicationMode.value = routing; - if(routing == 1){ - debugPrint("wgs输出===:RTC-音频路由切换为听筒"); - }else if(routing == 3){ - debugPrint("wgs输出===:RTC-音频路由切换为扬声器"); - }else{ - debugPrint("wgs输出===:RTC-音频路由切换为外接设备"); + // 音频采集开关回调 + onLocalAudioStateChanged: (RtcConnection connection, + LocalAudioStreamState state, LocalAudioStreamReason reason) { + debugPrint("wgs输出===:RTC-音频采集开关:$state"); + }, + + // 远端视频状态发生改变回调 + onRemoteVideoStateChanged: (RtcConnection connection, + int remoteUid, + RemoteVideoState remoteVideoState, + RemoteVideoStateReason remoteVideoStateReason, + int elapsed) { + debugPrint( + "wgs输出===:RTC-远端视频状态发生改变:ID-$remoteUid-状态-$remoteVideoStateReason"); + if (remoteVideoStateReason == + RemoteVideoStateReason.remoteVideoStateReasonRemoteMuted) { + // 远端用户停止发送视频流或远端用户禁用视频模块 + if (remoteUid.toString().length != 9) { + // 摄像头 + if (remoteUid.toString() == state.remoteUid.value) { + // 如果停止发送视频流或禁用视频模块的远端用户是当前全员观看主播 + doHttpGetTvAnchor(); + } + } else { + // 共享屏幕(此版本不做) } - }, + } + }, - // 音频采集开关回调 - onLocalAudioStateChanged: (RtcConnection connection, LocalAudioStreamState state, LocalAudioStreamReason reason){ - debugPrint("wgs输出===:RTC-音频采集开关:$state"); - }, - - // 远端视频状态发生改变回调 - onRemoteVideoStateChanged: (RtcConnection connection, - int remoteUid, - RemoteVideoState state, - RemoteVideoStateReason reason, - int elapsed){ - debugPrint("wgs输出===:RTC-远端视频状态发生改变:$state"); - }, - - // 用户音量提示回调 - onAudioVolumeIndication: ( - RtcConnection connection, - List speakers, - int speakerNumber, - int totalVolume){ - if(speakers.isNotEmpty){ - for(AudioVolumeInfo avi in speakers){ - for(MeetingRoomUser mru in state.cacheUsers.value){ - // 用于更改语音布局里的用户列表麦克风 - if(avi.uid == 0){ - //debugPrint("wgs输出===:RTC-用户音量提示(自己):${CountMicrophoneVolume.getVolume(avi.volume!)}"); + // 用户音量提示回调 + onAudioVolumeIndication: (RtcConnection connection, + List speakers, + int speakerNumber, + int totalVolume) { + if (speakers.isNotEmpty) { + for (AudioVolumeInfo avi in speakers) { + for (MeetingRoomUser mru in state.cacheUsers.value) { + // 用于更改语音布局里的用户列表麦克风 + if (avi.uid == 0) { + //debugPrint("wgs输出===:RTC-用户音量提示(自己):${CountMicrophoneVolume.getVolume(avi.volume!)}"); + mru.volume = CountMicrophoneVolume.getVolume(avi.volume!); + state.microphoneVolume.value = + CountMicrophoneVolume.getVolume(avi.volume!); + } else { + if (avi.uid.toString() == mru.uid) { + //debugPrint("wgs输出===:RTC-用户音量提示(远端用户):${speakers[0].uid}--${speakers[0].volume}"); mru.volume = CountMicrophoneVolume.getVolume(avi.volume!); - state.microphoneVolume.value = CountMicrophoneVolume.getVolume(avi.volume!); - }else{ - if(avi.uid.toString() == mru.uid){ - //debugPrint("wgs输出===:RTC-用户音量提示(远端用户):${speakers[0].uid}--${speakers[0].volume}"); - mru.volume = CountMicrophoneVolume.getVolume(avi.volume!); - - if(avi.volume != 0){ - state.spokesman.value = mru.userName; - state.spokesmanVolume.value = CountMicrophoneVolume.getVolume(avi.volume!); - }else{ - state.spokesman.value = ""; - state.spokesmanVolume.value = 0; - } + if (avi.volume != 0) { + state.spokesman.value = mru.userName; + state.spokesmanVolume.value = + CountMicrophoneVolume.getVolume(avi.volume!); + } else { + state.spokesman.value = ""; + state.spokesmanVolume.value = 0; } } } } } - }, + } + }, - // 切换用户角色回调 - onClientRoleChanged: ( - RtcConnection connection, - ClientRoleType oldRole, - ClientRoleType newRole, - ClientRoleOptions newRoleOptions){ - debugPrint("wgs输出===:RTC-切换用户角色为:${newRole == ClientRoleType.clientRoleBroadcaster ? "主播" : "观众"}"); - }, + // 切换用户角色回调 + onClientRoleChanged: (RtcConnection connection, ClientRoleType oldRole, + ClientRoleType newRole, ClientRoleOptions newRoleOptions) { + debugPrint( + "wgs输出===:RTC-切换用户角色为:${newRole == ClientRoleType.clientRoleBroadcaster ? "主播" : "观众"}"); + }, - // token即将在30秒内过期回调 - onTokenPrivilegeWillExpire: (RtcConnection connection, String token){ - doHttpGetMeetingToken(false); - }, + // token即将在30秒内过期回调 + onTokenPrivilegeWillExpire: (RtcConnection connection, String token) { + doHttpGetMeetingToken(false); + }, - // 本地视频状态发生改变回调 - onLocalVideoStateChanged: (VideoSourceType source, LocalVideoStreamState state, LocalVideoStreamReason reason){ - debugPrint("wgs输出===:RTC-本地视频状态发生改变:$source--$state--$reason"); - }, + // 本地视频状态发生改变回调 + onLocalVideoStateChanged: (VideoSourceType source, + LocalVideoStreamState state, LocalVideoStreamReason reason) { + debugPrint("wgs输出===:RTC-本地视频状态发生改变:$source--$state--$reason"); + }, - // 获取设备权限出错回调 - /*onPermissionError: (PermissionType permissionType){ + // 获取设备权限出错回调 + /*onPermissionError: (PermissionType permissionType){ debugPrint("wgs输出===:RTC-获取设备权限出错:$permissionType"); if(permissionType == PermissionType.screenCapture){ - // 获取共享屏幕出错 + // 获取共享屏幕出错(此版本不做) state.isOpenShare.value = false; stopScreenCapture(); } @@ -743,19 +749,19 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ channelId: state.roomNumber.value, uid: int.parse(UserStore.to.userInfoEntity.value!.uid), options: const ChannelMediaOptions( - // 自动订阅所有视频流 - autoSubscribeVideo: true, - // 自动订阅所有音频流 - autoSubscribeAudio: true, - // 发布摄像头采集的视频 - publishCameraTrack: true, - // 发布麦克风采集的音频 - publishMicrophoneTrack: true, - // 设置用户角色为 clientRoleBroadcaster(主播)或 clientRoleAudience(观众) - // 这里设置角色为clientRoleBroadcaster(主播) - // 主播:可以在频道内发布音视频,同时也可以订阅其他主播发布的音视频 - // 观众:可以在频道内订阅音视频,不具备发布音视频权限 - clientRoleType: ClientRoleType.clientRoleAudience), + // 自动订阅所有视频流 + autoSubscribeVideo: true, + // 自动订阅所有音频流 + autoSubscribeAudio: true, + // 发布摄像头采集的视频 + publishCameraTrack: true, + // 发布麦克风采集的音频 + publishMicrophoneTrack: true, + // 设置用户角色为 clientRoleBroadcaster(主播)或 clientRoleAudience(观众) + // 这里设置角色为clientRoleBroadcaster(主播) + // 主播:可以在频道内发布音视频,同时也可以订阅其他主播发布的音视频 + // 观众:可以在频道内订阅音视频,不具备发布音视频权限 + clientRoleType: ClientRoleType.clientRoleAudience), ); } @@ -769,17 +775,20 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ /// 设置用户角色 Future setClientRole(String roleStr) async { - if(roleStr == "主播"){ - await state.rctEngine.value?.setClientRole(role: ClientRoleType.clientRoleBroadcaster); - }else{ - await state.rctEngine.value?.setClientRole(role: ClientRoleType.clientRoleAudience); + if (roleStr == "主播") { + await state.rctEngine.value + ?.setClientRole(role: ClientRoleType.clientRoleBroadcaster); + } else { + await state.rctEngine.value + ?.setClientRole(role: ClientRoleType.clientRoleAudience); } } /// 设置音频输出路由(没有外接设备时生效) Future setEnableSpeakerphone(int mode) async { state.communicationMode.value = mode; - await state.rctEngine.value?.setEnableSpeakerphone(mode == 1 ? false : true); + await state.rctEngine.value + ?.setEnableSpeakerphone(mode == 1 ? false : true); } /// 设置启用视频模块 @@ -789,7 +798,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ /// 取消或恢复发布本地音频流 Future muteLocalAudioStream(bool mute) async { - await state.rctEngine.value?.muteLocalAudioStream(mute); + await state.rctEngine.value?.muteLocalAudioStream(mute); } /// 取消或恢复发布本地视频流 diff --git a/wgshare/lib/pages/metting/meeting_main_state.dart b/wgshare/lib/pages/metting/meeting_main_state.dart index f487389..0f0f671 100644 --- a/wgshare/lib/pages/metting/meeting_main_state.dart +++ b/wgshare/lib/pages/metting/meeting_main_state.dart @@ -43,7 +43,7 @@ class MeetingMainState { /// 会议室token late RxString meetingToken = "".obs; - + /// 会议室信息 late Rx meetingRoomInfo = Rx(null); @@ -70,8 +70,6 @@ class MeetingMainState { late RxBool isOpenShare = false.obs; /// 当前视频主播ID late RxString remoteUid = "".obs; - /// 当前主播是否是自己 - late RxBool isSelf = false.obs; /// 当前谁在说话 late RxString spokesman = "".obs; diff --git a/wgshare/lib/pages/metting/meeting_main_view.dart b/wgshare/lib/pages/metting/meeting_main_view.dart index be3b032..73365ad 100644 --- a/wgshare/lib/pages/metting/meeting_main_view.dart +++ b/wgshare/lib/pages/metting/meeting_main_view.dart @@ -10,11 +10,8 @@ import 'package:get/get.dart'; import 'package:liquid_progress_indicator_v2/liquid_progress_indicator.dart'; import 'package:preload_page_view/preload_page_view.dart'; import 'package:wgshare/common/store/user_store.dart'; -import 'package:wgshare/pages/metting/share/meeting_main_share_view.dart'; -import 'package:wgshare/pages/metting/video/meeting_main_video_view.dart'; import 'package:wgshare/utils/toast_utils.dart'; -import '../../common/models/meeting_room_user.dart'; import '../../utils/color_util.dart'; import '../../utils/cus_behavior.dart'; import '../../view/view_svg_path.dart'; @@ -87,8 +84,7 @@ class MeetingMainPageState extends State { width: 20.w, height: 20.h, ), - onTap: () { - }, + onTap: () {}, ), SizedBox(width: 16.w), GestureDetector( @@ -178,7 +174,7 @@ class MeetingMainPageState extends State { height: 22.h, ), onTap: () { - logic.doHttpCancelSpeak(); + logic.cancelSpeak(); }, ), ), @@ -215,109 +211,81 @@ class MeetingMainPageState extends State { child: MeetingMainVoiceComponent( users: state.cacheUsers.value)), - // 视频-别人是主播时 + // 视频-共享 Visibility( - visible: state.pageState.value == 1 && state.isSelf.value == false, + visible: state.pageState.value == 1, child: null != state.rctEngine.value ? Stack( - alignment: Alignment.center, - children: [ - PreloadPageView.builder( - preloadPagesCount: 2, - itemCount: 2, - itemBuilder: (BuildContext context, int position) => returnPageToOther(position), - controller: PreloadPageController(initialPage: 0), - onPageChanged: (int position) { - state.pageIndex.value = position; - if(state.isSpeak.value == true && state.isOpenCamera.value == true && state.isSelf.value == false){ - if(position == 0){ - state.floating.value?.open(context); - }else{ - state.floating.value?.close(); - } - } - }, - ), - - /// pageview 指示器 - Positioned( - bottom: 16, - child: Row( + alignment: Alignment.center, children: [ - Container( - width: 8.w, - height: 8.h, - margin: const EdgeInsets.only(right: 6), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8), - color: state.pageIndex.value == 0 - ? ColorUtil.Color_255_255_255 - : ColorUtil.Color_108_108_108), + PreloadPageView.builder( + preloadPagesCount: 2, + itemCount: 2, + itemBuilder: (BuildContext context, + int position) => + returnPage(position), + controller: PreloadPageController( + initialPage: 0), + onPageChanged: (int position) { + state.pageIndex.value = position; + if (state.isSpeak.value == true && + state.isOpenCamera.value == + true && + state.remoteUid.value != "0") { + if (position == 0) { + state.floating.value + ?.open(context); + } else { + state.floating.value?.close(); + } + } + }, ), - Container( - width: 8.w, - height: 8.h, - margin: const EdgeInsets.only(left: 6), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8), - color: state.pageIndex.value == 1 - ? ColorUtil.Color_255_255_255 - : ColorUtil.Color_108_108_108), - ) - ], - ), - ), - ], - ) - : Container()), - // 视频-自己时主播时 - Visibility( - visible: state.pageState.value == 1 && state.isSelf.value == true, - child: null != state.rctEngine.value - ? Stack( - alignment: Alignment.center, - children: [ - PreloadPageView.builder( - preloadPagesCount: 2, - itemCount: 2, - itemBuilder: (BuildContext context, int position) => returnPageSelf(position), - controller: PreloadPageController(initialPage: 0), - onPageChanged: (int position) { - state.pageIndex.value = position; - }, - ), - - /// pageview 指示器 - Positioned( - bottom: 16, - child: Row( - children: [ - Container( - width: 8.w, - height: 8.h, - margin: const EdgeInsets.only(right: 6), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8), - color: state.pageIndex.value == 0 - ? ColorUtil.Color_255_255_255 - : ColorUtil.Color_108_108_108), + /// pageview 指示器 + Positioned( + bottom: 16, + child: Row( + children: [ + Container( + width: 8.w, + height: 8.h, + margin: const EdgeInsets.only( + right: 6), + decoration: BoxDecoration( + borderRadius: + BorderRadius.circular( + 8), + color: state.pageIndex + .value == + 0 + ? ColorUtil + .Color_255_255_255 + : ColorUtil + .Color_108_108_108), + ), + Container( + width: 8.w, + height: 8.h, + margin: const EdgeInsets.only( + left: 6), + decoration: BoxDecoration( + borderRadius: + BorderRadius.circular( + 8), + color: state.pageIndex + .value == + 1 + ? ColorUtil + .Color_255_255_255 + : ColorUtil + .Color_108_108_108), + ) + ], + ), ), - Container( - width: 8.w, - height: 8.h, - margin: const EdgeInsets.only(left: 6), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8), - color: state.pageIndex.value == 1 - ? ColorUtil.Color_255_255_255 - : ColorUtil.Color_108_108_108), - ) ], - ), - ), - ], - ) + ) : Container()), GestureDetector( @@ -482,7 +450,7 @@ class MeetingMainPageState extends State { }, ), - /// 共享 + /// 共享(此版本不做) /*GestureDetector( child: Column( mainAxisAlignment: MainAxisAlignment.center, @@ -799,7 +767,7 @@ class MeetingMainPageState extends State { padding: const EdgeInsets.only(top: 16, bottom: 16), margin: const EdgeInsets.only(left: 40, right: 40), decoration: BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(6)), + borderRadius: const BorderRadius.all(Radius.circular(6)), border: Border.all(color: ColorUtil.Color_0_0_0_0), color: ColorUtil.Color_35_35_35, ), @@ -1459,7 +1427,9 @@ class MeetingMainPageState extends State { ? AgoraVideoView( controller: VideoViewController( rtcEngine: state.rctEngine.value!, - canvas: const VideoCanvas(uid: 0, setupMode: VideoViewSetupMode.videoViewSetupAdd), + canvas: const VideoCanvas( + uid: 0, + setupMode: VideoViewSetupMode.videoViewSetupAdd), ), ) : const CircularProgressIndicator(), @@ -1482,20 +1452,10 @@ class MeetingMainPageState extends State { decoration: BoxDecoration( borderRadius: BorderRadius.circular(2), color: ColorUtil.Color_0_0_0_96), - child: Row( - children: [ - /*Image.asset( - 'assets/images/meeting_main_microphone_open.png', - width: 13.w, - height: 14.h, - ), - SizedBox(width: 4.w),*/ - Text( - UserStore.to.userInfoEntity.value!.userName, - style: TextStyle( - fontSize: 10.sp, color: ColorUtil.Color_185_184_184), - ) - ], + child: Text( + UserStore.to.userInfoEntity.value!.userName, + style: TextStyle( + fontSize: 10.sp, color: ColorUtil.Color_185_184_184), ), ) ], @@ -1505,240 +1465,43 @@ class MeetingMainPageState extends State { ); } - /// 对应页数的界面-全员观看是别人时 - Widget returnPageToOther(int position){ - debugPrint("wgs输出===:全员观看是别人时布局"); + /// pageview对应页数的界面 + Widget returnPage(int position) { var pageList = []; + /// 大屏 pageList.add(Stack( alignment: Alignment.center, children: [ state.remoteUid.value != "" ? AgoraVideoView( - controller: VideoViewController( - rtcEngine: state.rctEngine.value!, - canvas: VideoCanvas(uid: int.tryParse(state.remoteUid.value), setupMode: VideoViewSetupMode.videoViewSetupAdd) - ), - ) - : const CircularProgressIndicator(), - /*Positioned( - bottom: 110, - child: GestureDetector( - child: Image.asset( - 'assets/images/meeting_main_hang_up.png', - width: 50.w, - height: 50.h, - ), - onTap: () { - }, - ), - ),*/ - Positioned( - top: 16, - right: 16, - child: Container( - height: 30, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8), - color: ColorUtil.Color_0_0_0_96), - padding: const EdgeInsets.only(left: 12, right: 12), - child: Row( - children: [ - Text( - '正在讲话:', - style: TextStyle( - fontSize: 10.sp, - color: ColorUtil.Color_185_184_184), + controller: VideoViewController( + rtcEngine: state.rctEngine.value!, + canvas: VideoCanvas( + uid: int.tryParse(state.remoteUid.value), + setupMode: VideoViewSetupMode.videoViewSetupAdd), ), - SizedBox( - width: 20.w, - height: 20.h, - child: LiquidCustomProgressIndicator( - value: - state.spokesmanVolume.value, - valueColor: - const AlwaysStoppedAnimation( - ColorUtil - .Color_2_177_136), - backgroundColor: - ColorUtil.Color_255_255_255, - direction: Axis.vertical, - shapePath: ViewSvgPath - .getMicrpphonePath()), - ), - Text( - state.spokesman.value, - style: TextStyle( - fontSize: 10.sp, - color: ColorUtil.Color_185_184_184), - ) - ], - ), - ), - ), - ], - )); - /// gridview - pageList.add(Container( - color: ColorUtil.Color_57_57_57, - child: GridView.builder( - gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 2, - childAspectRatio: 0.8, - crossAxisSpacing: 0), - itemCount: state.cacheUsers.value.length, - itemBuilder: (BuildContext ctx, index) { - return Stack( - children: [ - state.cacheUsers.value[index].enableCamera == true ? state.cacheUsers.value[index].uid == - UserStore.to.userInfoEntity.value!.uid - ? AgoraVideoView( - controller: VideoViewController( - rtcEngine: state.rctEngine.value!, - canvas: const VideoCanvas(uid: 0, setupMode: VideoViewSetupMode.videoViewSetupAdd) - ), - ) - : AgoraVideoView( - controller: VideoViewController.remote( - rtcEngine: state.rctEngine.value!, - canvas: VideoCanvas( - uid: int.tryParse( - state.cacheUsers.value[index].uid), setupMode: VideoViewSetupMode.videoViewSetupAdd), - connection: RtcConnection( - channelId: state.roomNumber.value), - ), - ) - : - Container( - color: ColorUtil.Color_16_19_13, - child: SizedBox( - width: double.infinity, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Image.asset( - 'assets/images/metting_main_no_person.png', - width: 78.w, - height: 84.h, - ), - const SizedBox(height: 12), - Text( - '该用户未开启摄像头...', - style: TextStyle( - color: ColorUtil.Color_255_255_255, - fontSize: 10.sp - ), - ) - ], + ) + : Container( + width: double.infinity, + color: ColorUtil.Color_57_57_57, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset( + 'assets/images/metting_main_no_person.png', + width: 138.w, + height: 144.h, ), - ), + const SizedBox(height: 20), + Text( + '主持人正在赶来的路上...', + style: TextStyle( + color: ColorUtil.Color_255_255_255, fontSize: 14.sp), + ) + ], ), - Positioned( - left: 4, - bottom: 4, - child: Row( - children: [ - Visibility( - visible: state.cacheUsers.value[index].uid == UserStore.to.userInfoEntity.value!.uid, - child: Image.asset( - 'assets/images/meeting_main_own.png', - width: 24.w, - height: 24.h, - ), - ), - Container( - height: 20, - margin: const EdgeInsets.only(left: 4), - padding: - const EdgeInsets.only(left: 4, right: 4), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(2), - color: ColorUtil.Color_0_0_0_96), - child: state.cacheUsers.value[index].enableMicr == true - ? Row( - mainAxisAlignment: - MainAxisAlignment.center, - crossAxisAlignment: - CrossAxisAlignment.center, - children: [ - SizedBox( - width: 20.w, - height: 20.h, - child: LiquidCustomProgressIndicator( - value: - state.cacheUsers.value[index] - .volume ?? - 0.0, - valueColor: - const AlwaysStoppedAnimation( - ColorUtil - .Color_2_177_136), - backgroundColor: - ColorUtil.Color_255_255_255, - direction: Axis.vertical, - shapePath: ViewSvgPath - .getMicrpphonePath()), - ), - - ], - ) - : Row( - mainAxisAlignment: - MainAxisAlignment.center, - crossAxisAlignment: - CrossAxisAlignment.center, - children: [ - Image.asset( - 'assets/images/meeting_main_microphone_open.png', - width: 20.w, - height: 20.h, - ), - Text( - state.cacheUsers.value[index].userName, - style: TextStyle( - fontSize: 12.sp, - color: ColorUtil - .Color_255_255_255), - ) - ], - ), - ) - ], - ), - ) - ], - ); - }), - )); - return pageList[position]; - } - - /// 对应页数的界面-全员观看是自己时 - Widget returnPageSelf(int position){ - debugPrint("wgs输出===:全员观看是自己时布局"); - var pageList = []; - /// 大屏 - pageList.add(Stack( - alignment: Alignment.center, - children: [ - AgoraVideoView( - controller: VideoViewController( - rtcEngine: state.rctEngine.value!, - canvas: const VideoCanvas(uid: 0, setupMode: VideoViewSetupMode.videoViewSetupAdd), - ), - ), - /*Positioned( - bottom: 110, - child: GestureDetector( - child: Image.asset( - 'assets/images/meeting_main_hang_up.png', - width: 50.w, - height: 50.h, - ), - onTap: () { - }, - ), - ),*/ + ), Positioned( top: 16, right: 16, @@ -1753,30 +1516,23 @@ class MeetingMainPageState extends State { Text( '正在讲话:', style: TextStyle( - fontSize: 10.sp, - color: ColorUtil.Color_185_184_184), + fontSize: 10.sp, color: ColorUtil.Color_185_184_184), ), SizedBox( width: 20.w, height: 20.h, child: LiquidCustomProgressIndicator( - value: - state.spokesmanVolume.value, - valueColor: - const AlwaysStoppedAnimation( - ColorUtil - .Color_2_177_136), - backgroundColor: - ColorUtil.Color_255_255_255, + value: state.spokesmanVolume.value, + valueColor: const AlwaysStoppedAnimation( + ColorUtil.Color_2_177_136), + backgroundColor: ColorUtil.Color_255_255_255, direction: Axis.vertical, - shapePath: ViewSvgPath - .getMicrpphonePath()), + shapePath: ViewSvgPath.getMicrpphonePath()), ), Text( state.spokesman.value, style: TextStyle( - fontSize: 10.sp, - color: ColorUtil.Color_185_184_184), + fontSize: 10.sp, color: ColorUtil.Color_185_184_184), ) ], ), @@ -1784,68 +1540,71 @@ class MeetingMainPageState extends State { ), ], )); + /// gridview pageList.add(Container( color: ColorUtil.Color_57_57_57, child: GridView.builder( gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 2, - childAspectRatio: 0.8, - crossAxisSpacing: 0), + crossAxisCount: 2, childAspectRatio: 0.8, crossAxisSpacing: 0), itemCount: state.cacheUsers.value.length, itemBuilder: (BuildContext ctx, index) { return Stack( children: [ - state.cacheUsers.value[index].enableCamera == true ? state.cacheUsers.value[index].uid == - UserStore.to.userInfoEntity.value!.uid - ? AgoraVideoView( - controller: VideoViewController( - rtcEngine: state.rctEngine.value!, - canvas: const VideoCanvas(uid: 0, setupMode: VideoViewSetupMode.videoViewSetupAdd) - ), - ) - : AgoraVideoView( - controller: VideoViewController.remote( - rtcEngine: state.rctEngine.value!, - canvas: VideoCanvas( - uid: int.tryParse( - state.cacheUsers.value[index].uid), setupMode: VideoViewSetupMode.videoViewSetupAdd), - connection: RtcConnection( - channelId: state.roomNumber.value), - ), - ) - : - Container( - color: ColorUtil.Color_16_19_13, - child: SizedBox( - width: double.infinity, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Image.asset( - 'assets/images/metting_main_no_person.png', - width: 78.w, - height: 84.h, - ), - const SizedBox(height: 12), - Text( - '该用户未开启摄像头...', - style: TextStyle( - color: ColorUtil.Color_255_255_255, - fontSize: 10.sp + state.cacheUsers.value[index].enableCamera == true + ? state.cacheUsers.value[index].uid == + UserStore.to.userInfoEntity.value!.uid + ? AgoraVideoView( + controller: VideoViewController( + rtcEngine: state.rctEngine.value!, + canvas: const VideoCanvas( + uid: 0, + setupMode: + VideoViewSetupMode.videoViewSetupAdd)), + ) + : AgoraVideoView( + controller: VideoViewController.remote( + rtcEngine: state.rctEngine.value!, + canvas: VideoCanvas( + uid: int.tryParse( + state.cacheUsers.value[index].uid), + setupMode: + VideoViewSetupMode.videoViewSetupAdd), + connection: RtcConnection( + channelId: state.roomNumber.value), + ), + ) + : Container( + color: ColorUtil.Color_16_19_13, + child: SizedBox( + width: double.infinity, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset( + 'assets/images/metting_main_no_person.png', + width: 78.w, + height: 84.h, + ), + const SizedBox(height: 12), + Text( + '该用户未开启摄像头...', + style: TextStyle( + color: ColorUtil.Color_255_255_255, + fontSize: 10.sp), + ) + ], ), - ) - ], - ), - ), - ), + ), + ), Positioned( left: 4, bottom: 4, child: Row( children: [ Visibility( - visible: state.cacheUsers.value[index].uid == UserStore.to.userInfoEntity.value!.uid, + visible: state.cacheUsers.value[index].uid == + UserStore.to.userInfoEntity.value!.uid, child: Image.asset( 'assets/images/meeting_main_own.png', width: 24.w, @@ -1855,65 +1614,56 @@ class MeetingMainPageState extends State { Container( height: 20, margin: const EdgeInsets.only(left: 4), - padding: - const EdgeInsets.only(left: 4, right: 4), + padding: const EdgeInsets.only(left: 4, right: 4), decoration: BoxDecoration( borderRadius: BorderRadius.circular(2), color: ColorUtil.Color_0_0_0_96), child: state.cacheUsers.value[index].enableMicr == true ? Row( - mainAxisAlignment: - MainAxisAlignment.center, - crossAxisAlignment: - CrossAxisAlignment.center, - children: [ - SizedBox( - width: 20.w, - height: 20.h, - child: LiquidCustomProgressIndicator( - value: - state.cacheUsers.value[index] - .volume ?? - 0.0, - valueColor: - const AlwaysStoppedAnimation( - ColorUtil - .Color_2_177_136), - backgroundColor: - ColorUtil.Color_255_255_255, - direction: Axis.vertical, - shapePath: ViewSvgPath - .getMicrpphonePath()), - ), - Text( - state.cacheUsers.value[index].userName, - style: TextStyle( - fontSize: 12.sp, - color: ColorUtil - .Color_255_255_255), - ) - ], - ) + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + width: 20.w, + height: 20.h, + child: LiquidCustomProgressIndicator( + value: state.cacheUsers.value[index] + .volume ?? + 0.0, + valueColor: + const AlwaysStoppedAnimation( + ColorUtil.Color_2_177_136), + backgroundColor: + ColorUtil.Color_255_255_255, + direction: Axis.vertical, + shapePath: + ViewSvgPath.getMicrpphonePath()), + ), + Text( + state.cacheUsers.value[index].userName, + style: TextStyle( + fontSize: 12.sp, + color: ColorUtil.Color_255_255_255), + ) + ], + ) : Row( - mainAxisAlignment: - MainAxisAlignment.center, - crossAxisAlignment: - CrossAxisAlignment.center, - children: [ - Image.asset( - 'assets/images/meeting_main_microphone_open.png', - width: 20.w, - height: 20.h, - ), - Text( - state.cacheUsers.value[index].userName, - style: TextStyle( - fontSize: 12.sp, - color: ColorUtil - .Color_255_255_255), - ) - ], - ), + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset( + 'assets/images/meeting_main_microphone_open.png', + width: 20.w, + height: 20.h, + ), + Text( + state.cacheUsers.value[index].userName, + style: TextStyle( + fontSize: 12.sp, + color: ColorUtil.Color_255_255_255), + ) + ], + ), ) ], ), @@ -1924,5 +1674,4 @@ class MeetingMainPageState extends State { )); return pageList[position]; } - } diff --git a/wgshare/macos/Flutter/GeneratedPluginRegistrant.swift b/wgshare/macos/Flutter/GeneratedPluginRegistrant.swift index 6cdef6b..ac5210e 100644 --- a/wgshare/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/wgshare/macos/Flutter/GeneratedPluginRegistrant.swift @@ -7,6 +7,7 @@ import Foundation import agora_rtc_engine import device_info_plus +import flutter_inappwebview_macos import geolocator_apple import iris_method_channel import package_info_plus @@ -16,6 +17,7 @@ import sqflite_darwin func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { AgoraRtcNgPlugin.register(with: registry.registrar(forPlugin: "AgoraRtcNgPlugin")) DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) + InAppWebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "InAppWebViewFlutterPlugin")) GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin")) IrisMethodChannelPlugin.register(with: registry.registrar(forPlugin: "IrisMethodChannelPlugin")) FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) diff --git a/wgshare/pubspec.lock b/wgshare/pubspec.lock index 2ac6ba0..a9d7c01 100644 --- a/wgshare/pubspec.lock +++ b/wgshare/pubspec.lock @@ -6,7 +6,7 @@ packages: description: name: _fe_analyzer_shared sha256: f256b0c0ba6c7577c15e2e4e114755640a875e885099367bf6e012b19314c834 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "72.0.0" _macros: @@ -19,7 +19,7 @@ packages: description: name: agora_rtc_engine sha256: "5e7361402a8d6173467b251165bca5ffd0ef256abbe380fe6f2b5042503f83c3" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "6.5.0" analyzer: @@ -27,7 +27,7 @@ packages: description: name: analyzer sha256: b652861553cd3990d8ed361f7979dc6d7053a9ac8843fa73820ab68ce5410139 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "6.7.0" args: @@ -35,7 +35,7 @@ packages: description: name: args sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.6.0" async: @@ -43,7 +43,7 @@ packages: description: name: async sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.11.0" boolean_selector: @@ -51,7 +51,7 @@ packages: description: name: boolean_selector sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.1" build: @@ -59,7 +59,7 @@ packages: description: name: build sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.1" build_config: @@ -67,7 +67,7 @@ packages: description: name: build_config sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.1" build_daemon: @@ -75,7 +75,7 @@ packages: description: name: build_daemon sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.2" build_resolvers: @@ -83,7 +83,7 @@ packages: description: name: build_resolvers sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.2" build_runner: @@ -91,7 +91,7 @@ packages: description: name: build_runner sha256: "028819cfb90051c6b5440c7e574d1896f8037e3c96cf17aaeb054c9311cfbf4d" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.13" build_runner_core: @@ -99,7 +99,7 @@ packages: description: name: build_runner_core sha256: f8126682b87a7282a339b871298cc12009cb67109cfa1614d6436fb0289193e0 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "7.3.2" built_collection: @@ -107,7 +107,7 @@ packages: description: name: built_collection sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "5.1.1" built_value: @@ -115,7 +115,7 @@ packages: description: name: built_value sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "8.9.2" cached_network_image: @@ -123,7 +123,7 @@ packages: description: name: cached_network_image sha256: "28ea9690a8207179c319965c13cd8df184d5ee721ae2ce60f398ced1219cea1f" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.3.1" cached_network_image_platform_interface: @@ -131,7 +131,7 @@ packages: description: name: cached_network_image_platform_interface sha256: "9e90e78ae72caa874a323d78fa6301b3fb8fa7ea76a8f96dc5b5bf79f283bf2f" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.0" cached_network_image_web: @@ -139,7 +139,7 @@ packages: description: name: cached_network_image_web sha256: "205d6a9f1862de34b93184f22b9d2d94586b2f05c581d546695e3d8f6a805cd7" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" characters: @@ -147,7 +147,7 @@ packages: description: name: characters sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.0" checked_yaml: @@ -155,7 +155,7 @@ packages: description: name: checked_yaml sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.3" clock: @@ -163,7 +163,7 @@ packages: description: name: clock sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.1" code_builder: @@ -171,7 +171,7 @@ packages: description: name: code_builder sha256: "0ec10bf4a89e4c613960bf1e8b42c64127021740fb21640c29c909826a5eea3e" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.10.1" collection: @@ -179,7 +179,7 @@ packages: description: name: collection sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.18.0" convert: @@ -187,7 +187,7 @@ packages: description: name: convert sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.2" crypto: @@ -195,7 +195,7 @@ packages: description: name: crypto sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.6" cupertino_icons: @@ -203,7 +203,7 @@ packages: description: name: cupertino_icons sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.8" dart_style: @@ -211,7 +211,7 @@ packages: description: name: dart_style sha256: "7856d364b589d1f08986e140938578ed36ed948581fbc3bc9aef1805039ac5ab" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.3.7" device_info_plus: @@ -219,7 +219,7 @@ packages: description: name: device_info_plus sha256: a7fd703482b391a87d60b6061d04dfdeab07826b96f9abd8f5ed98068acc0074 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "10.1.2" device_info_plus_platform_interface: @@ -227,7 +227,7 @@ packages: description: name: device_info_plus_platform_interface sha256: "282d3cf731045a2feb66abfe61bbc40870ae50a3ed10a4d3d217556c35c8c2ba" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "7.0.1" dio: @@ -235,7 +235,7 @@ packages: description: name: dio sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "5.7.0" dio_web_adapter: @@ -243,7 +243,7 @@ packages: description: name: dio_web_adapter sha256: "33259a9276d6cea88774a0000cfae0d861003497755969c92faa223108620dc8" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" easy_debounce: @@ -251,7 +251,7 @@ packages: description: name: easy_debounce sha256: f082609cfb8f37defb9e37fc28bc978c6712dedf08d4c5a26f820fa10165a236 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.3" equatable: @@ -259,7 +259,7 @@ packages: description: name: equatable sha256: "567c64b3cb4cf82397aac55f4f0cbd3ca20d77c6c03bedbc4ceaddc08904aef7" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.7" fake_async: @@ -267,7 +267,7 @@ packages: description: name: fake_async sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.1" ffi: @@ -275,7 +275,7 @@ packages: description: name: ffi sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.3" file: @@ -283,7 +283,7 @@ packages: description: name: file sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "7.0.1" fixnum: @@ -291,7 +291,7 @@ packages: description: name: fixnum sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.1" flutter: @@ -304,7 +304,7 @@ packages: description: name: flutter_cache_manager sha256: "8207f27539deb83732fdda03e259349046a39a4c767269285f449ade355d54ba" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.3.1" flutter_easyloading: @@ -312,7 +312,7 @@ packages: description: name: flutter_easyloading sha256: ba21a3c883544e582f9cc455a4a0907556714e1e9cf0eababfcb600da191d17c - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.5" flutter_floating: @@ -320,7 +320,7 @@ packages: description: name: flutter_floating sha256: "0ff6a47c29a213c426005d248c6afe93fa76e308abbbbd6c8a35689daf11a997" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.8" flutter_hooks: @@ -328,15 +328,79 @@ packages: description: name: flutter_hooks sha256: cde36b12f7188c85286fba9b38cc5a902e7279f36dd676967106c041dc9dde70 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.20.5" + flutter_inappwebview: + dependency: "direct main" + description: + name: flutter_inappwebview + sha256: "80092d13d3e29b6227e25b67973c67c7210bd5e35c4b747ca908e31eb71a46d5" + url: "https://pub.flutter-io.cn" + source: hosted + version: "6.1.5" + flutter_inappwebview_android: + dependency: transitive + description: + name: flutter_inappwebview_android + sha256: "62557c15a5c2db5d195cb3892aab74fcaec266d7b86d59a6f0027abd672cddba" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.3" + flutter_inappwebview_internal_annotations: + dependency: transitive + description: + name: flutter_inappwebview_internal_annotations + sha256: "787171d43f8af67864740b6f04166c13190aa74a1468a1f1f1e9ee5b90c359cd" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.0" + flutter_inappwebview_ios: + dependency: transitive + description: + name: flutter_inappwebview_ios + sha256: "5818cf9b26cf0cbb0f62ff50772217d41ea8d3d9cc00279c45f8aabaa1b4025d" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.2" + flutter_inappwebview_macos: + dependency: transitive + description: + name: flutter_inappwebview_macos + sha256: c1fbb86af1a3738e3541364d7d1866315ffb0468a1a77e34198c9be571287da1 + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.2" + flutter_inappwebview_platform_interface: + dependency: transitive + description: + name: flutter_inappwebview_platform_interface + sha256: cf5323e194096b6ede7a1ca808c3e0a078e4b33cc3f6338977d75b4024ba2500 + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.3.0+1" + flutter_inappwebview_web: + dependency: transitive + description: + name: flutter_inappwebview_web + sha256: "55f89c83b0a0d3b7893306b3bb545ba4770a4df018204917148ebb42dc14a598" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.2" + flutter_inappwebview_windows: + dependency: transitive + description: + name: flutter_inappwebview_windows + sha256: "8b4d3a46078a2cdc636c4a3d10d10f2a16882f6be607962dbfff8874d1642055" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.6.0" flutter_lints: dependency: "direct dev" description: name: flutter_lints sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.0" flutter_localizations: @@ -349,7 +413,7 @@ packages: description: name: flutter_riverpod sha256: "9532ee6db4a943a1ed8383072a2e3eeda041db5657cdf6d2acecf3c21ecbe7e1" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.6.1" flutter_screenutil: @@ -357,7 +421,7 @@ packages: description: name: flutter_screenutil sha256: "8239210dd68bee6b0577aa4a090890342d04a136ce1c81f98ee513fc0ce891de" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "5.9.3" flutter_spinkit: @@ -365,7 +429,7 @@ packages: description: name: flutter_spinkit sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "5.2.1" flutter_test: @@ -383,7 +447,7 @@ packages: description: name: fluttertoast sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "8.2.8" frontend_server_client: @@ -391,7 +455,7 @@ packages: description: name: frontend_server_client sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.0" functional_widget: @@ -399,7 +463,7 @@ packages: description: name: functional_widget sha256: "5a1c64661572d927a1ddab943dea2eb8dd261275a2e989a86aa0db7613d16185" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.10.2" functional_widget_annotation: @@ -407,7 +471,7 @@ packages: description: name: functional_widget_annotation sha256: f0612079cb7e226b7be32b473bdaf85fe680370886c0c13ea69a102ccc17a0c7 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.10.0" geolocator: @@ -415,7 +479,7 @@ packages: description: name: geolocator sha256: d2ec66329cab29cb297d51d96c067d457ca519dca8589665fa0b82ebacb7dbe4 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "13.0.2" geolocator_android: @@ -423,7 +487,7 @@ packages: description: name: geolocator_android sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.6.1" geolocator_apple: @@ -431,7 +495,7 @@ packages: description: name: geolocator_apple sha256: "6154ea2682563f69fc0125762ed7e91e7ed85d0b9776595653be33918e064807" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.3.8+1" geolocator_platform_interface: @@ -439,7 +503,7 @@ packages: description: name: geolocator_platform_interface sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.2.4" geolocator_web: @@ -447,7 +511,7 @@ packages: description: name: geolocator_web sha256: "2ed69328e05cd94e7eb48bb0535f5fc0c0c44d1c4fa1e9737267484d05c29b5e" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.1.1" geolocator_windows: @@ -455,7 +519,7 @@ packages: description: name: geolocator_windows sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.3" get: @@ -463,7 +527,7 @@ packages: description: name: get sha256: e4e7335ede17452b391ed3b2ede016545706c01a02292a6c97619705e7d2a85e - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.6.6" get_storage: @@ -471,7 +535,7 @@ packages: description: name: get_storage sha256: "39db1fffe779d0c22b3a744376e86febe4ade43bf65e06eab5af707dc84185a2" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.1" glob: @@ -479,7 +543,7 @@ packages: description: name: glob sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.2" graphs: @@ -487,7 +551,7 @@ packages: description: name: graphs sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.3.2" hooks_riverpod: @@ -495,7 +559,7 @@ packages: description: name: hooks_riverpod sha256: "70bba33cfc5670c84b796e6929c54b8bc5be7d0fe15bb28c2560500b9ad06966" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.6.1" http: @@ -503,7 +567,7 @@ packages: description: name: http sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.13.6" http_multi_server: @@ -511,7 +575,7 @@ packages: description: name: http_multi_server sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.2.1" http_parser: @@ -519,7 +583,7 @@ packages: description: name: http_parser sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.2" intl: @@ -527,7 +591,7 @@ packages: description: name: intl sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.19.0" io: @@ -535,7 +599,7 @@ packages: description: name: io sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.5" iris_method_channel: @@ -543,7 +607,7 @@ packages: description: name: iris_method_channel sha256: "99143ae77073ee8fd6c19d8f56ec59ba6c332000d8bea46bb9b6a89d83feca5c" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.2" js: @@ -551,7 +615,7 @@ packages: description: name: js sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.7.1" json_annotation: @@ -559,7 +623,7 @@ packages: description: name: json_annotation sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.9.0" json_serializable: @@ -567,7 +631,7 @@ packages: description: name: json_serializable sha256: c2fcb3920cf2b6ae6845954186420fca40bc0a8abcc84903b7801f17d7050d7c - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "6.9.0" leak_tracker: @@ -575,7 +639,7 @@ packages: description: name: leak_tracker sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "10.0.5" leak_tracker_flutter_testing: @@ -583,7 +647,7 @@ packages: description: name: leak_tracker_flutter_testing sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.5" leak_tracker_testing: @@ -591,7 +655,7 @@ packages: description: name: leak_tracker_testing sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.1" lints: @@ -599,7 +663,7 @@ packages: description: name: lints sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.0" liquid_progress_indicator_v2: @@ -607,7 +671,7 @@ packages: description: name: liquid_progress_indicator_v2 sha256: "6bb2c675bab4936864a63ccd503be417e407974e11c62711917a4006bb9288b8" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.5.0" logger: @@ -615,7 +679,7 @@ packages: description: name: logger sha256: be4b23575aac7ebf01f225a241eb7f6b5641eeaf43c6a8613510fc2f8cf187d1 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.5.0" logging: @@ -623,7 +687,7 @@ packages: description: name: logging sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.0" macros: @@ -631,7 +695,7 @@ packages: description: name: macros sha256: "0acaed5d6b7eab89f63350bccd82119e6c602df0f391260d0e32b5e23db79536" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.1.2-main.4" matcher: @@ -639,7 +703,7 @@ packages: description: name: matcher sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.12.16+1" material_color_utilities: @@ -647,7 +711,7 @@ packages: description: name: material_color_utilities sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.11.1" meta: @@ -655,7 +719,7 @@ packages: description: name: meta sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.15.0" mime: @@ -663,7 +727,7 @@ packages: description: name: mime sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" octo_image: @@ -671,23 +735,23 @@ packages: description: name: octo_image sha256: "34faa6639a78c7e3cbe79be6f9f96535867e879748ade7d17c9b1ae7536293bd" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" package_config: dependency: transitive description: name: package_config - sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67" - url: "https://pub.dev" + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.1.1" + version: "2.1.0" package_info_plus: dependency: "direct main" description: name: package_info_plus sha256: da8d9ac8c4b1df253d1a328b7bf01ae77ef132833479ab40763334db13b91cce - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "8.1.1" package_info_plus_platform_interface: @@ -695,7 +759,7 @@ packages: description: name: package_info_plus_platform_interface sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.1" path: @@ -703,7 +767,7 @@ packages: description: name: path sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.9.0" path_provider: @@ -711,7 +775,7 @@ packages: description: name: path_provider sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.5" path_provider_android: @@ -719,7 +783,7 @@ packages: description: name: path_provider_android sha256: "4adf4fd5423ec60a29506c76581bc05854c55e3a0b72d35bb28d661c9686edf2" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.15" path_provider_foundation: @@ -727,7 +791,7 @@ packages: description: name: path_provider_foundation sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.1" path_provider_linux: @@ -735,7 +799,7 @@ packages: description: name: path_provider_linux sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.1" path_provider_platform_interface: @@ -743,7 +807,7 @@ packages: description: name: path_provider_platform_interface sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.2" path_provider_windows: @@ -751,7 +815,7 @@ packages: description: name: path_provider_windows sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.3.0" permission_handler: @@ -759,7 +823,7 @@ packages: description: name: permission_handler sha256: "18bf33f7fefbd812f37e72091a15575e72d5318854877e0e4035a24ac1113ecb" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "11.3.1" permission_handler_android: @@ -767,7 +831,7 @@ packages: description: name: permission_handler_android sha256: "71bbecfee799e65aff7c744761a57e817e73b738fedf62ab7afd5593da21f9f1" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "12.0.13" permission_handler_apple: @@ -775,7 +839,7 @@ packages: description: name: permission_handler_apple sha256: e6f6d73b12438ef13e648c4ae56bd106ec60d17e90a59c4545db6781229082a0 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "9.4.5" permission_handler_html: @@ -783,7 +847,7 @@ packages: description: name: permission_handler_html sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.1.3+5" permission_handler_platform_interface: @@ -791,7 +855,7 @@ packages: description: name: permission_handler_platform_interface sha256: e9c8eadee926c4532d0305dff94b85bf961f16759c3af791486613152af4b4f9 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.2.3" permission_handler_windows: @@ -799,7 +863,7 @@ packages: description: name: permission_handler_windows sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.1" photo_view: @@ -807,7 +871,7 @@ packages: description: name: photo_view sha256: "1fc3d970a91295fbd1364296575f854c9863f225505c28c46e0a03e48960c75e" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.15.0" platform: @@ -815,7 +879,7 @@ packages: description: name: platform sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.6" plugin_platform_interface: @@ -823,7 +887,7 @@ packages: description: name: plugin_platform_interface sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.8" pool: @@ -831,7 +895,7 @@ packages: description: name: pool sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.5.1" preload_page_view: @@ -839,7 +903,7 @@ packages: description: name: preload_page_view sha256: "488a10c158c5c2e9ba9d77e5dbc09b1e49e37a20df2301e5ba02992eac802b7a" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.0" protobuf: @@ -847,7 +911,7 @@ packages: description: name: protobuf sha256: "68645b24e0716782e58948f8467fd42a880f255096a821f9e7d0ec625b00c84d" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.0" pub_semver: @@ -855,7 +919,7 @@ packages: description: name: pub_semver sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.4" pubspec_parse: @@ -863,7 +927,7 @@ packages: description: name: pubspec_parse sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.0" pull_to_refresh: @@ -871,7 +935,7 @@ packages: description: name: pull_to_refresh sha256: bbadd5a931837b57739cf08736bea63167e284e71fb23b218c8c9a6e042aad12 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" retrofit: @@ -879,7 +943,7 @@ packages: description: name: retrofit sha256: "3c9885ef3dbc5dc4b3fb0a40c972ab52e4dad04d52dac9bba24dfa76cf100451" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.4.1" retrofit_generator: @@ -887,7 +951,7 @@ packages: description: name: retrofit_generator sha256: f76fdb2b66854690d5a332e7364d7561fc9dc2b3c924d7956ab8070495e21f6a - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "9.1.5" riverpod: @@ -895,7 +959,7 @@ packages: description: name: riverpod sha256: "59062512288d3056b2321804332a13ffdd1bf16df70dcc8e506e411280a72959" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.6.1" rxdart: @@ -903,7 +967,7 @@ packages: description: name: rxdart sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.27.7" shelf: @@ -911,7 +975,7 @@ packages: description: name: shelf sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.4.1" shelf_web_socket: @@ -919,7 +983,7 @@ packages: description: name: shelf_web_socket sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.1" signalr_core: @@ -927,7 +991,7 @@ packages: description: name: signalr_core sha256: dca676372a00c051511591ed0e24521ff7aa4e9320a7fa778a1007f7f522c8c0 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.1" sky_engine: @@ -940,7 +1004,7 @@ packages: description: name: source_gen sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.5.0" source_helper: @@ -948,7 +1012,7 @@ packages: description: name: source_helper sha256: "6adebc0006c37dd63fe05bca0a929b99f06402fc95aa35bf36d67f5c06de01fd" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.4" source_span: @@ -956,7 +1020,7 @@ packages: description: name: source_span sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.10.0" sprintf: @@ -964,7 +1028,7 @@ packages: description: name: sprintf sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "7.0.0" sqflite: @@ -972,7 +1036,7 @@ packages: description: name: sqflite sha256: "2d7299468485dca85efeeadf5d38986909c5eb0cd71fd3db2c2f000e6c9454bb" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.1" sqflite_android: @@ -980,7 +1044,7 @@ packages: description: name: sqflite_android sha256: "78f489aab276260cdd26676d2169446c7ecd3484bbd5fead4ca14f3ed4dd9ee3" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.0" sqflite_common: @@ -988,7 +1052,7 @@ packages: description: name: sqflite_common sha256: "761b9740ecbd4d3e66b8916d784e581861fd3c3553eda85e167bc49fdb68f709" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.5.4+6" sqflite_darwin: @@ -996,7 +1060,7 @@ packages: description: name: sqflite_darwin sha256: "96a698e2bc82bd770a4d6aab00b42396a7c63d9e33513a56945cbccb594c2474" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.1" sqflite_platform_interface: @@ -1004,7 +1068,7 @@ packages: description: name: sqflite_platform_interface sha256: "8dd4515c7bdcae0a785b0062859336de775e8c65db81ae33dd5445f35be61920" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.0" sse_client: @@ -1012,7 +1076,7 @@ packages: description: name: sse_client sha256: "71bd826430b41ab20a69d85bf2dfe9f11cfe222938e681ada1aea71fc8adf348" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.1.0" stack_trace: @@ -1020,7 +1084,7 @@ packages: description: name: stack_trace sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.11.1" state_notifier: @@ -1028,7 +1092,7 @@ packages: description: name: state_notifier sha256: b8677376aa54f2d7c58280d5a007f9e8774f1968d1fb1c096adcb4792fba29bb - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" stream_channel: @@ -1036,7 +1100,7 @@ packages: description: name: stream_channel sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.2" stream_transform: @@ -1044,7 +1108,7 @@ packages: description: name: stream_transform sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" string_scanner: @@ -1052,7 +1116,7 @@ packages: description: name: string_scanner sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" synchronized: @@ -1060,7 +1124,7 @@ packages: description: name: synchronized sha256: "69fe30f3a8b04a0be0c15ae6490fc859a78ef4c43ae2dd5e8a623d45bfcf9225" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.3.0+3" term_glyph: @@ -1068,7 +1132,7 @@ packages: description: name: term_glyph sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.1" test_api: @@ -1076,7 +1140,7 @@ packages: description: name: test_api sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.7.2" timing: @@ -1084,7 +1148,7 @@ packages: description: name: timing sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" tuple: @@ -1092,7 +1156,7 @@ packages: description: name: tuple sha256: a97ce2013f240b2f3807bcbaf218765b6f301c3eff91092bcfa23a039e7dd151 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.2" typed_data: @@ -1100,7 +1164,7 @@ packages: description: name: typed_data sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.4.0" uuid: @@ -1108,7 +1172,7 @@ packages: description: name: uuid sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.5.1" vector_math: @@ -1116,7 +1180,7 @@ packages: description: name: vector_math sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.4" vm_service: @@ -1124,7 +1188,7 @@ packages: description: name: vm_service sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "14.2.5" watcher: @@ -1132,7 +1196,7 @@ packages: description: name: watcher sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" web: @@ -1140,7 +1204,7 @@ packages: description: name: web sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" web_socket_channel: @@ -1148,47 +1212,15 @@ packages: description: name: web_socket_channel sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.0" - webview_flutter: - dependency: "direct main" - description: - name: webview_flutter - sha256: "392c1d83b70fe2495de3ea2c84531268d5b8de2de3f01086a53334d8b6030a88" - url: "https://pub.dev" - source: hosted - version: "3.0.4" - webview_flutter_android: - dependency: transitive - description: - name: webview_flutter_android - sha256: "8b3b2450e98876c70bfcead876d9390573b34b9418c19e28168b74f6cb252dbd" - url: "https://pub.dev" - source: hosted - version: "2.10.4" - webview_flutter_platform_interface: - dependency: transitive - description: - name: webview_flutter_platform_interface - sha256: "812165e4e34ca677bdfbfa58c01e33b27fd03ab5fa75b70832d4b7d4ca1fa8cf" - url: "https://pub.dev" - source: hosted - version: "1.9.5" - webview_flutter_wkwebview: - dependency: transitive - description: - name: webview_flutter_wkwebview - sha256: a5364369c758892aa487cbf59ea41d9edd10f9d9baf06a94e80f1bd1b4c7bbc0 - url: "https://pub.dev" - source: hosted - version: "2.9.5" win32: dependency: transitive description: name: win32 sha256: "8b338d4486ab3fbc0ba0db9f9b4f5239b6697fcee427939a40e720cbb9ee0a69" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "5.9.0" win32_registry: @@ -1196,7 +1228,7 @@ packages: description: name: win32_registry sha256: "21ec76dfc731550fd3e2ce7a33a9ea90b828fdf19a5c3bcf556fa992cfa99852" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.5" xdg_directories: @@ -1204,7 +1236,7 @@ packages: description: name: xdg_directories sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" yaml: @@ -1212,7 +1244,7 @@ packages: description: name: yaml sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.2" sdks: diff --git a/wgshare/pubspec.yaml b/wgshare/pubspec.yaml index b15369d..07324ee 100644 --- a/wgshare/pubspec.yaml +++ b/wgshare/pubspec.yaml @@ -86,7 +86,8 @@ dependencies: preload_page_view: ^0.2.0 # webview - webview_flutter: ^3.0.4 + #webview_flutter: ^3.0.4 + flutter_inappwebview: ^6.1.5 dev_dependencies: flutter_test: diff --git a/wgshare/windows/flutter/generated_plugin_registrant.cc b/wgshare/windows/flutter/generated_plugin_registrant.cc index b495d7a..388caa0 100644 --- a/wgshare/windows/flutter/generated_plugin_registrant.cc +++ b/wgshare/windows/flutter/generated_plugin_registrant.cc @@ -7,6 +7,7 @@ #include "generated_plugin_registrant.h" #include +#include #include #include #include @@ -14,6 +15,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { AgoraRtcEnginePluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("AgoraRtcEnginePlugin")); + FlutterInappwebviewWindowsPluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FlutterInappwebviewWindowsPluginCApi")); GeolocatorWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("GeolocatorWindows")); IrisMethodChannelPluginCApiRegisterWithRegistrar( diff --git a/wgshare/windows/flutter/generated_plugins.cmake b/wgshare/windows/flutter/generated_plugins.cmake index 4e8db44..3f27852 100644 --- a/wgshare/windows/flutter/generated_plugins.cmake +++ b/wgshare/windows/flutter/generated_plugins.cmake @@ -4,6 +4,7 @@ list(APPEND FLUTTER_PLUGIN_LIST agora_rtc_engine + flutter_inappwebview_windows geolocator_windows iris_method_channel permission_handler_windows