Flutter url_launcher downloading the pdf file instead of opening it in browser

8.6k Views Asked by At

I'm using url_launcher: ^5.7.5 and when i'm passing a pdf url in the launch function it it keeps downloading the pdf instead of opening it on my browser,

onTap: () async {
    
   url="http://3.65.45.149/uploads/store/vendor_report/vendor_pickup_report_257.pdf";
       if (await canLaunch(url)){
         await launch(url,
         headers: { "Content-Type":"application/pdf",
                     "Content-Disposition":"inline"}, );
            print("browser url");
            print(url);
          }
              else
              // can't launch url, there is some error
              throw "Could not launch $url";
                                                    },
4

There are 4 best solutions below

3
On

I believe that in this case, would be better you be using webview_flutter: ^3.0.2 instead of laucher, hope that helps you!

0
On

I tried everything but what worked for me was instead of launching your file URL directly, attach Google Drive embed link to it

url = 'https://docs.google.com/gview?embedded=true&url=${fileUrl}'

For your case fileUrl = 'http://3.65.45.149/uploads/store/vendor_report/vendor_pickup_report_257.pdf'

0
On

Updated for the newer versions of the url_launcher flutter package. The launch and canLaunch functions are deprecated.

You can simplify your code and extract it in a compact function:

void openPdfFromUrl(String url) {
  debugPrint('opening PDF url = $url');
  var googleDocsUrl = 'https://docs.google.com/gview?embedded=true&url=${Uri.encodeQueryComponent(url)}';
  debugPrint('opening Google docs with PDF url = $googleDocsUrl');
  final Uri uri = Uri.parse(googleDocsUrl);
  launchUrl(uri);
}
0
On

In the new version of URl_laucher you need to manually specify the launch mode like this:

return await launchUrl(Uri.parse(command),
        mode: LaunchMode.externalNonBrowserApplication);

for webview mode: Launch.inAppWebView;