用户登录

在向服务端请求用户登录的时候,可能会遇到用户不存在或者密码不匹配的错误,请求的时候如果服务端不可用也会发生错误。在我们的应用里要处理可能会发生的这些错误。

打开 AuthService,改造一下这个服务里的 login 方法。先在方法里添加一个东西,类型是 http.Response,名字叫 response。

下面用一个 try,catch ,在这个 try 区块里面执行一下 http 的 post,也就是对服务端发出请求。 把请求回来的结果交给 response。

这个请求如果遇到问题,在 catch 区块里可以处理一下,这里用一个 throw,触发一个异常情况,设置一下错误信息,无法连接服务。

再清理一下已经不需要的这些代码,

如果请求正常被服务端处理了,得到的响应也可能是服务端返回的异常信息,比如用户名不存在,或者密码不匹配等等。

下面判断一下,如果响应里面的状态码,它的值不等于 201 ,可以执行下面这些代码。登录成功得到的响应的状态码会是 201,如果不是 201,就说明得到的是个异常信息。

这样就可以根据响应的数据创建一个 ExceptionResponseModel ,再用 throw 在应用里触发一个异常。

最后再执行一下正常登录以后要做的事情,就是根据响应数据创建一个 UserModel,然后让这个 login 方法返回这个 user 。

这样下面的 switch 就不再需要了,现在可以把它去掉。

LoginForm

打开 LoginForm,在这个登录表单里,用了 AuthService 上的 login 方法, 用它的时候可以在它前面加上一个 await ,然后用一个 try,catch ,把执行 login 方法的代码放在 try 里面。

使用 await,需要把这个 _submotForm 方法标记成一个 async 方法。添加一个 async。

执行 login 的时候,发生的异常,可以在 catch 区块里得到。我们先看一下,在控制台上输出这个 error 。

测试

在应用里试一下,先退出登录,然后在登录表单,输入一个在应用里不存在的用户名,随便再输入一个密码。按一下登录。

编辑器会停在触发异常的这行代码。提示用户名不存在。打开调试,按几下继续。

然后回到 LoginForm, 执行 login 方法,catch 到了错误之后,可以显示一个 SnackBar ,Scaffold of context,用一下 showSnackBar 。 里面用一个 SnackBar ,设置一下它的 content ,用一个 Text 小部件,把 error 交给这个 Text 小部件。

再到应用里试一下,按一下 登录,会显示一个 SnackBar 提示用户名不存在。

输入一个存在的用户名, 再输入一个错误的密码,然后按一下 登录,这次 SnackBar 上的文字是密码不匹配。

重新输入一个正确的密码,按一下登录,成功以后,会在帐户页面上显示当前登录的用户的相关信息。

还有一种异常情况,可以再试一下。 就是如果请求登录的时候,服务不可用,或者网络连接有问题。比如我们先把在本地运行的服务端应用停掉。

在应用里再输入一个用户名,还有跟他对应的密码,然后按一下 登录,这次 SnackBar 上显示的是无法连接服务。

重新运行一下我们的后端应用。

然后再按一下 登录 ,这次服务端成功收到了登录请求,给应用返回了登录的用户信息。

处理用户登录时发生的错误《 Flutter 应用案例: 用户登录 》

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点