下面再创建一个处理文件信息用的 store ,新建一个文件,放在 lib/file/show 的下面,名字是 file_show_store.dart。
在这个文件里创建一个 store ,包含进来的文件是 file_show_store.g.dart,store 的名字是 FileShowStore。在里面先添加一个属性,类型是 AppService ,名字是 appService 。在构造方法里添加一个带名字的参数,required this.appService。
然后再添加两个数据,用 @observable 标注一下,类型是 bool 名字是 loading 默认值是 false,再添加一个数据,类型是 File? 名字是 file。
下面再添加对应的动作,添加一个 setLoading,接收一个 bool 类型的参数,名字是 data,让 loading 等于 data 。再添加一个动作,名字是 setFile,接收 File 类型的参数,在动作里修改 file 这个数据的值,让它等于 data。
getFileById
再定义一个请求获取文件信息数据用的方法,返回的值的类型是 Future,File? 名字是 getFileById ,接收一个 int 类型的 fileId 参数,文件的 ID ,再添加一个带名字的参数,required int postId,内容的 ID。
接口地址是 files 后面加上 $fileId 参数的值,然后是 /metadata ,再分别导入这些需要的东西,导入 AppConfig,jsonDecode,还有 HttpException。
请求成功以后,声明一个 file,值可以用一下 File.fromJson ,把 responseBody 交给它。这个 fromJson 工厂可以把给它提供的 Map 类型的数据转换成 File 类型的数据。
执行一下 setFile,把 file 交给这个动作。 最后可以让这个方法 return 这个 file。
Provider
下面再创建一个 Provider 提供这个 Store 给小部件使用,新建一个文件,放在 lib/file 的下面,名字是 file_provider.dart。
在文件里创建一个 ProxyProvider,名字是 fileShowStore ,第一个类型是 AppService,要提供的是 FileShowStore。update 方法第二个参数是 appService 。然后再导入需要的这些东西,导入 ProxyProvider,AppService ,还有 FileShowStore 。
声明一个 fileProviders ,它的值是一个列表,里面添加一个 fileShowStoreProvider。
打开 app.dart,在这个 providers 里面,把 fileProviders 里的东西放进来。