[英]flutter - async function always returns null, while it is not null
我正在為我的項目使用Bloc Architect。 我正在嘗試使用應用程序Ui中Bloc文件中的函數,並將表單發送到服務器並使用響應。 但是當我撥打電話時,它返回null。 雖然響應在我的應用程序的其他部分(即回購等)中不為空,但這是我的Ui的代碼:
MaterialButton(
color: Colors.deepPurple,
minWidth: screenAwareSize(500, context),
onPressed: () {
_submitForm(authBloc, user, pass);
},
void _submitForm(AuthBloc authBloc, String user, String pass) async {
formKey.currentState.save();
if (formKey.currentState.validate()) {
var response = await authBloc.login(user, pass);
//when I print(response) it shows null
}
}
這是我的集團課:
class AuthBloc extends MainBloc {
final Repo _repo = Repo();
PublishSubject<Future<UserModel>> _authController = new PublishSubject<Future<UserModel>>();
Observable<Future<UserModel>> get auth => _authController.stream;
login(String user, String pass) async {
Future<UserModel> item = await _repo.login(user, pass);
_authController.sink.add(item);
}
dispose() {
_authController.close();
}
}
AuthBloc authBloc = new AuthBloc();
這是我的API類:
class API{
Future<UserModel> login(String user, String pass) async {
var response =
await client.get(base_url + "login.php?user=${user}&pass=${pass}");
return UserModel.fromJSON(json.decode(response.body));
}}
這是我的回購類:
class Repo {
final API api = new API();
login(String user, String pass) async => await api.login(user, pass);}
您的函數login(String user, String pass)
似乎未返回任何內容。 默認情況下,它將返回Future<void>
。 這就是為什么您的答復為空。
解決此問題的最簡單方法是按以下方式在登錄功能中返回項目。
Future<UserModel> login(String user, String pass) async {
return _repo.login(user, pass);
}
雖然,這可能有效。 我認為這不是以Rx方式使用Bloc架構的合適方法。
您可以在視圖中考慮使用FutureBuilder
或StreamBuilder
。 並將您的auth
轉換為Future<UserModel>
類型。 並使您的視圖訂閱AuthBloc
更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.