Blog

How to Create a Chat App with Backendless SDK for Flutter

by on May 14, 2019

Create Chat App with Flutter SDK

In this article, we are going to demonstrate how to create a simple chat application with the new Backendless SDK for Flutter. This will give you an overview of the process needed to integrate your Backendless server-side with your Flutter chat app client-side. The Backendless SDK for Flutter is currently available for Android and coming soon for iOS.

Setup A Flutter Chat App

First of all, we will create a new Backendless application in Backendless Console and call it MessagingApp.

Create Messaging App with Flutter SDK

Now we need to create and set up the Flutter project. If you need help installing and running Flutter, please visit official Flutter docs. Let’s create a sample Flutter project and call it messaging_app:

Create Flutter App

Name Flutter App

To use the plugin in Flutter project, we need to add backendless_sdk as a dependency in pubspec.yaml file:

dependencies:
  backendless_sdk: ^0.0.2

After that, add the following import to Dart code:

import 'package:backendless_sdk/backendless_sdk.dart';

Add Backendless SDK to Flutter App

Do not forget to initialize the Backendless SDK. Call Backendless.initApp()  and pass three arguments: application ID, Android API key, and iOS API key. These values must be obtained in Backendless Console.

Add Keys to Flutter App

And now we are ready to use the Backendless APIs.

Subscription API

For a messaging app, we need to subscribe to the channel:

void initListeners() async {
  Channel channel = await Backendless.Messaging.subscribe("myChannel");
  channel.addMessageListener(onMessageReceived);
}

and implement onMessageReceived function:

void onMessageReceived(PublishMessageInfo messageInfo) {
  DateTime time = DateTime.fromMillisecondsSinceEpoch(messageInfo.timestamp);
  setState(() => _messages += "${time.hour}:${time.minute}:${time.second} ${messageInfo.headers['name']}: ${messageInfo.message}\n");
}

Now, when we receive the message from a server we will display the date, author name and the message itself. Note: the onMessageReceived function can receive PublishMessageInfo or String (just a message) arguments.

Also, we need to add the io.socket dependency to support real-time messaging for Android clients. Open your build.gradle file that is located under android/app/ and add the following lines of code:

dependencies {
   implementation ('io.socket:socket.io-client:1.0.0') { 
     // excluding org.json which is provided by Android 
     exclude group: 'org.json', module: 'json' 
   }
}

Add Dependencies to Flutter App

We are done with the Subscription API. Now let’s implement message publishing.

Publishing API

First, let’s create a user interface and add a TextField to display messages and an input field:

@override
 Widget build(BuildContext context) {
   return Scaffold(
     appBar: AppBar(
       title: Text(widget.title),
     ),
     body: Stack(
       children: <Widget>[
         Align(
           alignment: Alignment.topLeft,
           child: Text("$_messages")
         ),
         Align(
           alignment: Alignment.bottomLeft,
           child: TextField(
             onSubmitted: onMessageSubmitted,
             controller: myController,
             decoration: InputDecoration(
               fillColor: Colors.black12, filled: true
             ),
           ),
         ),
       ],
     ),
   );
 }
String _messages = "";
final myController = new TextEditingController();

And implement the publishing function:

void onMessageSubmitted(String message) async {
  Backendless.Messaging.publish(message, channelName: "myChannel",
    publishOptions: PublishOptions()..headers = {"name":"Maksym"});
  myController.clear();
}

And that’s it. Run the application and say hello!

You can find the Flutter chat app full sample project here. Thanks for reading and enjoy using the Backendless platform!