Фьючерсы в примерах Dart / flutter_sound не работают - PullRequest
0 голосов
/ 06 января 2020

Начни возиться с Дарт / Флаттер, я пытаюсь записать и воспроизвести аудио. Примеры, представленные в этой библиотеке: https://github.com/dooboolab/flutter_sound показывают асинхронный c код в Dart с использованием Futures.

Future<String> result = await flutterSound.startRecorder(null);

result.then(path) {
    print('startRecorder: $path');

    _recorderSubscription = flutterSound.onRecorderStateChanged.listen((e) {
    DateTime date = new DateTime.fromMillisecondsSinceEpoch(e.currentPosition.toInt());
    String txt = DateFormat('mm:ss:SS', 'en_US').format(date);
    });
}

Однако этот код даже не компилируется в моей системе, поэтому мне интересно, что Я скучаю. Чтобы скомпилировать этот код, я должен изменить его на что-то вроде:

Future<String> result = widget._flutterSound.startRecorder(null);

result.then((path) {
  print('startRecorder: $path');

  var _recorderSubscription = widget._flutterSound.onRecorderStateChanged.listen((e) {
    DateTime date = new DateTime.fromMillisecondsSinceEpoch(e.currentPosition.toInt());
    print(date);
  });
});

Что мне не хватает?

1 Ответ

1 голос
/ 06 января 2020

Пробовали ли вы это:

Future<String> result() async => flutterSound.startRecorder(null);

при работе с фьючерсами: asyn c и ожидайте: https://dart.dev/codelabs/async-await

The * Ключевые слова 1010 * asyn c и await обеспечивают декларативный способ определения асинхронных функций и использования их результатов. Запомните эти два основных принципа c при использовании asyn c и await :

  • Чтобы определить асинхронную функцию c, добавьте asyn c перед телом функции.
  • Ключевое слово await работает только в asyn c функциях.
...