如何在飘动中返回用户流

问题描述

我遇到了麻烦,将Stream返回到Flutter中的StreamBuilder小部件。我正在尝试访问存储令牌的自定义类。

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  .................. ;
}

要返回流对象时可以使用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

如果将其用于描述目的,则可能需要研究模式,并将其实现为。用这种方式手动处理用户似乎比较容易,但是一旦达到拥有多个此类流的地步,就可能需要一种更有条理的方法。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...