Як відкрити веб-браузер (URL) із мого коду Flutter?


81

Я створюю додаток Flutter, і я хотів би відкрити URL-адресу у веб-браузері або у вікні браузера (у відповідь на натискання кнопки). Як я можу це зробити?


Відповіді:


146

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)і замість цього передайте отримане значення.


2
Зверніть увагу , що вам , можливо , буде потрібно створити новий проект флатера і скопіювати ваші флатера конкретних речей ( lib, pubspec.yamlі т.д.) або , навпаки , оновлення платформи конкретних папки в старому проекті для цього до роботи.
david.mihola

3
Примітка: Не забудьте додати url_launcher: ^3.0.2до pubspec.yaml
hbhakhra

Що ви маєте на увазі під словом "додано до існуючих програм"? Можливо, ваші файли є android/або ios/застаріли. Якщо це працює в новому додатку, порівняйте файли та оновіть їх у своєму проекті. Ви також можете видалити ці каталоги та запустити, flutter create .а потім повторно застосувати зміни вручну.
Günter Zöchbauer

@hbhakhra Зараз url_launcher: ^ 5.0.2 Продовжуйте перевіряти.
Пратік Бутані

1
Як відкрити посилання для flutter_web, де плагін url_launcher недоступний?
bianca

6

Для Флаттера:

Як описано вище Гюнтером Цехбауером

Для Flutter Web:

import 'dart:html' as html;

Потім використовуйте:

html.window.open(url, name);

Переконайтеся, що ви запустили програму, flutter cleanякщо importце не допомогло.


це не для флаттера андроїда чи ios
сойка падалія

3

Якщо ви хочете використовувати url_launcher, будь ласка, використовуйте його у цій формі

environment:
  sdk: ">=2.1.0 <3.0.0"

dependencies:
  url_launcher: ^5.0.2
  flutter:
    sdk: flutter

Ця відповідь також для абсолютних початківців: вони думають за флаттером sdk. Ні, це було невдачею. Пакети були статистами, а не в пурханні Sdk. Це були вторинні пакети (одиничні невеликі фреймворкові помічники).


3

Використання плагіна 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);
}

введіть тут опис зображення


1

Після певного пошуку цю проблему можна вирішити за допомогою інструкцій, перелічених тут: https://groups.google.com/forum/#!topic/flutter-dev/J3ujgdOuG98

Вищевказане UrlLauncherвже непридатне для використання.


Отже, ви тільки що зрозуміли: це посилання там порушено; тож давайте викладемо ще одну відповідь, яка містить лише посилання?
GhostCat

Хоча це теоретично може дати відповідь на питання, переважно було б включити сюди основні частини відповіді та надати посилання для довідки.
GhostCat

1

Найкращий спосіб - використовувати пакет 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-адрес у програмі. Все інше перенаправляється на обробник програми.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.