Compare commits

..

No commits in common. "ce6128a8274f95df5d1e0c7c7429aad0ac1cebd2" and "4ff88ab8bacdf6b8db633c52404e52f0635bedd6" have entirely different histories.

10 changed files with 92 additions and 173 deletions

View File

@ -2,6 +2,9 @@
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<application <application

View File

@ -39,65 +39,6 @@ end
post_install do |installer| post_install do |installer|
installer.pods_project.targets.each do |target| installer.pods_project.targets.each do |target|
... # Here are some configurations automatically generated by flutter flutter_additional_ios_build_settings(target)
# 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
end end
end end

View File

@ -79,7 +79,7 @@ class MyApp extends StatelessWidget {
// //
defaultTransition: Transition.fade, defaultTransition: Transition.fade,
// //
initialRoute: (UserStore.to.token?.isNotEmpty ?? false) && UserStore.to.userInfoEntity.value != null ? Routes.startPage : Routes.loginPage, initialRoute: Routes.startPage,
/// ///
getPages: AppPages.pages, getPages: AppPages.pages,

View File

@ -46,17 +46,14 @@ class LoginLogic extends GetxController with RequestToolMixin {
}else if(state.checkAgreementBool.value != true){ }else if(state.checkAgreementBool.value != true){
ToastUtils.showError("请阅读并勾选相关协议"); ToastUtils.showError("请阅读并勾选相关协议");
}else{ }else{
try{
ToastUtils.showLoading(); ToastUtils.showLoading();
BaseStructureResult<UserInfoEntity> res = await getClient().login(state.userNameController.text, md5.convert(utf8.encode(state.passwordController.text)).toString()); BaseStructureResult<UserInfoEntity> res = await getClient().login(state.userNameController.text, md5.convert(utf8.encode(state.passwordController.text)).toString());
ToastUtils.dismiss();
if (null != res.data) { if (null != res.data) {
UserStore.to.setToken(res.data!.token); UserStore.to.setToken(res.data!.token);
UserStore.to.setUserDetailInfo(res.data!); UserStore.to.setUserDetailInfo(res.data!);
Get.toNamed(Routes.startPage); Get.toNamed(Routes.startPage);
} }
}finally{
ToastUtils.dismiss();
}
} }
} }
@ -71,17 +68,14 @@ class LoginLogic extends GetxController with RequestToolMixin {
}else if(state.checkAgreementBool != true){ }else if(state.checkAgreementBool != true){
ToastUtils.showError("请阅读并勾选相关协议"); ToastUtils.showError("请阅读并勾选相关协议");
}else{ }else{
try{
ToastUtils.showLoading(); ToastUtils.showLoading();
BaseStructureResult<UserInfoEntity> res = await getClient().anonLogin(await DeviceInfo.getDeviceId(),state.nickNameCodeController.text, state.meetingCodeController.text); BaseStructureResult<UserInfoEntity> res = await getClient().anonLogin(await DeviceInfo.getDeviceId(),state.nickNameCodeController.text, state.meetingCodeController.text);
ToastUtils.dismiss();
if (null != res.data) { if (null != res.data) {
UserStore.to.setToken(res.data!.token); UserStore.to.setToken(res.data!.token);
UserStore.to.setUserDetailInfo(res.data!); UserStore.to.setUserDetailInfo(res.data!);
Get.toNamed(Routes.meetingMainPage, arguments: {"roomNumber": state.meetingCodeController.text}); Get.toNamed(Routes.meetingMainPage, arguments: {"roomNumber": state.meetingCodeController.text});
} }
}finally{
ToastUtils.dismiss();
}
} }
} }
} }

View File

