I tried to built video call using agora 5. But "RtcRemoteView.SurfaceView" show some error.I couldn't understand what's the reason for this.
error
imports
import 'package:agora_rtc_engine/rtc_local_view.dart' as RtcLocalView;
import 'package:agora_rtc_engine/rtc_remote_view.dart' as RtcRemoteView;
code
class VideoCall extends StatefulWidget {
final String channelName;
final ClientRole role;
const VideoCall({Key? key, required this.channelName, required this.role})
: super(key: key);
@override
_VideoCallState createState() => _VideoCallState();
}
class _VideoCallState extends State<VideoCall> {
final _users = <int>[];
final _infoStrings = <String>[];
bool muted = false;
RtcEngine? _engine;
@override
void dispose() {
// clear users
_users.clear();
// destroy sdk
_engine?.leaveChannel();
_engine?.destroy();
super.dispose();
}
@override
void initState() {
super.initState();
// initialize agora sdk
initialize();
}
Future<void> initialize() async {
if (APP_ID.isEmpty) {
setState(() {
_infoStrings.add(
'APP_ID missing, please provide your APP_ID in settings.dart',
);
_infoStrings.add('Agora Engine is not starting');
});
return;
}
await _initAgoraRtcEngine();
_addAgoraEventHandlers();
await _engine?.enableWebSdkInteroperability(true);
VideoEncoderConfiguration configuration = VideoEncoderConfiguration();
configuration.dimensions = const VideoDimensions(); //(1920,1080)
await _engine?.setVideoEncoderConfiguration(configuration);
await _engine?.joinChannel(Token, widget.channelName, null!, 0);
}
Future<void> _initAgoraRtcEngine() async {
_engine = await RtcEngine.create(APP_ID);
await _engine?.enableVideo();
await _engine?.setChannelProfile(ChannelProfile.LiveBroadcasting);
await _engine?.setClientRole(widget.role);
}
void _addAgoraEventHandlers() {
_engine?.setEventHandler(RtcEngineEventHandler(error: (code) {
setState(() {
final info = 'onError: $code';
_infoStrings.add(info);
});
}, joinChannelSuccess: (channel, uid, elapsed) {
setState(() {
final info = 'onJoinChannel: $channel, uid: $uid';
_infoStrings.add(info);
});
}, leaveChannel: (stats) {
setState(() {
_infoStrings.add('onLeaveChannel');
_users.clear();
});
}, userJoined: (uid, elapsed) {
setState(() {
final info = 'userJoined: $uid';
_infoStrings.add(info);
_users.add(uid);
});
}, userOffline: (uid, elapsed) {
setState(() {
final info = 'userOffline: $uid';
_infoStrings.add(info);
_users.remove(uid);
});
}, firstRemoteVideoFrame: (uid, width, height, elapsed) {
setState(() {
final info = 'firstRemoteVideo: $uid ${width}x $height';
_infoStrings.add(info);
});
}));
}
List<Widget> _getRenderViews() {
final List<StatefulWidget> list = [];
if (widget.role == ClientRole.Broadcaster) {
list.add(RtcLocalView.SurfaceView());
}
_users.forEach((int uid) => list.add(RtcRemoteView.SurfaceView(uid: uid)));
return list;
}
add(RtcLocalView.SurfaceView());
}
_users.forEach((int uid) => list.add(RtcRemoteView.SurfaceView(uid: uid)));
return list;
}
pubspec.yaml file packages
How to solve this "The named parameter 'channelId' is required, but there's no corresponding argument. (Documentation) Try adding the required argument" error?
CodePudding user response:
You just need to provide channelid
to SurfaceView
see the example in the official package site