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?
You just need to provide
channelid
toSurfaceView
see the example in the official package site