13

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

1 Answer 1

30
+50

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

Sign up to request clarification or add additional context in comments.

1 Comment

Great, this worked, I have to wait 19 hours to give the bounty

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.