Open rainwolfchen opened 4 years ago
Widget createApp() { final AbstractRoutes routes = PageRoutes( pages: <String, Page<Object, dynamic>>{ /// 注册Login登录页面 "login_page": LoginPage(),
/// 注册Main后台主界面页面 "main_page": MainPage(), }, visitor: (String path, Page<Object, dynamic> page) { /// 只有特定的范围的 Page 才需要建立和 AppStore 的连接关系 /// 满足 Page<T> ,T 是 GlobalBaseState 的子类 if (page.isTypeof<GlobalBaseState>()) { /// 建立 AppStore 驱动 PageStore 的单向数据连接 /// 1. 参数1 AppStore /// 2. 参数2 当 AppStore.state 变化时, PageStore.state 该如何变化 page.connectExtraStore<GlobalState>(GlobalStore.store, (Object pagestate, GlobalState appState) { final GlobalBaseState p = pagestate; if (p.themeColorConfig.themeName != appState.themeColorConfig.themeName) { if (pagestate is Cloneable) { final Object copy = pagestate.clone(); final GlobalBaseState newState = copy; newState.themeColorConfig = appState.themeColorConfig; return newState; } } return pagestate; }); } },
); ..... }
参考官方Example做的全局Store保存主题样式的项目,通过 Navigator.of(ctx.context).pushNamed('xxxxx_page', arguments: null); 方式进入页面时能够自动刷新到最新的主题颜色,但是通过pop返回上一页时,好像visitor没能得到自动运行,Store的主题颜色第二次之后的更新没能自动刷新到返回的上一页中 返回上一页的代码形式: Navigator.pop(ctx.context, null)
通过对主题信息的跟踪,可以观察到第一个调用Store的reducer修改Store的状态时,每个visitor的页面都被自动更新到最新的主题信息了,但是改变主题颜色按钮第二次之后的调用,Store的reducer被调用且修改了Store的状态,但是却没有自动同步各个页面的主题信息。改变主题按钮所在页面通过页面自己的reducer可以修改自己的主题状态为Store最新的状态。对应切换页面就有如下情况:
就是上面说的第一次Store的reducer能自动同步到各个页面,但是第二次及后面的reducer没能自动同步到各个页面,切换页面时如果是 Navigator.of(ctx.context).pushNamed 则会同步到最新的Store状态,如果是Navigator.pop 则不会同步到最新而是保持首次修改时有效的那个Store状态
个人感觉这是一个visitor可能的Bug,或者没能对 Navigator.pop 进行自动同步,修改主题所在页面的第二次及后面不能再同步倒是可以自己reducer修改自己的主题状态,但是好像也是应该Store每次都同步更合理
Widget createApp() { final AbstractRoutes routes = PageRoutes( pages: <String, Page<Object, dynamic>>{ /// 注册Login登录页面 "login_page": LoginPage(),
); ..... }
参考官方Example做的全局Store保存主题样式的项目,通过 Navigator.of(ctx.context).pushNamed('xxxxx_page', arguments: null); 方式进入页面时能够自动刷新到最新的主题颜色,但是通过pop返回上一页时,好像visitor没能得到自动运行,Store的主题颜色第二次之后的更新没能自动刷新到返回的上一页中 返回上一页的代码形式: Navigator.pop(ctx.context, null)
通过对主题信息的跟踪,可以观察到第一个调用Store的reducer修改Store的状态时,每个visitor的页面都被自动更新到最新的主题信息了,但是改变主题颜色按钮第二次之后的调用,Store的reducer被调用且修改了Store的状态,但是却没有自动同步各个页面的主题信息。改变主题按钮所在页面通过页面自己的reducer可以修改自己的主题状态为Store最新的状态。对应切换页面就有如下情况:
就是上面说的第一次Store的reducer能自动同步到各个页面,但是第二次及后面的reducer没能自动同步到各个页面,切换页面时如果是 Navigator.of(ctx.context).pushNamed 则会同步到最新的Store状态,如果是Navigator.pop 则不会同步到最新而是保持首次修改时有效的那个Store状态
个人感觉这是一个visitor可能的Bug,或者没能对 Navigator.pop 进行自动同步,修改主题所在页面的第二次及后面不能再同步倒是可以自己reducer修改自己的主题状态,但是好像也是应该Store每次都同步更合理