Estoy creando una aplicación de Flutter y me gustaría abrir una URL en un navegador web o en una ventana del navegador (en respuesta a un toque de botón). ¿Cómo puedo hacer esto?
TL;RD
Esto ahora se implementa como complemento
const url = "https://flutter.io"; if (await canLaunch(url)) await launch(url); else // can't launch url, there is some error throw "Could not launch $url";Ejemplo completo:
import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; void main() { runApp(new Scaffold( body: new Center( child: new RaisedButton( onPressed: _launchURL, child: new Text('Show Flutter homepage'), ), ), )); } _launchURL() async { const url = 'https://flutter.io'; if (await canLaunch(url)) { await launch(url); } else { throw 'Could not launch $url'; } }
En pubspec.yaml
dependencies: url_launcher: ^5.7.10 Si el valor de la url contiene espacios u otros valores que ahora están permitidos en las URL, utilice
Uri.encodeFull(urlString) o Uri.encodeComponent(urlString) y pase el valor resultante en su lugar.
Si apunta a SDK 30 o superior, canLaunch devolverá falso de forma predeterminada debido a los cambios de visibilidad del paquete: https://developer.android.com/training/basics/intents/package-visibility
en androidManifest.xml deberá agregar lo siguiente directamente debajo de <manifest> :
<queries> <intent> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> </intent> </queries>Entonces lo siguiente debería ser una palabra
const url = "https://flutter.io"; if (await canLaunch(url)){ await launch(url); } else { // can't launch url }Para aleteo:
Como se describe anteriormente por Günter Zöchbauer
Para Flutter Web:
import 'dart:html' as html;Luego usa:
html.window.open(url, name); Asegúrate de ejecutar flutter clean si la import no se resuelve.