使用Scoped模型显示对话框

问题描述 投票:0回答:1

我有一个基本的登录表单,我的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();
    }
  }

statusError时,我需要显示一个对话框

flutter scoped-model
1个回答
1
投票

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

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();
      }
}
© www.soinside.com 2019 - 2024. All rights reserved.