title: Flutter Agora.io calling screen
body: <p>I want to add in-app (video) calling like Messenger (Facebook) does. It works when one party creates channel and another one joins.</p>
  
  <p>But is there a way to create calling screen where party B can accept or reject call? I am looking in Agora.io documentation but cannot find anything suitable for this.</p>
  
  <p>This is my code though...</p>
  
  <pre><code> Future&lt;void&gt; 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 AgoraRtcEngine.enableWebSdkInteroperability(true);
      await AgoraRtcEngine.setParameters('''
  {\"che.video.lowBitRateStreamParameter\":{\"width\":320,\"height\":180,\"frameRate\":15,\"bitRate\":140}}''');
      await AgoraRtcEngine.joinChannel(null, 'Test', null, 0);
    }
  
    Future&lt;void&gt; _initAgoraRtcEngine() async {
      AgoraRtcEngine.create(APP_ID);
      AgoraRtcEngine.enableVideo();
    }
  
    void _addAgoraEventHandlers() {
      AgoraRtcEngine.onError = (dynamic code) {
        setState(() {
          final info = 'onError: $code';
          _infoStrings.add(info);
        });
      };
  
      AgoraRtcEngine.onJoinChannelSuccess = (
        String channel,
        int uid,
        int elapsed,
      ) {
        setState(() {
          final info = 'onJoinChannel: $channel, uid: $uid';
          _infoStrings.add(info);
        });
      };
  
      AgoraRtcEngine.onLeaveChannel = () {
        setState(() {
          _infoStrings.add('onLeaveChannel');
          _users.clear();
        });
      };
  
      AgoraRtcEngine.onUserJoined = (int uid, int elapsed) {
        setState(() {
          final info = 'userJoined: $uid';
          _infoStrings.add(info);
          _users.add(uid);
        });
      };
  
      AgoraRtcEngine.onUserOffline = (int uid, int reason) {
        setState(() {
          final info = 'userOffline: $uid';
          _infoStrings.add(info);
          _users.remove(uid);
        });
      };
  
      AgoraRtcEngine.onFirstRemoteVideoFrame = (
        int uid,
        int width,
        int height,
        int elapsed,
      ) {
        setState(() {
          final info = 'firstRemoteVideo: $uid ${width}x $height';
          _infoStrings.add(info);
        });
      };
    } 
  </code></pre>