Флаттер: веб-приложение запускает только определенный веб-сайт, другие открываются в локальном браузере телефона - PullRequest
0 голосов
/ 12 марта 2019

У меня есть приложение для просмотра веб-страниц во флаттере. Плагин / пакет "flutter_webview_plugin". В Webview Scaffold у меня есть url = 'www.google.com'. Теперь я хочу, чтобы любой URL, который не содержит «google.com», открывался в локальном браузере телефона.

Может быть, если я смогу ограничить плагин веб-просмотра, если URL не содержит "google.com"

Пожалуйста, дайте мне знать, как мне этого добиться.

Вот мой код:

 WebviewScaffold(
    url: "http://www.google.com")

Дальнейшее уточнение (по просьбе Гюнтера Цохбауэра): У меня есть приложение для просмотра веб-страниц. Так что сайт, который у меня есть, содержит много ссылок. Я не хочу, чтобы ссылки, кроме ссылок на мои домены, загружались в приложение для просмотра веб-страниц. Я хочу, чтобы он открылся снаружи.

1 Ответ

0 голосов
/ 12 марта 2019

Для запуска URL во внешнем браузере используйте пакет https://pub.dartlang.org/packages/url_launcher.

import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';

void main() {
  runApp(Scaffold(
    body: Center(
      child: RaisedButton(
        onPressed: _launchURL,
        child: Text('Show Flutter homepage'),
      ),
    ),
  ));
}

_launchURL() async {
  const url = 'https://flutter.io';
  if (await canLaunch(url)) {
    await launch(url);
  } else {
    throw 'Could not launch $url';
  }
}

Вам просто нужно проверить содержимое URL-адреса и позвонить _launchURL или показать встроенное веб-представление.

Обновление (согласнокомментарий ниже)

https://github.com/flutter/plugins/pull/1323 (для iOS) и https://github.com/flutter/plugins/pull/1236 (Android) добавлена ​​возможность указывать делегатов навигации.

https://github.com/amirh/plugins/blob/ad309267f50f924f9e4620f2126e72a2686c88a0/packages/webview_flutter/example/lib/main.dart#L56-L60показывает пример

    return WebView(
      ...
      navigationDelegate: (NavigationRequest request) {
        if (request.url.startsWith('https://www.youtube.com/')) {
          print('blocking navigation to $request}');
          return NavigationDecision.prevent;
        }
        print('allowing navigation to $request');
        return NavigationDecision.navigate;
      },
...