我如何 return 到 flutter 中的用户流

How do I return to the user stream in flutter

我有一个问题 return 一个 Stream 到 StreamBuilder 小部件的一个 flutter 问题。我正在尝试访问存储令牌的自定义 class。

class User {
  String token;
  User({this.token});
}
===============================

class AuthService {
  String url = 'https://reqres.in/api/login';
  String token = '';
// {
//   "email": "eve.holt@reqres.in",
//   "password": "cityslicka"
// }
  Map data;
  Future signIn(String email, String password) async {
    final response =
        await post(url, body: {'email': email, 'password': password});
    data = jsonDecode(response.body);
    print(data['token']);
    token = data['token'];
    _userFromDatabaseUser(data);
    return data;
  }
  //create user obj based on the database user
  User _userFromDatabaseUser(Map user) {
    return user != null ? User(token: user['token']) : null;
  }
  //user stream for provider
  Stream<User> get user {
    return  .................. ;
  }
You can use  
Stream<User> get user async*{
yield  .................. ;
}

当你想要 return 流对象时,你可以使用 yield 关键字。

2nd way you can use a stream controller. You can add value in controller and
listen wherever you want to listen in your app there is no need to return stream

您可以使用流控制器:

class AuthService {
  final String url = 'https://reqres.in/api/login';
  final controller = StreamController<User>();

  Future<User> signIn(String email, String password) async {
    final response = await post(url, body: {'email': email, 'password': password});
    final data = jsonDecode(response.body);
    final user = _userFromDatabaseUser(data);
    controller.add(user);
    return user;
  }

  //create user obj based on the database user
  User _userFromDatabaseUser(Map user) {
    return user != null ? User(token: user['token']) : null;
  }

  //user stream for provider
  Stream<User> get user {
    return controller.stream;
  }

请注意,此方法是一个简单的示例,存在一些缺陷,您应该仔细阅读 in the documentation

如果您将此用于您描述的目的,您可能需要查看 pattern and it's implementation as 。以这种方式手动处理用户似乎更容易,但是一旦您达到拥有多个这些流的程度,您可能需要一种更结构化的方法。