Compare commits
8 Commits
c5b55d8660
...
bb41882757
| Author | SHA1 | Date |
|---|---|---|
|
|
bb41882757 | |
|
|
509372d214 | |
|
|
ed95df9cb8 | |
|
|
f6984e54de | |
|
|
733bf3cf72 | |
|
|
63dbe1f308 | |
|
|
2ef8035678 | |
|
|
f7c39f5110 |
|
|
@ -0,0 +1,3 @@
|
|||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/wgshare/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/wgshare/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/wgshare/build" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/WGShare.Mobile.Flutter.iml" filepath="$PROJECT_DIR$/.idea/WGShare.Mobile.Flutter.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1,121 +1,120 @@
|
|||
{
|
||||
"images": [
|
||||
{
|
||||
"filename" : "40.png",
|
||||
"idiom" : "iphone",
|
||||
"size": "20x20",
|
||||
"idiom": "universal",
|
||||
"filename": "icon-20@2x.png",
|
||||
"scale": "2x",
|
||||
"size" : "20x20"
|
||||
"platform": "ios"
|
||||
},
|
||||
{
|
||||
"filename" : "60.png",
|
||||
"idiom" : "iphone",
|
||||
"size": "20x20",
|
||||
"idiom": "universal",
|
||||
"filename": "icon-20@3x.png",
|
||||
"scale": "3x",
|
||||
"size" : "20x20"
|
||||
"platform": "ios"
|
||||
},
|
||||
{
|
||||
"filename" : "29.png",
|
||||
"idiom" : "iphone",
|
||||
"scale" : "1x",
|
||||
"size" : "29x29"
|
||||
},
|
||||
{
|
||||
"filename" : "58.png",
|
||||
"idiom" : "iphone",
|
||||
"size": "29x29",
|
||||
"idiom": "universal",
|
||||
"filename": "icon-29@2x.png",
|
||||
"scale": "2x",
|
||||
"size" : "29x29"
|
||||
"platform": "ios"
|
||||
},
|
||||
{
|
||||
"filename" : "87.png",
|
||||
"idiom" : "iphone",
|
||||
"size": "29x29",
|
||||
"idiom": "universal",
|
||||
"filename": "icon-29@3x.png",
|
||||
"scale": "3x",
|
||||
"size" : "29x29"
|
||||
"platform": "ios"
|
||||
},
|
||||
{
|
||||
"filename" : "80.png",
|
||||
"idiom" : "iphone",
|
||||
"size": "38x38",
|
||||
"idiom": "universal",
|
||||
"filename": "icon-38@2x.png",
|
||||
"scale": "2x",
|
||||
"size" : "40x40"
|
||||
"platform": "ios"
|
||||
},
|
||||
{
|
||||
"filename" : "120.png",
|
||||
"idiom" : "iphone",
|
||||
"size": "38x38",
|
||||
"idiom": "universal",
|
||||
"filename": "icon-38@3x.png",
|
||||
"scale": "3x",
|
||||
"size" : "40x40"
|
||||
"platform": "ios"
|
||||
},
|
||||
{
|
||||
"filename" : "120 1.png",
|
||||
"idiom" : "iphone",
|
||||
"size": "40x40",
|
||||
"idiom": "universal",
|
||||
"filename": "icon-40@2x.png",
|
||||
"scale": "2x",
|
||||
"size" : "60x60"
|
||||
"platform": "ios"
|
||||
},
|
||||
{
|
||||
"filename" : "180.png",
|
||||
"idiom" : "iphone",
|
||||
"size": "40x40",
|
||||
"idiom": "universal",
|
||||
"filename": "icon-40@3x.png",
|
||||
"scale": "3x",
|
||||
"size" : "60x60"
|
||||
"platform": "ios"
|
||||
},
|
||||
{
|
||||
"filename" : "20.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "1x",
|
||||
"size" : "20x20"
|
||||
},
|
||||
{
|
||||
"filename" : "40 1.png",
|
||||
"idiom" : "ipad",
|
||||
"size": "60x60",
|
||||
"idiom": "universal",
|
||||
"filename": "icon-60@2x.png",
|
||||
"scale": "2x",
|
||||
"size" : "20x20"
|
||||
"platform": "ios"
|
||||
},
|
||||
{
|
||||
"filename" : "29 1.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "1x",
|
||||
"size" : "29x29"
|
||||
"size": "60x60",
|
||||
"idiom": "universal",
|
||||
"filename": "icon-60@3x.png",
|
||||
"scale": "3x",
|
||||
"platform": "ios"
|
||||
},
|
||||
{
|
||||
"filename" : "58 1.png",
|
||||
"idiom" : "ipad",
|
||||
"size": "64x64",
|
||||
"idiom": "universal",
|
||||
"filename": "icon-64@2x.png",
|
||||
"scale": "2x",
|
||||
"size" : "29x29"
|
||||
"platform": "ios"
|
||||
},
|
||||
{
|
||||
"filename" : "40 2.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "1x",
|
||||
"size" : "40x40"
|
||||
"size": "64x64",
|
||||
"idiom": "universal",
|
||||
"filename": "icon-64@3x.png",
|
||||
"scale": "3x",
|
||||
"platform": "ios"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size": "68x68",
|
||||
"idiom": "universal",
|
||||
"filename": "icon-68@2x.png",
|
||||
"scale": "2x",
|
||||
"size" : "40x40"
|
||||
"platform": "ios"
|
||||
},
|
||||
{
|
||||
"filename" : "76.png",
|
||||
"idiom" : "ipad",
|
||||
"scale" : "1x",
|
||||
"size" : "76x76"
|
||||
},
|
||||
{
|
||||
"filename" : "152.png",
|
||||
"idiom" : "ipad",
|
||||
"size": "76x76",
|
||||
"idiom": "universal",
|
||||
"filename": "icon-76@2x.png",
|
||||
"scale": "2x",
|
||||
"size" : "76x76"
|
||||
"platform": "ios"
|
||||
},
|
||||
{
|
||||
"filename" : "167.png",
|
||||
"idiom" : "ipad",
|
||||
"size": "83.5x83.5",
|
||||
"idiom": "universal",
|
||||
"filename": "icon-83.5@2x.png",
|
||||
"scale": "2x",
|
||||
"size" : "83.5x83.5"
|
||||
"platform": "ios"
|
||||
},
|
||||
{
|
||||
"filename" : "1024.png",
|
||||
"idiom" : "ios-marketing",
|
||||
"size": "1024x1024",
|
||||
"idiom": "universal",
|
||||
"filename": "icon-1024.png",
|
||||
"scale": "1x",
|
||||
"size" : "1024x1024"
|
||||
"platform": "ios"
|
||||
}
|
||||
],
|
||||
"info": {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
"version": 1,
|
||||
"author": "icon.wuruihong.com"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 160 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 7.4 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
|
@ -8,10 +8,6 @@
|
|||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>智汇享</string>
|
||||
<key>CFBundleDocumentTypes</key>
|
||||
<array>
|
||||
<dict/>
|
||||
</array>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
|
|
@ -41,7 +37,7 @@
|
|||
<key>UIMainStoryboardFile</key>
|
||||
<string>Main</string>
|
||||
<key>UIRequiresFullScreen</key>
|
||||
<false/>
|
||||
<true/>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
|
|
|
|||
|
|
@ -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<AgreementReadPage> {
|
|||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
if (Platform.isAndroid) WebView.platform = AndroidWebView();
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
@ -81,12 +80,15 @@ class AgreementReadPageState extends State<AgreementReadPage> {
|
|||
),
|
||||
|
||||
/// 中间布局
|
||||
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),
|
||||
)),
|
||||
],
|
||||
));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,7 +45,8 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
|
||||
/// 获取会议室Token
|
||||
Future<void> doHttpGetMeetingToken(bool isInit) async {
|
||||
BaseStructureResult<String> res = await getClient().getMeetingToken(state.roomNumber.value);
|
||||
BaseStructureResult<String> res =
|
||||
await getClient().getMeetingToken(state.roomNumber.value);
|
||||
state.meetingToken.value = res.data!;
|
||||
|
||||
if (isInit == true) {
|
||||
|
|
@ -63,7 +64,8 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
|
||||
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<MeetingRoomUser>);
|
||||
|
|
@ -103,7 +105,8 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
/// 启动计时
|
||||
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);
|
||||
}
|
||||
|
||||
/// 更新计时
|
||||
|
|
@ -145,19 +148,36 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
|
||||
/// 关闭发言权限
|
||||
Future<void> 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<void> cancelSpeak() async {
|
||||
try {
|
||||
ToastUtils.showLoading();
|
||||
|
||||
await Future.wait(
|
||||
[doHttpCancelSpeak(), doHttpSetMicr(false), doHttpSetCamer(false)]);
|
||||
} finally {
|
||||
ToastUtils.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
/// ------------------------------------------------------------------------------麦克风相关(操作)
|
||||
/// 用户开闭麦
|
||||
Future<void> 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<void> 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);
|
||||
}
|
||||
|
||||
/// 设置视频是否开启
|
||||
|
|
@ -167,106 +187,67 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
|
||||
/// 获取当前全员观看主播
|
||||
Future<void> 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 (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);
|
||||
// 全员观看主播是自己
|
||||
// 设置主播ID为0(自己)
|
||||
state.remoteUid.value = "0";
|
||||
// 关闭右上角悬浮窗
|
||||
state.floating.value?.close();
|
||||
|
||||
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){
|
||||
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);
|
||||
}
|
||||
state.floating.value?.close();
|
||||
}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) {
|
||||
// 当前会议室存在全员观看主播时,切换页面到视频状态
|
||||
debugPrint("wgs输出===:当前会议室存在全员观看主播时,切换页面到视频状态");
|
||||
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){
|
||||
// 当前会议室不存在全员观看主播时,设置主播ID为空并切换页面到视频状态
|
||||
debugPrint("wgs输出===:当前会议室不存在全员观看主播时,设置主播ID为空并切换页面到视频状态");
|
||||
state.remoteUid.value = "";
|
||||
changePageState(1);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 共享屏幕(此版本不做)
|
||||
/*if(state.remoteUid.value == UserStore.to.userInfoEntity.value!.screenShareId){
|
||||
// 如果是自己在共享
|
||||
}else{
|
||||
// 如果是别人在共享,切换页面到视频状态
|
||||
changePageState(1);
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
/// 设置当前全员观看主播
|
||||
Future<void> 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<void> 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<void> stopScreenCapture() async {
|
||||
debugPrint("wgs输出===:RTC-停止屏幕共享");
|
||||
state.isOpenShare.value = false;
|
||||
|
|
@ -308,15 +289,18 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
doHttpSetTvAnchor(UserStore.to.userInfoEntity.value!.uid);
|
||||
}*/
|
||||
|
||||
|
||||
/// ------------------------------------------------------------------------------signalR Socket相关
|
||||
/// Socket长连接
|
||||
Future<void> signalRSocket() async {
|
||||
state.hubConnection.value = HubConnectionBuilder()
|
||||
.withUrl('${RequestConfig().baseUrl}/session-manage', HttpConnectionOptions(
|
||||
.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"),
|
||||
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();
|
||||
|
|
@ -362,7 +346,6 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
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-关闭发言权限:观众");
|
||||
}
|
||||
}
|
||||
|
|
@ -406,7 +388,8 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
var listDynamic = jsonDecode(jsonStr);
|
||||
MeetingRoomUser meetingRoomUser = MeetingRoomUser.fromJson(listDynamic);
|
||||
if (meetingRoomUser.enableMicr == true) {
|
||||
debugPrint("wgs输出===:Socket-用户单独开麦${meetingRoomUser.uid}-${meetingRoomUser.userName}");
|
||||
debugPrint(
|
||||
"wgs输出===:Socket-用户单独开麦${meetingRoomUser.uid}-${meetingRoomUser.userName}");
|
||||
for (MeetingRoomUser mru in state.cacheUsers.value) {
|
||||
if (mru.uid == meetingRoomUser.uid) {
|
||||
mru.enableMicr = true;
|
||||
|
|
@ -419,7 +402,8 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
muteLocalAudioStream(false);
|
||||
}
|
||||
} else {
|
||||
debugPrint("wgs输出===:Socket-用户单独闭麦${meetingRoomUser.uid}-${meetingRoomUser.userName}");
|
||||
debugPrint(
|
||||
"wgs输出===:Socket-用户单独闭麦${meetingRoomUser.uid}-${meetingRoomUser.userName}");
|
||||
for (MeetingRoomUser mru in state.cacheUsers.value) {
|
||||
if (mru.uid == meetingRoomUser.uid) {
|
||||
mru.enableMicr = false;
|
||||
|
|
@ -440,7 +424,9 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
// var jsonStr = const Utf8Decoder().convert(json.encode(user).runes.toList());
|
||||
var jsonStr = json.encode(e);
|
||||
var listDynamic = jsonDecode(jsonStr);
|
||||
List<MeetingRoomUser> meetingRoomUsers = (listDynamic as List<dynamic>).map((e) => MeetingRoomUser.fromJson((e as Map<String,dynamic>))).toList();
|
||||
List<MeetingRoomUser> meetingRoomUsers = (listDynamic as List<dynamic>)
|
||||
.map((e) => MeetingRoomUser.fromJson((e as Map<String, dynamic>)))
|
||||
.toList();
|
||||
state.cacheUsers.value.addAll(meetingRoomUsers);
|
||||
state.users.value = state.cacheUsers.value;
|
||||
debugPrint("wgs输出===:Socket-远端用户或主播加入会议室:$jsonStr");
|
||||
|
|
@ -455,7 +441,6 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
for (var j = 0; j < state.cacheUsers.value.length; j++) {
|
||||
if (state.cacheUsers.value[j].uid == uidStr) {
|
||||
state.cacheUsers.value.removeAt(j);
|
||||
doHttpGetTvAnchor();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -485,11 +470,13 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
// 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");
|
||||
});
|
||||
|
|
@ -503,52 +490,54 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
MeetingRoomUser meetingRoomUser = MeetingRoomUser.fromJson(listDynamic);
|
||||
if (meetingRoomUser.enableCamera == true) {
|
||||
debugPrint("wgs输出===:Socket-用户单独开摄像头");
|
||||
|
||||
// 遍历会议室用户列表,更改摄像头状态
|
||||
for (MeetingRoomUser mru in state.cacheUsers.value) {
|
||||
if (mru.uid == meetingRoomUser.uid) {
|
||||
mru.enableCamera = true;
|
||||
}
|
||||
}
|
||||
|
||||
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 {
|
||||
debugPrint("wgs输出===:Socket-用户单独闭摄像头");
|
||||
|
||||
// 遍历会议室用户列表,更改摄像头状态
|
||||
for (MeetingRoomUser mru in state.cacheUsers.value) {
|
||||
if (mru.uid == meetingRoomUser.uid) {
|
||||
mru.enableCamera = false;
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
// 关闭本地预览悬浮窗
|
||||
state.floating.value?.close();
|
||||
}else{
|
||||
if(meetingRoomUser.uid == state.remoteUid.value || meetingRoomUser.screenShareId == state.remoteUid.value){
|
||||
if(state.isOpenCamera.value == true){
|
||||
state.remoteUid.value = "";
|
||||
// 当前全员观看主播是自己时
|
||||
if (state.remoteUid.value == "0") {
|
||||
changePageState(0);
|
||||
}
|
||||
// 关闭本地预览悬浮窗
|
||||
if (state.floating.value?.isShowing == true) {
|
||||
state.floating.value?.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -559,9 +548,6 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
// 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<void> 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<void> 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,14 +606,14 @@ 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}");
|
||||
|
|
@ -639,7 +630,8 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
},
|
||||
|
||||
// 远端用户或主播离开当前会议室回调-主播角色才能接收该回调
|
||||
onUserOffline: (RtcConnection connection, int remoteUid, UserOfflineReasonType reason) async {
|
||||
onUserOffline: (RtcConnection connection, int remoteUid,
|
||||
UserOfflineReasonType reason) async {
|
||||
debugPrint("wgs输出===:RTC-远端用户或主播离开会议室,用户或主机的ID:$remoteUid");
|
||||
},
|
||||
|
||||
|
|
@ -657,22 +649,36 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
},
|
||||
|
||||
// 音频采集开关回调
|
||||
onLocalAudioStateChanged: (RtcConnection connection, LocalAudioStreamState state, LocalAudioStreamReason reason){
|
||||
onLocalAudioStateChanged: (RtcConnection connection,
|
||||
LocalAudioStreamState state, LocalAudioStreamReason reason) {
|
||||
debugPrint("wgs输出===:RTC-音频采集开关:$state");
|
||||
},
|
||||
|
||||
// 远端视频状态发生改变回调
|
||||
onRemoteVideoStateChanged: (RtcConnection connection,
|
||||
int remoteUid,
|
||||
RemoteVideoState state,
|
||||
RemoteVideoStateReason reason,
|
||||
RemoteVideoState remoteVideoState,
|
||||
RemoteVideoStateReason remoteVideoStateReason,
|
||||
int elapsed) {
|
||||
debugPrint("wgs输出===:RTC-远端视频状态发生改变:$state");
|
||||
debugPrint(
|
||||
"wgs输出===:RTC-远端视频状态发生改变:ID-$remoteUid-状态-$remoteVideoStateReason");
|
||||
if (remoteVideoStateReason ==
|
||||
RemoteVideoStateReason.remoteVideoStateReasonRemoteMuted) {
|
||||
// 远端用户停止发送视频流或远端用户禁用视频模块
|
||||
if (remoteUid.toString().length != 9) {
|
||||
// 摄像头
|
||||
if (remoteUid.toString() == state.remoteUid.value) {
|
||||
// 如果停止发送视频流或禁用视频模块的远端用户是当前全员观看主播
|
||||
doHttpGetTvAnchor();
|
||||
}
|
||||
} else {
|
||||
// 共享屏幕(此版本不做)
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// 用户音量提示回调
|
||||
onAudioVolumeIndication: (
|
||||
RtcConnection connection,
|
||||
onAudioVolumeIndication: (RtcConnection connection,
|
||||
List<AudioVolumeInfo> speakers,
|
||||
int speakerNumber,
|
||||
int totalVolume) {
|
||||
|
|
@ -683,8 +689,8 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
if (avi.uid == 0) {
|
||||
//debugPrint("wgs输出===:RTC-用户音量提示(自己):${CountMicrophoneVolume.getVolume(avi.volume!)}");
|
||||
mru.volume = CountMicrophoneVolume.getVolume(avi.volume!);
|
||||
state.microphoneVolume.value = 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}");
|
||||
|
|
@ -692,7 +698,8 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
|
||||
if (avi.volume != 0) {
|
||||
state.spokesman.value = mru.userName;
|
||||
state.spokesmanVolume.value = CountMicrophoneVolume.getVolume(avi.volume!);
|
||||
state.spokesmanVolume.value =
|
||||
CountMicrophoneVolume.getVolume(avi.volume!);
|
||||
} else {
|
||||
state.spokesman.value = "";
|
||||
state.spokesmanVolume.value = 0;
|
||||
|
|
@ -705,12 +712,10 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
},
|
||||
|
||||
// 切换用户角色回调
|
||||
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秒内过期回调
|
||||
|
|
@ -719,7 +724,8 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
},
|
||||
|
||||
// 本地视频状态发生改变回调
|
||||
onLocalVideoStateChanged: (VideoSourceType source, LocalVideoStreamState state, LocalVideoStreamReason reason){
|
||||
onLocalVideoStateChanged: (VideoSourceType source,
|
||||
LocalVideoStreamState state, LocalVideoStreamReason reason) {
|
||||
debugPrint("wgs输出===:RTC-本地视频状态发生改变:$source--$state--$reason");
|
||||
},
|
||||
|
||||
|
|
@ -727,7 +733,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
/*onPermissionError: (PermissionType permissionType){
|
||||
debugPrint("wgs输出===:RTC-获取设备权限出错:$permissionType");
|
||||
if(permissionType == PermissionType.screenCapture){
|
||||
// 获取共享屏幕出错
|
||||
// 获取共享屏幕出错(此版本不做)
|
||||
state.isOpenShare.value = false;
|
||||
stopScreenCapture();
|
||||
}
|
||||
|
|
@ -770,16 +776,19 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
|
|||
/// 设置用户角色
|
||||
Future<void> setClientRole(String roleStr) async {
|
||||
if (roleStr == "主播") {
|
||||
await state.rctEngine.value?.setClientRole(role: ClientRoleType.clientRoleBroadcaster);
|
||||
await state.rctEngine.value
|
||||
?.setClientRole(role: ClientRoleType.clientRoleBroadcaster);
|
||||
} else {
|
||||
await state.rctEngine.value?.setClientRole(role: ClientRoleType.clientRoleAudience);
|
||||
await state.rctEngine.value
|
||||
?.setClientRole(role: ClientRoleType.clientRoleAudience);
|
||||
}
|
||||
}
|
||||
|
||||
/// 设置音频输出路由(没有外接设备时生效)
|
||||
Future<void> 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);
|
||||
}
|
||||
|
||||
/// 设置启用视频模块
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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<MeetingMainPage> {
|
|||
width: 20.w,
|
||||
height: 20.h,
|
||||
),
|
||||
onTap: () {
|
||||
},
|
||||
onTap: () {},
|
||||
),
|
||||
SizedBox(width: 16.w),
|
||||
GestureDetector(
|
||||
|
|
@ -178,7 +174,7 @@ class MeetingMainPageState extends State<MeetingMainPage> {
|
|||
height: 22.h,
|
||||
),
|
||||
onTap: () {
|
||||
logic.doHttpCancelSpeak();
|
||||
logic.cancelSpeak();
|
||||
},
|
||||
),
|
||||
),
|
||||
|
|
@ -215,9 +211,9 @@ class MeetingMainPageState extends State<MeetingMainPage> {
|
|||
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,
|
||||
|
|
@ -225,13 +221,20 @@ class MeetingMainPageState extends State<MeetingMainPage> {
|
|||
PreloadPageView.builder(
|
||||
preloadPagesCount: 2,
|
||||
itemCount: 2,
|
||||
itemBuilder: (BuildContext context, int position) => returnPageToOther(position),
|
||||
controller: PreloadPageController(initialPage: 0),
|
||||
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.isSelf.value == false){
|
||||
if (state.isSpeak.value == true &&
|
||||
state.isOpenCamera.value ==
|
||||
true &&
|
||||
state.remoteUid.value != "0") {
|
||||
if (position == 0) {
|
||||
state.floating.value?.open(context);
|
||||
state.floating.value
|
||||
?.open(context);
|
||||
} else {
|
||||
state.floating.value?.close();
|
||||
}
|
||||
|
|
@ -247,71 +250,36 @@ class MeetingMainPageState extends State<MeetingMainPage> {
|
|||
Container(
|
||||
width: 8.w,
|
||||
height: 8.h,
|
||||
margin: const EdgeInsets.only(right: 6),
|
||||
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),
|
||||
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),
|
||||
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),
|
||||
),
|
||||
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),
|
||||
borderRadius:
|
||||
BorderRadius.circular(
|
||||
8),
|
||||
color: state.pageIndex
|
||||
.value ==
|
||||
1
|
||||
? ColorUtil
|
||||
.Color_255_255_255
|
||||
: ColorUtil
|
||||
.Color_108_108_108),
|
||||
)
|
||||
],
|
||||
),
|
||||
|
|
@ -482,7 +450,7 @@ class MeetingMainPageState extends State<MeetingMainPage> {
|
|||
},
|
||||
),
|
||||
|
||||
/// 共享
|
||||
/// 共享(此版本不做)
|
||||
/*GestureDetector(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
|
|
@ -799,7 +767,7 @@ class MeetingMainPageState extends State<MeetingMainPage> {
|
|||
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<MeetingMainPage> {
|
|||
? 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<MeetingMainPage> {
|
|||
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(
|
||||
child: Text(
|
||||
UserStore.to.userInfoEntity.value!.userName,
|
||||
style: TextStyle(
|
||||
fontSize: 10.sp, color: ColorUtil.Color_185_184_184),
|
||||
)
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
|
|
@ -1505,10 +1465,10 @@ class MeetingMainPageState extends State<MeetingMainPage> {
|
|||
);
|
||||
}
|
||||
|
||||
/// 对应页数的界面-全员观看是别人时
|
||||
Widget returnPageToOther(int position){
|
||||
debugPrint("wgs输出===:全员观看是别人时布局");
|
||||
/// pageview对应页数的界面
|
||||
Widget returnPage(int position) {
|
||||
var pageList = [];
|
||||
|
||||
/// 大屏
|
||||
pageList.add(Stack(
|
||||
alignment: Alignment.center,
|
||||
|
|
@ -1517,22 +1477,31 @@ class MeetingMainPageState extends State<MeetingMainPage> {
|
|||
? AgoraVideoView(
|
||||
controller: VideoViewController(
|
||||
rtcEngine: state.rctEngine.value!,
|
||||
canvas: VideoCanvas(uid: int.tryParse(state.remoteUid.value), setupMode: VideoViewSetupMode.videoViewSetupAdd)
|
||||
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,
|
||||
: 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),
|
||||
)
|
||||
],
|
||||
),
|
||||
onTap: () {
|
||||
},
|
||||
),
|
||||
),*/
|
||||
Positioned(
|
||||
top: 16,
|
||||
right: 16,
|
||||
|
|
@ -1547,30 +1516,23 @@ class MeetingMainPageState extends State<MeetingMainPage> {
|
|||
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),
|
||||
)
|
||||
],
|
||||
),
|
||||
|
|
@ -1578,38 +1540,41 @@ class MeetingMainPageState extends State<MeetingMainPage> {
|
|||
),
|
||||
],
|
||||
));
|
||||
|
||||
/// 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 ==
|
||||
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)
|
||||
),
|
||||
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),
|
||||
state.cacheUsers.value[index].uid),
|
||||
setupMode:
|
||||
VideoViewSetupMode.videoViewSetupAdd),
|
||||
connection: RtcConnection(
|
||||
channelId: state.roomNumber.value),
|
||||
),
|
||||
)
|
||||
:
|
||||
Container(
|
||||
: Container(
|
||||
color: ColorUtil.Color_16_19_13,
|
||||
child: SizedBox(
|
||||
width: double.infinity,
|
||||
|
|
@ -1626,8 +1591,7 @@ class MeetingMainPageState extends State<MeetingMainPage> {
|
|||
'该用户未开启摄像头...',
|
||||
style: TextStyle(
|
||||
color: ColorUtil.Color_255_255_255,
|
||||
fontSize: 10.sp
|
||||
),
|
||||
fontSize: 10.sp),
|
||||
)
|
||||
],
|
||||
),
|
||||
|
|
@ -1639,7 +1603,8 @@ class MeetingMainPageState extends State<MeetingMainPage> {
|
|||
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,
|
||||
|
|
@ -1649,256 +1614,42 @@ class MeetingMainPageState extends State<MeetingMainPage> {
|
|||
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()),
|
||||
),
|
||||
|
||||
],
|
||||
)
|
||||
: 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,
|
||||
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),
|
||||
),
|
||||
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
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
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,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 20.w,
|
||||
height: 20.h,
|
||||
child: LiquidCustomProgressIndicator(
|
||||
value:
|
||||
state.cacheUsers.value[index]
|
||||
value: state.cacheUsers.value[index]
|
||||
.volume ??
|
||||
0.0,
|
||||
valueColor:
|
||||
const AlwaysStoppedAnimation(
|
||||
ColorUtil
|
||||
.Color_2_177_136),
|
||||
ColorUtil.Color_2_177_136),
|
||||
backgroundColor:
|
||||
ColorUtil.Color_255_255_255,
|
||||
direction: Axis.vertical,
|
||||
shapePath: ViewSvgPath
|
||||
.getMicrpphonePath()),
|
||||
shapePath:
|
||||
ViewSvgPath.getMicrpphonePath()),
|
||||
),
|
||||
Text(
|
||||
state.cacheUsers.value[index].userName,
|
||||
style: TextStyle(
|
||||
fontSize: 12.sp,
|
||||
color: ColorUtil
|
||||
.Color_255_255_255),
|
||||
color: ColorUtil.Color_255_255_255),
|
||||
)
|
||||
],
|
||||
)
|
||||
: Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.center,
|
||||
crossAxisAlignment:
|
||||
CrossAxisAlignment.center,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Image.asset(
|
||||
'assets/images/meeting_main_microphone_open.png',
|
||||
|
|
@ -1909,8 +1660,7 @@ class MeetingMainPageState extends State<MeetingMainPage> {
|
|||
state.cacheUsers.value[index].userName,
|
||||
style: TextStyle(
|
||||
fontSize: 12.sp,
|
||||
color: ColorUtil
|
||||
.Color_255_255_255),
|
||||
color: ColorUtil.Color_255_255_255),
|
||||
)
|
||||
],
|
||||
),
|
||||
|
|
@ -1924,5 +1674,4 @@ class MeetingMainPageState extends State<MeetingMainPage> {
|
|||
));
|
||||
return pageList[position];
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"))
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
#include "generated_plugin_registrant.h"
|
||||
|
||||
#include <agora_rtc_engine/agora_rtc_engine_plugin.h>
|
||||
#include <flutter_inappwebview_windows/flutter_inappwebview_windows_plugin_c_api.h>
|
||||
#include <geolocator_windows/geolocator_windows.h>
|
||||
#include <iris_method_channel/iris_method_channel_plugin_c_api.h>
|
||||
#include <permission_handler_windows/permission_handler_windows_plugin.h>
|
||||
|
|
@ -14,6 +15,8 @@
|
|||
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
||||
AgoraRtcEnginePluginRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("AgoraRtcEnginePlugin"));
|
||||
FlutterInappwebviewWindowsPluginCApiRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("FlutterInappwebviewWindowsPluginCApi"));
|
||||
GeolocatorWindowsRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("GeolocatorWindows"));
|
||||
IrisMethodChannelPluginCApiRegisterWithRegistrar(
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
list(APPEND FLUTTER_PLUGIN_LIST
|
||||
agora_rtc_engine
|
||||
flutter_inappwebview_windows
|
||||
geolocator_windows
|
||||
iris_method_channel
|
||||
permission_handler_windows
|
||||
|
|
|
|||