Skip to content
Related Articles

Related Articles

Improve Article
Mail and SMS in Flutter
  • Last Updated : 14 Sep, 2020

The world works in text. From advertisements to conversations, text is everywhere. The most popular modes of official textual communication are Mails followed by SMS. Companies use these modes to communicate not only with their employees but also with their customers. This had led app developers to include mailing and SMS services in their apps. Flutter uses special plugins, in order to bring these features live and working into mobile apps.

Adding dependencies in Flutter:

In Flutter, everything is a widget and in the same way, Flutter also uses a lot of plugins or dependencies in order to make the app work faster and easier. In this case, the “url_launcher” plugin can be used to launch the mail or SMS in a mobile application.

Steps for adding the plugin to Flutter app is as follows:

  • Open “pubspec.yaml” file from the project folder.

pubspec.yaml file

  • In the pubspec.yaml file, type “url_launcher:” under dependencies.

After adding, the code looks like this:



Dart




dependencies:
 flutter:
   sdk: flutter
 url_launcher:
  • Now click “Pub Get” button in the top of the application (Android Studio).
  • The “Process finished with exit code 0“ in the console shows that the dependency is been added successfully.
  • Now import the plugin or package by adding the “import ‘package:url_launcher/url_launcher.dart’;” code to the top of the “main.dart” file.

Sending a Mail in Flutter:

Now, let’s create a function that can be called whenever the user clicks a button that’s linked to a particular Mail ID, to which the user can send a mail.

Dart




_sendingMails() async {
  const url = 'mailto:feedback@geeksforgeeks.org';
  if (await canLaunch(url)) {
    await launch(url);
  } else {
    throw 'Could not launch $url';
  }
}
  1. The function is named here as “_sendingMails” and the function is declared as “async”, so that it returns a promise.
  2. The “url” variable is assigned with the required Mail ID, as a string. The syntax “mailto:” instructs the app to open the default mailing app of the mobile phone and also fill the “To” section with the Mail ID mentioned in the ‘url’ variable. It is declared as a “const”, so that the variable is not changed at any circumstance.
  3. If there is a possibility to launch the URL, only then the url is launched by calling the launch() function with url variable as an attribute.
  4. Else, it will throw/print a text with the url value, as an error message.

Sending an SMS in Flutter:

Now, let’s create a function that can be called whenever the user clicks a button that’s linked to a phone number, to which the user can send a SMS.

Dart




_sendingSMS() async {
  const url = 'sms:9876543210';
  if (await canLaunch(url)) {
    await launch(url);
  } else {
    throw 'Could not launch $url';
  }
}
  1. The function is named here as “_sendingSMS” and the function is declared as “async”, so that it returns a promise.
  2. The “url” variable is assigned with the required phone number, as a string. The syntax “sms:” instructs the app to open the default messaging app of the mobile phone and also fill the “To” section with the phone number mentioned in the ‘url’ variable. It is declared as a “const”, so that the variable is not changed at any circumstance.
  3. If there is a possibility to launch the URL, only then the url is launched by calling the “launch()” function with url variable as an attribute.
  4. Else, it will throw/print a text with the url value, as an error message.

Calling the functions:

The above functions can be called whenever needed in code, by calling the name of the functions as such. The examples are as follows:

Dart




RaisedButton(
  onPressed: _sendingMails,
  child: Text('Here'),
),
RaisedButton(
  onPressed: _sendingSMS,
  child: Text('Here'),
),
  1. This creates two raised buttons having the text “Here” and “Here” on it, respectively.
  2. For the onPressed attribute, we are calling _sendingMails and _sendingSMS respectively so that, when the first button is pressed the default mail app opens with the Mail ID filled in the “To” section and when the second button is pressed the default messaging app is opened with phone number filled in the “To” section.

Complete Source Code:

Dart




import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:url_launcher/url_launcher.dart';
  
void main() => runApp(MyApp());
  
_sendingMails() async {
  const url = 'mailto:feedback@geeksforgeeks.org';
  if (await canLaunch(url)) {
    await launch(url);
  } else {
    throw 'Could not launch $url';
  }
}
  
_sendingSMS() async {
  const url = 'sms:9876543210';
  if (await canLaunch(url)) {
    await launch(url);
  } else {
    throw 'Could not launch $url';
  }
}
  
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Geeks for Geeks'),
          backgroundColor: Colors.green,
        ),
        body: SafeArea(
          child: Center(
            child: Column(
              children: [
                Container(
                  height: 200.0,
                ),
                Text(
                  'Welcome to GFG!',
                  style: TextStyle(
                    fontSize: 35.0,
                    color: Colors.green,
                    fontWeight: FontWeight.bold,
                  ),
                ),
                Container(
                  height: 20.0,
                ),
                Text(
                  'For any Queries, Mail us',
                  style: TextStyle(
                    fontSize: 18.0,
                    color: Colors.green,
                    //fontWeight: FontWeight.bold,
                  ),
                ),
                Container(
                  height: 10.0,
                ),
                RaisedButton(
                  onPressed: _sendingMails,
                  child: Text('Here'),
                  textColor: Colors.black,
                  padding: const EdgeInsets.all(5.0),
                ),
                Container(
                  height: 20.0,
                ),
                Text(
                  'Or Send SMS',
                  style: TextStyle(
                    fontSize: 18.0,
                    color: Colors.green,
                    //fontWeight: FontWeight.bold,
                  ),
                ),
                Container(
                  height: 10.0,
                ),
                RaisedButton(
                  onPressed: _sendingSMS,
                  child: Text('Here'),
                  textColor: Colors.black,
                  padding: const EdgeInsets.all(5.0),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

Output:

Want a more fast-paced & competitive environment to learn the fundamentals of Android?
Click here to head to a guide uniquely curated by our experts with the aim to make you industry ready in no time!



My Personal Notes arrow_drop_up
Recommended Articles
Page :