flutter - 如何在 Dart 中返回 Future<T> 结果

标签 flutter dart

我正在切换库,但我的界面是 getDuration返回 Duration由于引用过多,我无法更改此设置。
所以我必须返回Duration而不是 Future<Duration>AudioPlayer类(class)。
有什么办法吗?

这是解释我想要做什么的可执行代码。

import 'dart:core';
import 'dart:async';

// This interface is hardly to modify becase this is referenced from many place.
abstract class IAudioPlayer {
  Duration getDuration();
}

// This is old library that returns `Duration`
class OldLibraryAudioPlayer {
  Duration getDuration() {
    return Duration(seconds: 1);
  }
}

// This is new library that returns `Future<Duration>`
class NewLibraryAudioPlayer {
  Future<Duration> getDuration() async {
    var completer = new Completer<Duration>();

    new Timer(new Duration(seconds: 1),
        () => completer.complete(Duration(seconds: 1)));

    return completer.future;
  }
}

class AudioPlayer implements IAudioPlayer {
  // OldLibraryAudioPlayer _player = OldLibraryAudioPlayer();
  NewLibraryAudioPlayer _player = NewLibraryAudioPlayer();

  @override
  Duration getDuration() {
    // I want to return Duration instead of Future<Duration>.
    return _player.getDuration();
  }
}

void main() {
  final player = AudioPlayer();
  final duration = player.getDuration();
  print('$duration');
}

最佳答案

您需要将函数转换为 async或者直接返回结果。

例子:

Future<Duration> getDuration() async {
  final duration = await player.getDuration();
  return duration;
}

或者
Future<Duration> getDuration() {
  return player.getDuration();
}

希望有帮助!

关于flutter - 如何在 Dart 中返回 Future<T> 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60022684/

相关文章:

flutter - 在点击时禁用 FlatButton 声音( flutter )

flutter - flutter 中的 SlideTransition 在滑入之前占用空间

angularjs - 使用为angular.js编写的第三方依赖项

dart - 有没有办法在 Dart 中通过引用传递原始参数?

dart - Dart 2.0是否具有扩展方法?

flutter Azure AD 身份验证 : How to display the user email and name retrieved during login to another screen

flutter - 如何在 flutter 中将变量从一个 .dart 文件导入到另一个 .dart 文件

firebase - 谷歌登录在模拟器上工作但不在 Android 设备上工作 flutter

flutter - 本地通知抖动

flutter - 当按下 “ADD PRODUCT”时,在同一页面上添加更多产品容器