Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Flutter web: Launch page in target="_self" with url_launcher

I am using url_launcher package.

When in Flutter web, I would like the url to be opened in the current page, and not in target="_blank"

I tried adding forceWebView: true,

if (await canLaunch(url)) {
  await launch(
    url,
    forceSafariVC: true,
    forceWebView: true,
    headers: <String, String>{'target': '_self'},
  );
} else {
  throw 'Could not launch $url';
}

And also added headers thinking they might have something to do, but they don't.

Is there a way to do this? Thank you

Any other solution to open a url in mobile and in web, and that enables the possiblity to open the web link in self is accepted also

like image 966
user3808307 Avatar asked Nov 02 '20 21:11

user3808307


1 Answers

In flutter_web if you want to achieve this you can use the webOnlyWindowName property and pass _self or _blank depending on your choice.

  • _self - opens in the same tab.
  • _blank - opens in a new tab.

I am not sure if its documented properly. But you can find the piece of code responsible for this here.

Following is a working solution which you can test.

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

void main() {
  runApp(UrlLauchDemo());
}

class UrlLauchDemo extends StatelessWidget {
  String url = 'https://www.google.com';
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              MaterialButton(
                color: Colors.greenAccent,
                child: Text('Launch Google in this page'),
                onPressed: () async {
                  if (await canLaunch(url)) {
                    await launch(
                      url,
                      forceSafariVC: true,
                      forceWebView: true,
                      webOnlyWindowName: '_self',
                    );
                  } else {
                    throw 'Could not launch $url';
                  }
                },
              ),
              SizedBox(
                height: 100,
              ),
              MaterialButton(
                color: Colors.blueAccent,
                child: Text('Launch Google in new Tab'),
                onPressed: () async {
                  if (await canLaunch(url)) {
                    await launch(
                      url,
                      forceSafariVC: true,
                      forceWebView: true,
                      webOnlyWindowName: '_blank',
                    );
                  } else {
                    throw 'Could not launch $url';
                  }
                },
              ),
            ],
          ),
        ),
      ),
    );
  }
}

Update: 12.01.2021 This information is documented in the api documentation here

like image 106
Abhilash Chandran Avatar answered Oct 24 '22 06:10

Abhilash Chandran