Как открыть ссылки tel, mailto, whatsapp во флаттерном веб-просмотре?

Я веб-разработчик и начинаю трепаться. Я создал приложение веб-просмотра Flutter, просмотрев несколько руководств, и оно отлично работает для iOS и Android. Но когда я нажимаю на tel:'0123456789', mailto:'abc@gmail.com', ссылку WhatsApp (https://wa.me/9712345678), появляется страница Not Found. Я хочу открыть внешнее приложение для этих условий. Как с флаттером справиться с этой задачей для поддержки в iOS и Android? Я использовал плагин flutter webview для запуска URL-адреса, например:

import 'package:flutter/material.dart';
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';
import 'package:flutter/services.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.bottom]);
    return new MaterialApp(
      debugShowCheckedModeBanner: false,
      routes: {
        "/": (_) => new WebviewScaffold(
              url: "https://www.website.com/",
              appBar: null,
              withJavascript: true,
              hidden: true,
              enableAppScheme: true,
            ),
      },
    );
  }
}

1 ответ

Установить flutter_url_launcherиз https://pub.dev/packages/url_launcher

      import 'package:url_launcher/url_launcher.dart';

return WebView(

  ...

  navigationDelegate: (NavigationRequest request) {                
    
  if (request.url.contains('wa.me')) {
    launch(request.url); //This is where Whatsapp launches
    return NavigationDecision.prevent;
  }

  ...
});

Вы можете сделать то же самое для tel:а также mailto:если вы хотите, чтобы пользователь использовал собственные приложения для звонков или отправки электронной почты.

      return WebView(

  ...

  navigationDelegate: (NavigationRequest request) {                
    
  if (request.url.contains('mailto:')) {
    launch(request.url);
    return NavigationDecision.prevent;
  }

  if (request.url.contains('tel:')) {
    launch(request.url);
    return NavigationDecision.prevent;
  }

  ...
});
Другие вопросы по тегам