点按头部这里的图像比例小图标,可以显示一个窗口,让用户选择想要使用的图像比例。这里需要用到一个表示图像比例的数据。我们可以先去定义一个 Store 。
新建一个文件,放在 lib/post/show 里面,名字是 post_show_store.dart,在这个文件里定义一个 Store,包含的文件是 post_show_store.g.dart,Store 的名字是 PostShowStore。
在这个构造方法里执行 initReactions 初始化要添加的反用。
然后添加一个数据,用 @observable 标注一下,类型是 double? 名字是 mediaAspectRatio 。再添加一个修改这个数据用的动作,用 @action 标注一下,名字是 setMediaAspectRatio ,接收一个 double? 参数,名字是 data,设置一下 mediaAspectRatio 的值,让它等于 data 。
下面再定义一个反应,修改 mediaAspectRatio 的时候,可以把用户选择的值存储在本地设备上,这里要存储的值是 double 类型的,所以我们可以再修改一下 AppStorage,打开 app_service,在这个 AppStorage 里面,复制一份这个 setString 方法,改一下名字,换成 setDouble ,一个 key 参数,一个 double 类型的 value 参数,方法里用 prefs 里的 setDouble 存储这个数据。
然后再复制一份这个 getString 方法,改一下方法返回的值的类型,Future
回到 post_show_store。定义一个方法,名字是 storeMediaAspectRatio ,return 的东西用一下 reaction ,设置一下要监视的数据,这里就是 mediaAspectRatio,再设置一下它的值发生变化以后要做的事情,这里可以判断一下 mediaAspectRatio 是不是不等于 null,如果是就用一下 AppStorage.setDouble ,存储的数据的名字叫 mediaAspectRatio ,值是 mediaAspectRatio! 。
else ,不然的话,也就是如果 mediaAspectRatio 的值是 null ,可以执行 AppStorage.remove 把 mediaAspectRatio 这个数据删除掉。
在 initReactions 里面,用一下 reactionDisposers.add ,执行 storeMediaAspectRatio() 。
创建内容页面小部件的时候可以恢复一下用户之前选择的图像比例,这里我们再定义一个方法。名字是 restoreMediaAspectRatio ,用 async 标记一下这个方法,方法里面声明一个 data,等于 await,执行 AppStorage.getDouble,要获取的数据的名字是 mediaAspectRatio 。
下面判断一下,如果 data != null ,可以执行 setMediaAspectRatio ,把 data 交给这个动作。
post_provider.dart
然后再用一个 provider 把这个 store 提供给小部件使用。打开 post_provider,在这个文件里定义一个 postShowStoreProvider,值可以用一下 Provider.value ,value 的值可以新建一个 PostShowStore。
在 postProviders 这里,再添加一个 postShowStoreProvider。