Search code examples
flutterkotlinasynchronousdart

Is there anyway in Kotlin something like Dart's Completer behavior?


I'm creating plugin for flutter. And face a issue from Android native. I'm using Kotlin for Android and want to use value from platform channel from Flutter. It's hard to explain in English. Here's a code.

fun Foo(): Any? { 
  methodChannel.invokeMethod(
    "method",
    null, 
    object : ErrorLogResult("tag") {
      override fun success(result: Any?) {
        super.success(result)
        // Get result.
      }
    })

  // return result from result callback after callback is done.
}

It can be like below in dart code.

Future<dynamic> Foo() async {
  final completer = Completer();

  someFunctionWithCallback((result) {
    completer.complete(result);
  });

  return completer.future;
}

Solution

  • Old question, but maybe someone will come across this issue, as I had.

    Yes, there is something similar: CompletableDeferred

    Example pseudocode:

    @Volatile
    private var completableMeetingService = CompletableDeferred<MeetingService>()
    
    // we want to join meeting, but have to wait for initialization
    completableMeetingService.await().joinMeetingWithParams
    
    // completing deffered in some listener
    completableMeetingService.complete(zoomSDK.meetingService)