打开内容页面媒体比例底板,显示现在用的是原始,双击内容图像打开全屏幕的显示,然后点按页面右上角这个关闭小图标,你会发现没有回到正常模式的内容页面。
打开 post_show_store.dart ,点按关闭小图标,会执行这里的 restoreMediaAspectRatio,在这个方法里,先会设备里提取数据,然后执行 setMediaAspectRatio,执行它的时候会判断 data 不等于 null 。
因为如果内容媒体的比例是原始,这个 data 就会是 null ,所以就没有执行 setMediaAspectRatio ,这样应用界面也就不会有变化。
这里我们可以把判断的条件删除掉。 然后重新启动一下应用。
在内容列表,打开一个内容页面,打开内容的媒体比例底板,显示是原始。双击内容图像,使用全屏。然后点按这个关闭小图标,这次就回到了正常模式的内容页面了。
反应
这里又会出现一个问题,就是回到正常模式的内容页面以后,你会发现系统的状态栏没有显示出来。我们可以设置一个反应,名字是 setSystemUiWhenMediaAspectRatioChanged。 这个反应监视的是 mediaAspectRatio 这个数据,要做的反应这里,可以判断一下 mediaAspectRatio 是否等于 0 。
如果是可以用一下 SystemChrome.setEnabledSystemUIMode ,设置成 SystemUiMode.immersiveSticky 。 else,不然的话也可以执行一下SystemChrome.setEnabledSystemUIMode ,设置成 SystemUiMode.manual,再添加一个 overlays,一个列表,里面添加一个 SystemUiOverlay.top ,再添加一个 SystemUiOverlay.bottom 。
这样如果 mediaAspectRatio 变成 0 ,就会隐藏系统界面,如果不是 0 ,就会显示系统界面,也就是顶部状态栏还有底部导航栏。
在 initReactions 这里,用一下 reactionDisposers.add,把执行 setSystemUiWhenMediaAspectRatioChanged 返回的结果交给这个 add 方法。
重新启动一下应用。
在内容列表,打开一个内容,然后打开内容的全屏模式,会隐藏系统界面。点按关闭按钮,回到正常模式,你会发现这个状态栏就又会显示出来。