getCurrentUser method

  1. @override
Future<String> getCurrentUser()
override

Implementation

@override
Future<String> getCurrentUser() async {
  final completer = Completer<String>();
  // Success handler
  headlessWebView.webViewController?.addJavaScriptHandler(
    handlerName: 'onGetCurrentUserResult',
    callback: (args) {
      if (!completer.isCompleted) {
        completer.complete(args.isNotEmpty ? args[0].toString() : 'null');
      }
    },
  );

  // Error handler
  headlessWebView.webViewController?.addJavaScriptHandler(
    handlerName: 'onGetCurrentUserError',
    callback: (args) {
      if (!completer.isCompleted) {
        completer.completeError(
          args.isNotEmpty ? args[0].toString() : 'Unknown error',
        );
      }
    },
  );

  await headlessWebView.webViewController?.evaluateJavascript(
    source: """
    (async () => {
      try {
        const res = await getCurrentUser();
        window.flutter_inappwebview.callHandler('onGetCurrentUserResult', res ?? 'null');
      } catch (e) {
        window.flutter_inappwebview.callHandler('onGetCurrentUserError', 'Error: ' + e.toString());
      }
    })()
  """,
  );

  try {
    final result = await completer.future;
    return result;
  } catch (e) {
    rethrow;
  }
}