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