Untitled
unknown
plain_text
a month ago
1.9 kB
0
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