0

我有一个基本的登录表单,我的LoginModel. 但我不明白如何调用该函数notifyListeners以在我的视图中显示一个对话框。

登录小部件:

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        body: new ScopedModel<LoginModel>(
            model: _loginModel,
            child: Center(child: ScopedModelDescendant<LoginModel>(
                builder: (context, child, model) {
              if (model.status == Status.LOADING) {
                return Loading();
              }
              else return showForm(context);
            }))));
  }

和登录模型:

class LoginModel extends Model {

  Status _status = Status.READY;
  Status get status => _status;

  void onLogin(String username, String password) async {
    _status = Status.LOADING;
    notifyListeners();

    try {
      await api.login();
      _status = Status.SUCCESS;
      notifyListeners();

    } catch (response) {
      _status = Status.ERROR;
      notifyListeners();
    }
  }

status当是时我需要显示一个对话框Error

4

1 回答 1

1

最后我得到了这个,只是在方法中返回了一个 FutureonLogin

Future<bool> onLogin(String username, String password) async {
  _status = Status.LOADING;
  notifyListeners();

  try {
    await api.login();
    _status = Status.SUCCESS;
    notifyListeners();
    return true;

  } catch (response) {
    _status = Status.ERROR;
    notifyListeners();
    return false;
  }
}

在小部件中:

onPressed: () async {
  bool success = await _loginModel.onLogin(_usernameController.text, _passwordController.text);
  if(success) {
    Navigator.pop(context, true);
  }
  else{
    _showDialogError();
  }
}
于 2019-03-04T12:42:15.250 回答