Untitled
unknown
plain_text
a year ago
1.9 kB
5
Indexable
import 'package:flutter/material.dart';
import 'package:agora_rtc_engine/agora_rtc_engine.dart';
import 'package:permission_handler/permission_handler.dart';
const String appId = "YOUR_AGORA_APP_ID";
class CallScreen extends StatefulWidget {
final String channelName;
const CallScreen({required this.channelName});
@override
_CallScreenState createState() => _CallScreenState();
}
class _CallScreenState extends State<CallScreen> {
late RtcEngine _engine;
bool _joined = false;
int? _remoteUid;
@override
void initState() {
super.initState();
_initAgora();
}
Future<void> _initAgora() async {
await [Permission.microphone].request();
_engine = createAgoraRtcEngine();
await _engine.initialize(RtcEngineContext(appId: appId));
_engine.registerEventHandler(
RtcEngineEventHandler(
onJoinChannelSuccess: (connection, elapsed) {
setState(() => _joined = true);
},
onUserJoined: (connection, remoteUid, elapsed) {
setState(() => _remoteUid = remoteUid);
},
onUserOffline: (connection, remoteUid, reason) {
setState(() => _remoteUid = null);
},
),
);
await _engine.joinChannel(
token: null,
channelId: widget.channelName,
uid: 0,
options: ChannelMediaOptions(),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Call: ${widget.channelName}')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(_joined ? 'In Call' : 'Joining...'),
SizedBox(height: 20),
Text(_remoteUid != null ? 'User $_remoteUid connected' : 'Waiting for user...'),
],
),
),
);
}
@override
void dispose() {
_engine.leaveChannel();
_engine.release();
super.dispose();
}
}Editor is loading...
Leave a Comment