Dart возвращает Future, ранее приведенный как тип, отличный от функции

#dart

#dart

Вопрос:

Мне нужно вернуть некоторый тип как Future<dynamic> . Я приложил упрощенную версию своего кода. Я всегда получаю сообщение об ошибке «Значение типа’String’ не может быть возвращено из функции’TestFunc’, потому что оно имеет возвращаемый тип ‘Future’»

Даже если я выполняю «динамический returnVal = text» и возвращаю его, я получаю исключение «Необработанное исключение: тип ‘String’ не является подтипом типа ‘Future< dynamic>’»

 import 'dart:async';

void main(List<String> args) async {
  dynamic gotVal = await testFunc();

  print(gotVal);
}

Future<dynamic> testFunc() {
  String text = "Bla";
  return text;
}
 

Я смог исправить это с помощью завершителя, но для меня это кажется неправильным. Действительно ли это единственное решение для использования такого завершителя? :

 import 'dart:async';

void main(List<String> args) async {
  dynamic gotVal = await testFunc();

  print(gotVal);
}

Future<dynamic> testFunc() {
  String text = "Bla";

  Completer completer = Completer();
  completer.complete(text);

  return completer.future;
}
 

Ответ №1:

Вы должны переписать свой TestFunc, добавив ключевое слово async в его определение:

 Future<dynamic> testFunc() async {
  String text = "Bla";
  return text;
}
 

Комментарии:

1. Это было слишком просто, не заметил этого. Спасибо! Теперь я знаю, для чего нужна асинхронность 🙂