Aprire link in Flutter

Mattepuffo's logo
Aprire link in Flutter

Aprire link in Flutter

In Flutter abbiamo il packeg url_launcher che ci permette di aprire dei link direttamente dalla app.

Sono supportate diverse opzioni, ed è anche in grado di effettuare direttamente delle telefonate.

E' compatibile anche con le versioni desktop; a parte le chiamate o funzioni molto specifiche.

Per installare il package aggiungete questa dipendenza al pubspec.yaml:

dependencies:
  url_launcher: ^6.1.7

Vediamo un primo esempio in cui apriamo il browser di sistema:

import 'dart:async';

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

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'URL Launcher',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Test'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  void initState() {
    super.initState();
  }

  Future<void> _launchUrl(Uri url) async {
    if (!await launchUrl(
      url,
      mode: LaunchMode.externalApplication,
    )) {
      throw 'Non è possibile aprire $url';
    }
  }

  @override
  Widget build(BuildContext context) {
    final Uri toLaunch =
        Uri(scheme: 'https', host: 'www.mattepuffo.com', path: 'blog/');

    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: ListView(
        children: <Widget>[
          Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Padding(
                padding: const EdgeInsets.all(16.0),
                child: Text(
                  toLaunch.toString(),
                ),
              ),
              ElevatedButton(
                onPressed: () => _launchUrl(toLaunch),
                child: const Text('Apri link!'),
              ),
            ],
          ),
        ],
      ),
    );
  }
}

Qui un altro esempio in cui apriamo il link nel browser in app senza Javascript attivo (ho modificato solo la funzione senza ripetere tutta la schermata):

  Future<void> _launchUrl(Uri url) async {
    if (!await launchUrl(
      url,
      mode: LaunchMode.inAppWebView,
      webViewConfiguration: const WebViewConfiguration(enableJavaScript: false),
    )) {
      throw 'Non è possibile aprire $url';
    }
  }

Un ultimo esempio che vediamo è con il DOM Storage disabilitato:

  Future<void> _launchUrl(Uri url) async {
    if (!await launchUrl(
      url,
      mode: LaunchMode.inAppWebView,
      webViewConfiguration: const WebViewConfiguration(enableDomStorage: false),
    )) {
      throw 'Non è possibile aprire $url';
    }
  }

Enjoy!


Condividi

Commentami!