mmoo_live_room 1.0.0+2
mmoo_live_room: ^1.0.0+2 copied to clipboard
A new flutter plugin project.
mmoo_live_room #
接入 #
flutter main.dart
- init emclient
- prociders add ProviderLiveConfig.prividers
- localizationsDelegates add Lives.S.delegate
- route add PageLiveRoot
安卓添加相册 相机 麦克风权限
安卓工程 #
andorid-> add video-capture settings.gradle add
include ':app','video-capture'
ios podfile工程添加 #
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
target.build_configurations.each do |config|
# Here are some configurations automatically generated by flutter
# 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/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
end
关于启动后台配置 #
wiki管理后台 配置说明 需要配置 LiveOpenType
关于接听通话,未读消息更新及更新money #
1.接听通话
需要先退出直播间 之后再进入接听电话逻辑
await ConfigLiveGlobalkey.liveRtcKey.currentState
?.userExitRoom();
2.未读消息
在进入live模块 给一个GlobalKey
void onUnReadCount() async {
try {
int? unread =
await EMClient.getInstance.chatManager.getUnreadMessageCount();
liveRootKey.currentState?.updataUnReadMessags(unread ?? 0);
} catch (e) {}
}
3.更新money
在进入live模块 接收
RechargeEvent
subscription = eventBusBig.on<RechargeEvent>().listen((event) {
liveRootKey.currentState
?.updataUserInfo(money: int.parse(event.money ?? '0'));
});
4.关于LiveMethonDelegate
(1).
showLiveReportPage打开举报页面
(2).
openIMMessageListPage打开消息列表
(3).
showRechargeblePage打开充值页面
(4).
showLiveIMChatPage(String userId)打开充值页面
(5).
showLiveCallVideoPage(String userId)开始播放视频通话
(6).
blackUserMoney(String money)向外更新money余额
(7).
setImSocketMessageHandler(LiveSocketEventHandler handler)设置环信imhandler 设置了之后 直播间才有im链接能力 在环信onMessagesReceived回调中
@override
void onMessagesReceived(List<EMMessage> messages) {
if (_liveSocketEventHandler != null) {
messages
.where((element) => element.chatType == EMMessageChatType.ChatRoom)
.toList()
.forEach((element) {
_liveSocketEventHandler?.onMessageReceived(element);
});
}
List<EMMessage> chatMessages = messages
.where((element) => element.chatType != EMMessageChatType.ChatRoom)
.toList();
if (chatMessages.isNotEmpty) {
imPluginDelegateList.forEach((element) {
element.onMessageReceived(messages);
});
// _onImLivePluginDelegate?.onMessageReceived(messages);
}
}
在环信onCmdMessagesReceived回调中
if (_liveSocketEventHandler != null) {
messages
.where((element) {
if (element.body is EMCmdMessageBody) {
EMCmdMessageBody cmdMessageBody =
element.body as EMCmdMessageBody;
if (cmdMessageBody.action == 'live') {
return true;
}
}
return false;
})
.toList()
.forEach((element) {
_liveSocketEventHandler?.onMessageReceived(element);
});
}
(8).
setOnConnection(OnImLivePluginDelegate delegate)设置im 在线状态回调
-
pubspec.yaml 添加 ''' mmoo_live_room: git:
url: https://gitee.com/mimo_1/mmoo-live-room.git ref: <最新版>''' -
修改mmoo_base_video 里面的 美颜版本
-
LoneMainPageLy 添加直播列表tabbar
-
MainDao.initConfig 添加 LiveOpenType BEKEY
-
LoneVideoUtilLy 添加直播代码 详见代码
@override
void onMessagesReceived(List<EMMessage> messages) {
if (_liveSocketEventHandler != null) {
messages
.where((element) => element.chatType == EMMessageChatType.ChatRoom)
.toList()
.forEach((element) {
_liveSocketEventHandler?.onMessageReceived(element);
});
}
List<EMMessage> chatMessages = messages
.where((element) => element.chatType != EMMessageChatType.ChatRoom)
.toList();
if (chatMessages.isNotEmpty) {
imPluginDelegateList.forEach((element) {
element.onLoneMessageReceivedLy(messages);
});
}
}
@override
void onCmdMessagesReceived(List<EMMessage> messages) {
AppConfig.printLog('onCmdMessagesReceived');
if (_liveSocketEventHandler != null) {
messages
.where((element) {
if (element.body is EMCmdMessageBody) {
EMCmdMessageBody cmdMessageBody =
element.body as EMCmdMessageBody;
if (cmdMessageBody.action == 'live') {
return true;
}
}
return false;
})
.toList()
.forEach((element) {
_liveSocketEventHandler?.onMessageReceived(element);
});
}
return super.onCmdMessagesReceived(messages);
}
- requestLoneVideoPermissionLy 函数 添加
await ConfigLiveGlobalkey.liveRtcKey.currentState?.userExitRoom();
CommonUtils.dismiss();
- 在欢迎页添加
Future initialization() async {
CommonUtils.toast = ((msg) {
LoneCommonUtilLy.showErrorToastLy(LoneRouterLy.context, res: msg);
});
CommonUtils.toastDismiss = (() {
if (RechargeUtils.instance.showLoading == true) {
Navigator.pop(context);
}
});
CommonUtils.toastLoad = ((status) {
if (RechargeUtils.instance.showLoading == false) {
LoneCommonUtilLy.showLoneLoadingDialogLy(context, text: status);
}
});
}
- 添加充值成功回调 然后更新
liveRootKey.currentState?.updataUserInfo(money: int.parse((event.money ?? '0'))); ventBusLone.on<LoneRechargeEventLy>().listen((event)
-
main.dart 添加 prividers.addAll(ProviderLiveConfig.prividers); 及LiveS.S.delegate,
-
添加在直播间内接收到通话邀请的提示 onLoneReceivedByPeerLy 添加样式判断
-
goUserPage 添加 goLivePage