Я створюю додаток Flutter, і я хотів би відкрити URL-адресу у веб-браузері або у вікні браузера (у відповідь на натискання кнопки). Як я можу це зробити?
Відповіді:
TL; DR
Зараз це реалізовано як Плагін
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";
Повний приклад:
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';
}
}
У pubspec.yaml
dependencies:
url_launcher: ^5.7.10
Якщо url
значення містить пробіли або інші значення, які тепер дозволені в URL-адресах, використовуйте
Uri.encodeFull(urlString)
або Uri.encodeComponent(urlString)
і замість цього передайте отримане значення.
lib
, pubspec.yaml
і т.д.) або , навпаки , оновлення платформи конкретних папки в старому проекті для цього до роботи.
url_launcher: ^3.0.2
до pubspec.yaml
android/
або ios/
застаріли. Якщо це працює в новому додатку, порівняйте файли та оновіть їх у своєму проекті. Ви також можете видалити ці каталоги та запустити, flutter create .
а потім повторно застосувати зміни вручну.
Для Флаттера:
Як описано вище Гюнтером Цехбауером
Для Flutter Web:
import 'dart:html' as html;
Потім використовуйте:
html.window.open(url, name);
Переконайтеся, що ви запустили програму, flutter clean
якщо import
це не допомогло.
Якщо ви хочете використовувати url_launcher, будь ласка, використовуйте його у цій формі
environment:
sdk: ">=2.1.0 <3.0.0"
dependencies:
url_launcher: ^5.0.2
flutter:
sdk: flutter
Ця відповідь також для абсолютних початківців: вони думають за флаттером sdk. Ні, це було невдачею. Пакети були статистами, а не в пурханні Sdk. Це були вторинні пакети (одиничні невеликі фреймворкові помічники).
Використання плагіна URL Launcher url_launcher
Щоб запустити веб-сторінку, давайте будемо асинхронною функцією і зробимо наступне:
launchURL(String url) async {
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
Якщо ми хотіли, щоб і iOS, і Android відкривали веб-сторінку всередині програми (як WebView), тоді додайте, що forceWebView: true
ми зробимо щось подібне:
launchURL(String url) async {
if (await canLaunch(url)) {
await launch(url, forceWebView: true);
} else {
throw 'Could not launch $url';
}
}
І називати це так
onTap: () {
const url = 'https://google.com';
launchURL(url);
}
Після певного пошуку цю проблему можна вирішити за допомогою інструкцій, перелічених тут: https://groups.google.com/forum/#!topic/flutter-dev/J3ujgdOuG98
Вищевказане UrlLauncher
вже непридатне для використання.
Найкращий спосіб - використовувати пакет url_launcher .
Додайте url_launcher як залежність у свій pubspec.yaml
файл.
dependencies:
url_launcher: ^5.7.10
Приклад використання:
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
void main() {
runApp(
MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Flutter is beautiful'),),
body: Center(
child: RaisedButton(
onPressed: _launchURL,
child: Text('Show Flutter homepage'),
),
),
)),
);
}
_launchURL() async {
const url = 'https://flutter.dev';
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
Метод запуску приймає аргумент рядка, що містить URL-адресу. За замовчуванням Android відкриває браузер при обробці URL-адрес. Ви можете передати
forceWebView: true
параметр, щоб сказати плагіну, щоб він замість цього відкрив WebView . Якщо ви робите це для URL-адреси сторінки, що містить JavaScript, переконайтеся, що ви перейшлиenableJavaScript: true
, інакше спосіб запуску не працюватиме належним чином. В iOS типовою поведінкою є відкриття всіх веб-URL-адрес у програмі. Все інше перенаправляється на обробник програми.
Використовуйте пакет url_launcher . Це зробить це за вас