在内容页面,如果它的父部件没有给它传递内容数据,创建这个小部件的时候就会请求服务端接口获取到内容数据。之前这个获取内容数据用的方法是在一个 model 里定义的。我们现在可以把这个方法转移到内容页面的 store 里。
打开 post_show_store,在里面添加一个新的属性,类型是 AppService 名字是 appService。然后再添加一个数据,用 @observable 标注一下,类型是 bool 名字是 loading 默认值是 false。下面再添加一个数据,类型是 Post? 名字是 post 。
在动作这里再定义一个动作,用 @action 标注一下,名字是 setLoading,一个 bool 类型的 data 参数,让 loading 等于这个 data 参数的值。再定义一个动作,名字是 setPost,接收一个 Post 类型的参数,名字是 data 。
getPostById
下面再定义一个请求内容数据用的方法,用我们在项目里添加的代码片断,输入 acm,按下 tab。返回的值的类型是 Future
请求的接口地址是 /posts/$postId 。再导入这里需要的这些东西,导入 AppConfig,还有 jsonDecode 所在的包,然后是这个 HttpException 。
请求失败就报个错 ,请求成功可以执行 setPost 动作,把 responseBody 交给它。
然后修改一下构造方法,添加几个带名字的参数,用 required 标记一下 this.appService,再添加一个 this.post ,还有一个 this.mediaAspectRatio。 提示还需要 loading ,这里我们可以找到 loading 这个数据,直接给它提供一个值,让它等于 false。
post_provider.dart
找开 post_provider.dart ,修改一下 postShowStoreProvider,这里现在要用一个 ProxyProvider,第一个类型是 AppService,第二个类型是 PostShowStore。
然后设置一下 update,这个方法有三个参数,context,appService 还有 postShowStore。
在方法里面 return 一个 postShowStore,设置一下 appService 参数,值是 appService,再设置一下 post,值是 postShowStore?.post ,然后是 mediaAspectRatio,值是 postShowStore?.mediaAspectRatio。