如何检测 webview url 何时在颤动中发生变化?

Ste*_*eve 2 detect webview flutter

我一直在寻找 flutter 中的 webview 插件,它可以检测 url 何时更改,但没有找到匹配项?我试图检测 url 更改的原因是因为我想在更改时将 bool 变量更改为 true,然后更改应用栏的颜色,这可能吗?是否有任何简单/简单的示例可以实现我在找什么?提前感谢您的任何帮助!

Joh*_*Joe 6

您可以使用StreamSubscription.

  StreamSubscription<String> _onStateChanged;
  final flutterWebviewPlugin = new FlutterWebviewPlugin();

      @override
      void initState() {
        super.initState();
    
        _onStateChanged =
            flutterWebviewPlugin.onUrlChanged.listen((String state) async {
          if (state.startsWith('your_url')) {
                // do whatever you want 
           }
        });
      }
Run Code Online (Sandbox Code Playgroud)


Sho*_*din 5

对于 flutter webview 我使用下面的代码

 body: WebView(
          onPageFinished: (url){
            if (url.toLowerCase().contains("google.com") && url.toLowerCase().contains("status")) {
              if (url.toLowerCase().contains("notok")) {

                Fluttertoast.showToast(msg: "not successfull");
               
              } else if (url.toLowerCase().contains("ok")) {
               
                Fluttertoast.showToast(msg: "successful!");

              }
            }
          },
          javascriptMode: JavascriptMode.unrestricted,
          initialUrl: widget.paymentUrl,
        ));
Run Code Online (Sandbox Code Playgroud)


Álv*_*ero 4

您可以使用navigationDelegate执行以下操作:

WebView(
    initialUrl: yourInitialUrl,
    javascriptMode: JavascriptMode.unrestricted,
    onWebViewCreated: (WebViewController webViewController) {
      _controller.complete(webViewController);
    },
    navigationDelegate: (NavigationRequest request) {
      if(request.url.startsWith(urlSearched)) {

        //You can do anything

        //Prevent that url works
        return NavigationDecision.prevent;
      }
      //Any other url works
      return NavigationDecision.navigate;
    },
  )
Run Code Online (Sandbox Code Playgroud)