KevinnZou/compose-webview

Composable that contains WebView got recomposition when navigating and back.

Closed this issue · 5 comments

Please allow me to ask my question in Chinese.

看上去作者是**人,请允许我用中文描述我的问题。
1、ScreenA 中有一个WebView
2、WebView中的网页通过js反过来调用原生程序,使用 JetpackCompose Navigation机制导航到 ScreenB
3、在ScreenB按返回键,导航回ScreenA
结果:ScreenA 发生重组,WebView中的网页被刷新。
通过查资料我知道 JetpackCompose Navigation机制会引起多次 recomposition.
我的问题是:ScreenB按返回键,导航回ScreenA时,有没有办法阻止WebView刷新网页?

@ageback 是的,目前来看导航导致的recompose没法避免。唯一能做的是在离开时将WebView的状态保存下来,并在返回时恢复状态,这个在我的单Android版本的里面有提供示例。

但是在跨平台环境下很难实现这个功能,因为iOS的WKWebView并没有提供一个类似于Android的保存和恢复状态的能力。此外,存储状态的bundle也很难在跨平台环境下统一。所以跨平台环境下的刷新问题可能没法通过状态恢复来解决,我暂时也没有别的想法,可能可以尝试向Compose跨平台官方问问看有没有避免recompose的办法?

@KevinnZou 谢谢您的解答。目前我只需要考虑android平台,跨平台和iOS我不用考虑。
另外我之前考虑过在新的单独Activity中打开ScreenB的方案,还没有实现,暂时不知道是否可行。

@ageback 只考虑单平台的话那你直接用我这个库就行了,用状态存储就行了。单独Activity应该也没用的,Composed设计是只要出去重进就会重组,然后就会刷新,所以只能靠状态存储。

@KevinnZou 请问,状态存储能阻止网页刷新吗?因为我的应用是个SPA单页程序,网页里没有状态,刷新就会跑到网页首页,所以我的目的是不让网页刷新。

@KevinnZou 我运行了您的示例代码,来回导航确实没有重组。回头按您的代码改一下我的程序试试。先关闭issue.