es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Navegar a diferentes URL en WebView de Flutter.

Estoy tratando de actualizar la URL o de alguna manera navegar a otra página si la URL tiene “intent”, lo cual ocurre automáticamente cuando navego a cualquier película en Netflix.
Aquí está el código:
WebView(
navigationDelegate: (NavigationRequest request) {
if (request.url.substring(0, 6) == "intent") {
print("es un intento");
setState(() {
currentUrl = "https${request.url.substring(6)}";
print(currentUrl);
});
} else {
print("Aún muy adelante");
}
// Deseo navegar a currentUrl pero Navigate.Decision.navigate navega a request.url
return NavigationDecision.navigate;
},

      initialUrl: currentUrl,
      javascriptMode: JavascriptMode.unrestricted,)```

Aquí en navigationDelegate quiero actualizar la URL, pero como request.url es final, no puedo hacerlo... ¿Hay alguna otra forma en la que pueda navegar a currentUrl?

También intenté otro método:

onPageFinished: (url) {
            if (url.substring(0, 6) == "intent") {
              print("es un intento");
          setState(() {
                currentUrl = "https://www.google.com/";
              });
              controller.reload();
            } else {
              print("Aún muy adelante");
        }

        }
      }

El problema es que controller.reload simplemente regresa a la URL anterior.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para navegar a la URL actualizada, puedes utilizar el método loadUrl() de la clase WebViewController. Aquí tienes cómo puedes modificar el navigationDelegate para navegar a la currentUrl:

    WebView(
      controller: _controller, // Inicializa un WebViewController
      navigationDelegate: (NavigationRequest request) {
        if (request.url.contains('intent')) { // Verifica si 'intent' está presente en la URL
          setState(() {
            currentUrl = 'https:${request.url.substring(6)}'; // Actualiza la URL
          });
          _controller.loadUrl(currentUrl); // Navega a la URL actualizada
          return NavigationDecision.prevent; // Evita que el WebView cargue la URL original
        } else {
          return NavigationDecision.navigate;
        }
      },
      initialUrl: currentUrl,
      javascriptMode: JavascriptMode.unrestricted,
    )
    

    Ten en cuenta que he utilizado el método contains() en lugar de substring() para verificar si la URL contiene la cadena ‘intent’. Esto se debe a que el parámetro ‘intent’ puede que no siempre esté al principio de la URL.

Comments are closed.