在小部件里使用 Provider 提供的东西,可以使用 Consumer 小部件,或者使用 Provider.of 方法。先打开 auth_login_form.dart ,我们要在这个小部件里使用 Provider 提供的 AuthModel 这个类的实例里面的东西。
在小部件的 build 方法里,声明一个 authModel ,它的值可以用一下 Provider.of 这个方法,方法接收一个 context 参数,注意这里还得设置一下这个 of 方法的类型,这个类型就是要获取到的数据的类型,这里可以把它设置成 AuthModel。这样这个 authModel 的值就是离这个小部件最近的 Provider 提供的 AuthModel 实例。
找到小部件里的这个按钮,先在控制台上输出 已登录,后面加上 authModel 里面的 isLoggedIn 这个属性的值,这个 AuthModel 里面有个 login 方法,下面可以执行一下 authModel.login() 这个方法,执行之后可以在控制台上再输出已登录,后面加上 authModel.isLoggedIn 的值。
测试
下面可以测试一下,先打开调试控制台,然后按一下练习页面上的这个 登录 按钮。你会发现,在控制台上第一次输出的 authModel 里的 isLoggedIn 这个属性的值是 false。执行了 authModel 里的 login 这个方法会输出请求登录,打开 auth_model 这个文件可以观察一下,这里这个 login 方法会在控制台上输出请求登录这几个字,另外这个方法会把 isLoggedIn 的值设置成 true。
所以执行了 login 这个方法再次输出 AuthModel 里的 isLoggedIn 这个属性的时候,它的值就变成了 true,因为执行的这个 login 方法会把 isLoggedIn 属性的值修改成 true。