I want to launch WhatsApp application from my flutter application
Asked Answered
N

7

18

I am using this dependency url_launcher: ^5.4.1 in my project to launch whatsapp through my flutter application but when i am pressing button to launch application it is not working but showing an error message on emulator that could not open the link. given below is the code with function i am using to launch whatsapp.

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


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

class Wapp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: ThemeData(
          primarySwatch: Colors.orange,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
 void launchWhatsApp(
    {@required int phone,
    @required String message,
    }) async {
  String url() {
    if (Platform.isAndroid) {
      return "whatsapp://wa.me/$phone:03452121308:/?text=${Uri.parse(message)}";
    } else {
      return "whatsapp://send?   phone=$phone&text=${Uri.parse(message)}";
    }
  }

  if (await canLaunch(url())) {
    await launch(url());
  } else {
    throw 'Could not launch ${url()}';
  }
}


Widget build(BuildContext context){
  return Scaffold(
    appBar: AppBar(
      title: Text("Home"), 
    ),

  body: Center(
    child: RaisedButton(
      
      color: Colors.orange,
      textColor: Colors.black,
      padding: EdgeInsets.symmetric(vertical: 20.0, horizontal: 60.0),
      highlightColor: Colors.green,
      onPressed: () {
        launchWhatsApp(phone: 03452121308, message: 'Hello');
      },
      child: Text("Place Your Order",style: TextStyle(
          
          fontWeight: FontWeight.bold,
          fontSize: 15
          
        )
      )
    )
  )

  );
}

}
Naseberry answered 8/8, 2020 at 6:31 Comment(0)
C
22

You are missing the https:// in your url.

Replace the code below with your url() method:

  String url() {
    if (Platform.isAndroid) {
      // add the [https]
      return "https://wa.me/$phone/?text=${Uri.parse(message)}"; // new line
    } else {
      // add the [https]
      return "https://api.whatsapp.com/send?phone=$phone=${Uri.parse(message)}"; // new line
    }
  }
Clywd answered 8/8, 2020 at 6:39 Comment(5)
Still not working after adding https it is showing site can't be reach. Moreover i want to launch application not websiteNaseberry
If you are trying to send a message, consider using: the url https://wa.me/$phone/?text=${Uri.parse(message)}. You provided a wrong url. I updated my answer to use the correct url.Clywd
yes it is now working but how will i open chat with specifi contactNaseberry
The code above opens a specific contact as long as you give it a correct phone. @MoizKhalil. I have no idea what else you are asking for.Clywd
@void I tried your code..its works with all iPhone devices also some low-end Andriod devices..But for all high-spec Andriod devices WhatsApp is not opening..(not showing error.. not even clickable... )Do I have to make some changes in the Andriod.xml file?Ghent
A
18

This worked me by adding this code to android/app/src/main/AndroidManifest.xml below </Application> Tag:

<queries>
        <!-- If your app opens https URLs -->
        <intent>
            <action android:name="android.intent.action.VIEW" />
            <data android:scheme="https" />
        </intent>
        <!-- If your app makes calls -->
        <intent>
            <action android:name="android.intent.action.DIAL" />
            <data android:scheme="tel" />
        </intent>
        <!-- If your sends SMS messages -->
        <intent>
            <action android:name="android.intent.action.SENDTO" />
            <data android:scheme="smsto" />
        </intent>
        <!-- If your app sends emails -->
        <intent>
            <action android:name="android.intent.action.SEND" />
            <data android:mimeType="*/*" />
        </intent>
    </queries>

Method i used to open Whatsapp:

void openWhatsapp(
      {required BuildContext context,
      required String text,
      required String number}) async {
    var whatsapp = number; //+92xx enter like this
    var whatsappURlAndroid =
        "whatsapp://send?phone=" + whatsapp + "&text=$text";
    var whatsappURLIos = "https://wa.me/$whatsapp?text=${Uri.tryParse(text)}";
    if (Platform.isIOS) {
      // for iOS phone only
      if (await canLaunchUrl(Uri.parse(whatsappURLIos))) {
        await launchUrl(Uri.parse(
          whatsappURLIos,
        ));
      } else {
        ScaffoldMessenger.of(context).showSnackBar(
            const SnackBar(content: Text("Whatsapp not installed")));
      }
    } else {
      // android , web
      if (await canLaunchUrl(Uri.parse(whatsappURlAndroid))) {
        await launchUrl(Uri.parse(whatsappURlAndroid));
      } else {
        ScaffoldMessenger.of(context).showSnackBar(
            const SnackBar(content: Text("Whatsapp not installed")));
      }
    }
  }
Artemis answered 8/6, 2022 at 1:50 Comment(1)
Your code is great. Thanks for sharing it with us.Intendancy
T
12

I found a solution adding this code to android/app/src/main/AndroidManifest.xml

<queries>
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="https" />
    </intent>
    <intent>
        <action android:name="android.intent.action.DIAL" />
        <data android:scheme="tel" />
    </intent>
    <intent>
        <action android:name="android.intent.action.SEND" />
        <data android:mimeType="*/*" />
    </intent>
</queries>
Tessitura answered 12/10, 2021 at 18:37 Comment(0)
N
8
 String url() {
      if (Platform.isIOS) {
        return "whatsapp://wa.me/$phone/?text=${Uri.encodeFull(message)}";
      } else {
        return "whatsapp://send?phone=$phone&text=${Uri.encodeFull(message)}";
      }
    }
Nealy answered 16/1, 2021 at 12:1 Comment(1)
Please don't post only code as answer, but also provide an explanation what your code does and how it solves the problem of the question. Answers with an explanation are usually more helpful and of better quality, and are more likely to attract upvotes.Circuitry
S
1

Two things that helped me: Phone number should be pure number. Country code should be the prefix with + sign.

Like +14564564562

Stinking answered 13/11, 2022 at 20:11 Comment(0)
P
1

WhatsApp website says format to use,

Use: https://wa.me/15551234567

Don't use: https://wa.me/+001-(555)1234567

So, flutter code is,

String phoneNumber = '15551234567'; (1 is country code)

TextButton(
child: const Text('WhatsApp'),
onPressed: () {
  final Uri url = Uri(
  scheme: 'https',
  host: 'wa.me',
  path: '$phoneNumber');

  launchUrl(url);
  },
),
Pyrophoric answered 6/11, 2023 at 16:56 Comment(0)
P
0

The plugin works fine, but you need to add the permissions in the android manifest for opening issues as of android 11: https://github.com/flutter/flutter/issues/90099

Pacifier answered 26/10, 2022 at 20:40 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.