【问题标题】:Flutter webivewplugin how to set local storageFlutter webivewplugin如何设置本地存储
【发布时间】:2020-08-10 09:22:55
【问题描述】:

我的 Flutter 应用程序流程是这样的:

用户登录 1-如果登录成功,服务器返回一个令牌 2-将令牌设置为 webview 中的本地存储 3-打开 Webview 全屏到特定 URL 我正在使用这个 Webview 插件。示例代码显示它支持本地存储(它有一个 withLocalStorage 选项),但没有显示如何使用它。

我知道这个question1question2

如果我正确设置了本地存储,Webview 会显示帐户页面;否则为登录页面( 这不是发生的事情) Instade 我收到此错误

I/chromium(13409): [INFO:CONSOLE(1)] "Uncaught SyntaxError: Invalid or unexpected token",来源:(1)

我的代码:

    void webwiew(token) {
    flutterWebViewPlugin
        .launch(
      "URLExpml",
      withLocalStorage: true,
      withJavascript: true,
    )
        .whenComplete(() {
  final res = flutterWebViewPlugin.evalJavascript("(function() { try { window.localStorage.setItem('token', $token); } catch (err) { return err; } })();");

  print("Eval result webview : ${res.toString()}");
}); 
  }

【问题讨论】:

    标签: flutter dart webview local-storage


    【解决方案1】:

    来自https://github.com/fluttercommunity/flutter_webview_plugin/pull/51#issuecomment-399468804
    您可以等到第一页加载完成,然后使用evalJavascript 访问LocalStorage
    为此,您可以使用onStateChanged.listen 并检查state.type == WebViewState.finishLoad

    StreamSubscription<WebViewStateChanged> _onStateChanged;
    _onStateChanged = flutterWebviewPlugin.onStateChanged.listen((WebViewStateChanged state) {
      if (mounted) {
        if (state.type == WebViewState.finishLoad) {
          flutterWebviewPlugin.evalJavascript(
              "window.localStorage.setItem('LOCAL_STORAGE','SOMETOKEN');" +
                  "document.getElementById('showLocalStorageBtn').click();"
          );
        }
      }
    });
    

    【讨论】:

    • 谢谢您的回答,您能帮我提供更多详细信息如何使用它,再次感谢您...
    • flutterWebviewPlugin是单例的,可以把flutterWebviewPlugin.onStateChanged.listen放在initState中
    • 很高兴为您提供帮助。如果它最终有效,请将此标记为答案。谢谢。
    猜你喜欢
    • 2018-11-30
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 2020-07-05
    • 2013-02-18
    • 2019-12-04
    • 1970-01-01
    • 2013-11-19
    相关资源
    最近更新 更多