【问题标题】:Make function to return custom stream制作函数以返回自定义流
【发布时间】:2015-05-26 05:27:04
【问题描述】:

是否可以创建一个返回自定义流并像这样处理它的函数?

user.logIn('owner', '1234')
.listen(
  success (Object user) {
    print(user);
  },
  error: (Object user, Object error) {
    print(error);
  }
);

【问题讨论】:

  • 你为什么需要/想要一个流。这不是一次性活动吗?
  • 是的,传递回调参数更好吗?
  • 如果是一次性操作,只需返回 Future<LoginResult> 并像 user.login('owner', '1234').then((loginResult) { ... } 一样使用它
  • 我在谷歌上搜索将回调传递给方法的解决方案,它总是显示与流/未来相关的内容。
  • 是的,Future 用于一次性结果,Stream 用于一系列事件。

标签: dart dart-async


【解决方案1】:

类似:

class LoginResult {
  bool success = false;
  String username;
}

Stream<LoginResult> onLogin() async* {
  while(...) {
    yield new LoginResult()
      ..success = isSuccess
      ..userName = 'someUser';
  }
}

StreamController<LoginResult> onLoginController = new StreamController<LoginResult>();
// might not be necessary if you only need one listener at most
Stream<LoginResult> _onLogin = onLoginController.stream.asBroadcastStream(); 
Stream<LoginResult> get onLogin => _onLogin
...
onLoginController.add(new LoginResult()
  ..success = isSuccess
  ..userName = 'someUser');

那么你就可以像这样使用它了

【讨论】:

    猜你喜欢
    • 2017-10-31
    • 2014-02-27
    • 2012-04-14
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 2016-04-15
    • 1970-01-01
    相关资源
    最近更新 更多