Mail and SMS in Flutter - GeeksforGeeks

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.
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.
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.
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';  }}
The function is named here as “_sendingMails” and the function is declared as “async”, so that it returns a promise.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.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.Else, it will throw/print a text with the url value, as an error message.
The function is named here as “_sendingMails” and the function is declared as “async”, so that it returns a promise.
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.
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.
Else, it will throw/print a text with the url value, as an error message.
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';  }}
The function is named here as “_sendingSMS” and the function is declared as “async”, so that it returns a promise.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.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.Else, it will throw/print a text with the url value, as an error message.
The function is named here as “_sendingSMS” and the function is declared as “async”, so that it returns a promise.
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.
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.
Else, it will throw/print a text with the url value, as an error message.
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'),),
This creates two raised buttons having the text “Here” and “Here” on it, respectively.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.
This creates two raised buttons having the text “Here” and “Here” on it, respectively.
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.
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),                ),              ],            ),          ),        ),      ),    );  }}
Android
Dart
Flutter
Project
Android
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Bottom Navigation Bar in Android
MVVM (Model View ViewModel) Architecture Pattern in Android
Android Architecture
Android Tutorial
Broadcast Receiver in Android With Example
Flutter - DropDownButton Widget
Listview.builder in Flutter
Flutter - Asset Image
Splash Screen in Flutter
Flutter - Custom Bottom Navigation Bar