@ -13,7 +13,7 @@ import '../../common/models/common/base_structure_result.dart';
import '../../common/models/meeting_room_info.dart'; import '../../common/models/meeting_room_info.dart';
import '../../common/models/meeting_room_msg.dart'; import '../../common/models/meeting_room_msg.dart';
import '../../common/models/meeting_room_user.dart'; import '../../common/models/meeting_room_user.dart';
import '../../utils/permission/PermissionService.dart'; import '../../utils/permission_handler.dart';
import '../../utils/toast_utils.dart'; import '../../utils/toast_utils.dart';
import 'meeting_main_state.dart'; import 'meeting_main_state.dart';
@ -58,7 +58,6 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
/// 1. /// 1.
/// 2. /// 2.
Future<void> mergeFetch() async { Future<void> mergeFetch() async {
try{
ToastUtils.showLoading(); ToastUtils.showLoading();
var results = await Future.wait([ var results = await Future.wait([
@ -67,10 +66,9 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
getMeetingRoomInfo(results[0].data as MeetingRoomInfo); getMeetingRoomInfo(results[0].data as MeetingRoomInfo);
getMeetingRoomAllUser(results[1].data as List<MeetingRoomUser>); getMeetingRoomAllUser(results[1].data as List<MeetingRoomUser>);
}finally{
ToastUtils.dismiss(); ToastUtils.dismiss();
} }
}
/// ///
void changeMeetingInfoState(bool isShow){ void changeMeetingInfoState(bool isShow){
@ -267,7 +265,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
} }
/// ///
/*Future<void> startScreenCapture() async { Future<void> startScreenCapture() async {
debugPrint("wgs输出===RTC-启动屏幕共享"); debugPrint("wgs输出===RTC-启动屏幕共享");
state.isOpenShare.value = true; state.isOpenShare.value = true;
final shareShareUid = int.tryParse(UserStore.to.userInfoEntity.value!.screenShareId); final shareShareUid = int.tryParse(UserStore.to.userInfoEntity.value!.screenShareId);
@ -288,10 +286,10 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
clientRoleType: ClientRoleType.clientRoleBroadcaster, clientRoleType: ClientRoleType.clientRoleBroadcaster,
)); ));
doHttpSetTvAnchor(UserStore.to.userInfoEntity.value!.screenShareId); doHttpSetTvAnchor(UserStore.to.userInfoEntity.value!.screenShareId);
}*/ }
/// ///
/*Future<void> stopScreenCapture() async { Future<void> stopScreenCapture() async {
debugPrint("wgs输出===RTC-停止屏幕共享"); debugPrint("wgs输出===RTC-停止屏幕共享");
state.isOpenShare.value = false; state.isOpenShare.value = false;
final shareShareUid = int.tryParse(UserStore.to.userInfoEntity.value!.screenShareId); final shareShareUid = int.tryParse(UserStore.to.userInfoEntity.value!.screenShareId);
@ -306,7 +304,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
stopAllEffect: false stopAllEffect: false
)); ));
doHttpSetTvAnchor(UserStore.to.userInfoEntity.value!.uid); doHttpSetTvAnchor(UserStore.to.userInfoEntity.value!.uid);
}*/ }
/// ------------------------------------------------------------------------------signalR Socket相关 /// ------------------------------------------------------------------------------signalR Socket相关
@ -376,7 +374,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
// //
changePageState(0); changePageState(0);
// //
// stopScreenCapture(); stopScreenCapture();
debugPrint("wgs输出===Socket-关闭发言权限:观众"); debugPrint("wgs输出===Socket-关闭发言权限:观众");
@ -597,7 +595,8 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
/// SDK /// SDK
Future<void> initRtc() async { Future<void> initRtc() async {
// //
PermissionService.requestPermissions(); PermissionHandler.requestCameraPermission();
PermissionHandler.requestMicrophonePermission();
// RtcEngine // RtcEngine
state.rctEngine.value = createAgoraRtcEngineEx(); state.rctEngine.value = createAgoraRtcEngineEx();
@ -724,14 +723,14 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
}, },
// //
/*onPermissionError: (PermissionType permissionType){ onPermissionError: (PermissionType permissionType){
debugPrint("wgs输出===RTC-获取设备权限出错:$permissionType"); debugPrint("wgs输出===RTC-获取设备权限出错:$permissionType");
if(permissionType == PermissionType.screenCapture){ if(permissionType == PermissionType.screenCapture){
// //
state.isOpenShare.value = false; state.isOpenShare.value = false;
stopScreenCapture(); stopScreenCapture();
} }
}*/ }
), ),
); );
} }

