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