Dart 使函数返回自定义流

Dart 使函数返回自定义流,dart,dart-async,Dart,Dart Async,是否可以创建一个返回自定义流并像这样处理它的函数 user.logIn('owner', '1234') .listen( success (Object user) { print(user); }, error: (Object user, Object error) { print(error); } ); 比如: class LoginResult { bool success = false; String username; } Strea

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

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

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

Stream<LoginResult> onLogin() async* {
  while(...) {
    yield new LoginResult()
      ..success = isSuccess
      ..userName = 'someUser';
  }
}
类登录结果{
布尔成功=假;
字符串用户名;
}
流onLogin()异步*{
而(…){
产生新的LoginResult()
…成功=成功
..用户名='someUser';
}
}

StreamController onLoginController=newstreamcontroller();
//如果您最多只需要一个侦听器,则可能没有必要
Stream _onLogin=onLoginController.Stream.asBroadcastStream();
流get onLogin=>\u onLogin
...
onLoginController.add(新的LoginResult()
…成功=成功
..用户名='someUser');

然后你可以像这样使用它,为什么你需要/想要一个流。这不是一次性事件吗?是的,传递回调参数更好吗?如果是一次性操作,只需返回
Future
并像
user.login('owner','1234')一样使用它。然后((loginResult){…}
我在谷歌搜索将回调传递给方法的解决方案,它总是显示与stream/future相关的内容。是的,
future
用于一次性结果,
stream
用于一系列事件。
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');