in

A Dart client for the NATS messaging system

Dart – NATS

The entire project was meticulously written and designed to be used with Dart and Flutter. It’s a Dart belonging to the client. It totally supports the NATS messaging system. 

dart

Flutter Web Support by WebSocket

First of all, Flutter Web Support by WebSocket.

client.connect(Uri.parse('ws://localhost:80'));

Flutter Other Platform Support by TCP Socket and WebSocket

After then, Flutter Other Platform Support by TCP Socket and WebSocket .

client.tcpConnect('localhost');
client.connect(Uri.parse('ws://localhost:80'));

API Change

To support Flutter Web. We change transport from socket to WebSocket and also change API call

Dart Examples:

Run the example/main.dart:

dart example/main.dart

import 'package:dart_nats/dart_nats.dart';

void main() async {
  var client = Client();
  client.connect(Uri.parse('ws://localhost:80'));
  var sub = client.sub('subject1');
  client.pubString('subject1', 'message1');
  var msg = await sub.stream.first;

  print(msg.string);
  client.unSub(sub);
  client.close();
}

Flutter Examples:

Import and Declare object

import 'package:dart_nats/dart_nats.dart' as nats;

  nats.Client natsClient;
  nats.Subscription fooSub, barSub;

Simply connect to server and subscribe to subject

  void connect() {
    natsClient = nats.Client();
    natsClient.connect(Uri.parse('wss://demo.nats.io:443');
    fooSub = natsClient.sub('foo');
    barSub = natsClient.sub('bar');
  }

Use as Stream in StreamBuilder

          StreamBuilder(
            stream: fooSub.stream,
            builder: (context, AsyncSnapshot<nats.Message> snapshot) {
              return Text(snapshot.hasData ? '${snapshot.data.string}' : '');
            },
          ),

Publish Message

      natsClient.pubString('subject','message string');

Dispose

  void dispose() {
    natsClient.close();
    super.dispose();
  }

Full Flutter sample code example/flutter/main.dart

Features

The supported features are what we’re most interested in with this client. As a result, here is a list of functionality that this client presently supports and plans to support:

  • [x] – Publish
  • [x] – Subscribe, unsubscribe
  • [x] – NUID, Inbox
  • [x] – Reconnect to single server when connection lost and resume subscription
  • [x] – Unsubscribe after N message
  • [x] – Request, Respond
  • [x] – Queue subscribe
  • [ ] – caches, flush, drain
  • [x] – Request timeout
  • [ ] – structured data
  • [ ] – Connection option (cluster, timeout,ping interval, max ping, echo,… )
  • [ ] – Random automatic reconnection, disable reconnect, number of attempts, pausing
  • [ ] – Connect to cluster,randomize, Automatic reconnect upon connection failure base server info
  • [x] – Events/status
  • [ ] – disconnect handler, reconnect handler
  • [x] – Buffering message during reconnect atempts
  • [ ] – All authentication models, including NATS 2.0 JWT and seed keys
  • [ ] – NATS 2.2

GitHub

https://github.com/chartchuo/dart-nats

Written by James

A Flutter plugin to use the Firebase Cloud Messaging API

Sweetalertv2 for Flutter