View File

@ -320,6 +320,17 @@ class MeetingMainPageState extends State<MeetingMainPage> {
) )
: Container()), : Container()),
//
Visibility(
visible: state.pageState.value == 2,
child: null != state.rctEngine.value
? MeetingMainShareComponent(
rtcEngine: state.rctEngine.value!,
channelId: state.roomNumber.value,
remoteUid: state.remoteUid.value,
)
: Container()),
GestureDetector( GestureDetector(
child: Container( child: Container(
width: 180.w, width: 180.w,
@ -483,7 +494,7 @@ class MeetingMainPageState extends State<MeetingMainPage> {
), ),
/// ///
/*GestureDetector( GestureDetector(
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
@ -514,7 +525,7 @@ class MeetingMainPageState extends State<MeetingMainPage> {
} }
} }
}, },
),*/ ),
/// ///
GestureDetector( GestureDetector(

View File

@ -4,7 +4,6 @@ import 'package:permission_handler/permission_handler.dart';
import 'dart:io'; import 'dart:io';
import '../device_info.dart'; import '../device_info.dart';
import '../toast_utils.dart';
class AndroidPermissionHandler { class AndroidPermissionHandler {
Future<void> requestAllPermissions() async { Future<void> requestAllPermissions() async {
@ -14,12 +13,6 @@ class AndroidPermissionHandler {
await requestStoragePermission(); await requestStoragePermission();
await requestNotificationPermission(); await requestNotificationPermission();
await requestPhonePermission(); await requestPhonePermission();
await requestMicrophonePermission();
}
Future<void> requestCameraToMicrophonePermissions() async {
await requestCameraPermission();
await requestMicrophonePermission();
} }
Future<void> requestLocationPermission() async { Future<void> requestLocationPermission() async {
@ -61,14 +54,11 @@ class AndroidPermissionHandler {
Future<void> requestCameraPermission() async { Future<void> requestCameraPermission() async {
PermissionStatus status = await Permission.camera.request(); PermissionStatus status = await Permission.camera.request();
if (status.isGranted) { if (status.isGranted) {
print("Android: 摄像头权限已授予"); print("Android: 相机权限已授予");
} else if (status.isPermanentlyDenied) { } else if (status.isPermanentlyDenied) {
print("Android: 摄像头权限被永久拒绝,请前往设置开启"); print("Android: 相机权限被永久拒绝,请前往设置开启");
ToastUtils.showError("权限被永久拒绝,请前往设置开启!");
openAppSettings();
} else { } else {
print("Android: 摄像头权限被拒绝"); print("Android: 相机权限被拒绝");
ToastUtils.showError("权限被拒绝,可能会导致相关功能不可用!");
} }
} }
@ -104,18 +94,4 @@ class AndroidPermissionHandler {
print("Android: 电话权限被拒绝"); print("Android: 电话权限被拒绝");
} }
} }
static Future<void> requestMicrophonePermission() async {
PermissionStatus status = await Permission.microphone.request();
if (status.isGranted) {
print("Android: 麦克风权限已授予");
} else if (status.isPermanentlyDenied) {
print("Android: 麦克风权限被永久拒绝,请前往设置开启");
ToastUtils.showError("权限被永久拒绝,请前往设置开启!");
openAppSettings();
} else {
print("Android: 麦克风限被拒绝");
ToastUtils.showError("权限被拒绝,可能会导致相关功能不可用!");
}
}
} }

View File

@ -1,7 +1,5 @@
import 'package:permission_handler/permission_handler.dart'; import 'package:permission_handler/permission_handler.dart';
import '../toast_utils.dart';
class IosPermissionHandler { class IosPermissionHandler {
Future<void> requestAllPermissions() async { Future<void> requestAllPermissions() async {
await requestLocationPermission(); await requestLocationPermission();
@ -10,12 +8,6 @@ class IosPermissionHandler {
await requestStoragePermission(); await requestStoragePermission();
await requestNotificationPermission(); await requestNotificationPermission();
await requestPhonePermission(); await requestPhonePermission();
await requestMicrophonePermission();
}
Future<void> requestCameraToMicrophonePermissions() async {
await requestCameraPermission();
await requestMicrophonePermission();
} }
Future<void> requestLocationPermission() async { Future<void> requestLocationPermission() async {
@ -41,14 +33,11 @@ class IosPermissionHandler {
Future<void> requestCameraPermission() async { Future<void> requestCameraPermission() async {
PermissionStatus status = await Permission.camera.request(); PermissionStatus status = await Permission.camera.request();
if (status.isGranted) { if (status.isGranted) {
print("iOS: 摄像头权限已授予"); print("iOS: 相机权限已授予");
} else if (status.isPermanentlyDenied) { } else if (status.isPermanentlyDenied) {
print("iOS: 摄像头权限被永久拒绝,请前往设置开启"); print("iOS: 相机权限被永久拒绝,请前往设置开启");
ToastUtils.showError("权限被永久拒绝,请前往设置开启!");
openAppSettings();
} else { } else {
print("iOS: 摄像头权限被拒绝"); print("iOS: 相机权限被拒绝");
ToastUtils.showError("权限被拒绝,可能会导致相关功能不可用!");
} }
} }
@ -82,18 +71,4 @@ class IosPermissionHandler {
print("iOS: 电话权限被拒绝"); print("iOS: 电话权限被拒绝");
} }
} }
static Future<void> requestMicrophonePermission() async {
PermissionStatus status = await Permission.microphone.request();
if (status.isGranted) {
print("iOS: 麦克风权限已授予");
} else if (status.isPermanentlyDenied) {
print("iOS: 麦克风权限被永久拒绝,请前往设置开启");
ToastUtils.showError("权限被永久拒绝,请前往设置开启!");
openAppSettings();
} else {
print("iOS: 麦克风限被拒绝");
ToastUtils.showError("权限被拒绝,可能会导致相关功能不可用!");
}
}
} }

View File

@ -1,16 +0,0 @@
import 'dart:io';
import 'AndroidPermissionHandler.dart';
import 'IosPermissionHandler.dart';
class PermissionService {
static Future<void> requestPermissions() async {
if (Platform.isIOS) {
// iOS权限处理逻辑
await IosPermissionHandler().requestCameraToMicrophonePermissions();
} else if (Platform.isAndroid) {
// Android权限处理逻辑
await AndroidPermissionHandler().requestCameraToMicrophonePermissions();
}
}
}

View File

@ -0,0 +1,36 @@
import 'package:flutter/cupertino.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:wgshare/utils/toast_utils.dart';
class PermissionHandler {
///
static Future<void> requestCameraPermission() async {
PermissionStatus status = await Permission.camera.request();
if (status.isGranted) {
debugPrint("wgs输出===:权限-摄像头权限已授予");
} else if (status.isPermanentlyDenied) {
debugPrint("wgs输出===:权限-摄像头权限被永久拒绝,请前往设置开启");
ToastUtils.showError("权限被永久拒绝,请前往设置开启!");
openAppSettings();
} else {
debugPrint("wgs输出===:权限-摄像头权限被拒绝");
ToastUtils.showError("权限被拒绝,可能会导致相关功能不可用!");
}
}
///
static Future<void> requestMicrophonePermission() async {
PermissionStatus status = await Permission.microphone.request();
if (status.isGranted) {
debugPrint("wgs输出===:权限-麦克风权限已授予");
} else if (status.isPermanentlyDenied) {
debugPrint("wgs输出===:权限-麦克风权限被永久拒绝,请前往设置开启");
ToastUtils.showError("权限被永久拒绝,请前往设置开启!");
openAppSettings();
} else {
debugPrint("wgs输出===:权限-麦克风权限被拒绝");
ToastUtils.showError("权限被拒绝,可能会导致相关功能不可用!");
}
}
}