Flutter: как дождаться завершения функции канала платформы Android и возврата результата

Создание канала платформы на Android для загрузки файлов с помощью AWS SDK. Теперь я хочу дождаться завершения загрузки в фоновом режиме и вернуть статус результата.

MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
            if (call.method == "uploadToAWS") {
                new DoUpload().execute();

                // how to await here ?
                result.success(true);
            } else {
                result.notImplemented()
            }
        }

0 ответов

  1. Вместо ожидания удалите "result.success(true);" оттуда и просто назначьте объект "результат" своему собственному объекту типа "MethodChannel.Result".

  2. Затем используйте его для выполнения его метода "success", "error" или "notImplemented" из любого места, как показано в примере ниже.

    public class Activity extends FlutterActivity {
    
      private MethodChannel.Result myResult;
    
      new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
            .setMethodCallHandler(
                    (call, result) -> {
                        myResult = result;
                    }
            );
    
      private void myCustomMethod {
    
        myResult.success(yourData);
    
      }
    
    }
    

Теперь вы можете использовать эти методы myResult.success(), myResult.error() из любого места внутри класса.

Другие вопросы по тегам