Flutter MQTT客户端通信插件universal_mqtt_client的使用

Flutter MQTT客户端通信插件universal_mqtt_client的使用

universal_mqtt_client

Pub Version

一个适用于任何支持Dart编译目标(包括Flutter和Flutter Web)的MQTT客户端。

特性

  • 完整支持MQTT 3.3.1协议。
  • 在所有Dart编译目标(包括Web)上支持MQTT over WebSocket。
  • 在移动设备和桌面端支持MQTT over TCP。
  • 使用Promise和Stream的Dart惯用API。
  • 内置重新连接功能。
  • 完全支持通配符主题。

使用方法

以下是一个完整的示例,展示如何使用universal_mqtt_client插件进行MQTT通信:

/// 要运行此示例,您需要在本地主机:9000上运行WebSocket `mqtt`服务器。

import 'package:universal_mqtt_client/universal_mqtt_client.dart';

void main() async {
  // 创建一个新的UniversalMqttClient。这不会立即启动连接。
  final client = UniversalMqttClient(broker: Uri.parse('ws://localhost:9000'));
  client.status.listen((status) {
    print('连接状态: $status');
  });

  // 现在我们调用`client.connect()`来与MQTT代理建立连接。
  // 返回的Promise会在连接成功、超时或代理返回错误时解析。
  await client.connect();

  // 我们现在订阅客户端并保存返回的StreamSubscription。
  final subscription = client
      .handleString('device_status/1', MqttQos.atLeastOnce)
      .listen((message) => print('设备1状态: $message'));

  // 然后向我们订阅的主题发布一条消息。
  client.publishString(
      'device_status/1', '已连接并运行!', MqttQos.atLeastOnce);

  // 然后我们等待一段时间,然后取消我们的订阅。
  await Future.delayed(Duration(seconds: 2));

  // 现在我们可以取消订阅。这意味着在此之后的消息将不再被客户端接收。
  await subscription.cancel();

  // 最终通过断开与代理的连接来清理我们的连接。
  client.disconnect();
}

更多关于Flutter MQTT客户端通信插件universal_mqtt_client的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter MQTT客户端通信插件universal_mqtt_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


universal_mqtt_client 是一个用于在 Flutter 应用中实现 MQTT 通信的插件。它提供了一个简单易用的接口,允许开发者轻松地与 MQTT 代理进行通信。以下是如何在 Flutter 项目中使用 universal_mqtt_client 的基本步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 universal_mqtt_client 依赖:

dependencies:
  flutter:
    sdk: flutter
  universal_mqtt_client: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 导入包

在你的 Dart 文件中导入 universal_mqtt_client 包:

import 'package:universal_mqtt_client/universal_mqtt_client.dart';

3. 创建 MQTT 客户端

创建一个 MqttClient 实例,并配置 MQTT 代理的连接信息:

final client = MqttClient(
  server: 'broker.hivemq.com',  // MQTT 代理地址
  port: 1883,                   // MQTT 代理端口
  clientIdentifier: 'flutter_client',  // 客户端标识符
);

4. 连接到 MQTT 代理

使用 connect 方法连接到 MQTT 代理:

await client.connect();

5. 订阅主题

使用 subscribe 方法订阅一个或多个主题:

await client.subscribe('test/topic');

6. 发布消息

使用 publish 方法向指定主题发布消息:

await client.publish('test/topic', 'Hello, MQTT!');

7. 接收消息

通过监听 onMessageReceived 流来接收来自订阅主题的消息:

client.onMessageReceived.listen((MqttMessage message) {
  print('Received message: ${message.payload} from topic: ${message.topic}');
});

8. 断开连接

使用 disconnect 方法断开与 MQTT 代理的连接:

await client.disconnect();

完整示例

以下是一个完整的示例,展示了如何使用 universal_mqtt_client 进行 MQTT 通信:

import 'package:flutter/material.dart';
import 'package:universal_mqtt_client/universal_mqtt_client.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MqttExample(),
    );
  }
}

class MqttExample extends StatefulWidget {
  [@override](/user/override)
  _MqttExampleState createState() => _MqttExampleState();
}

class _MqttExampleState extends State<MqttExample> {
  late MqttClient client;

  [@override](/user/override)
  void initState() {
    super.initState();
    client = MqttClient(
      server: 'broker.hivemq.com',
      port: 1883,
      clientIdentifier: 'flutter_client',
    );
    _connectToMqtt();
  }

  Future<void> _connectToMqtt() async {
    await client.connect();
    await client.subscribe('test/topic');
    client.onMessageReceived.listen((MqttMessage message) {
      print('Received message: ${message.payload} from topic: ${message.topic}');
    });
  }

  Future<void> _publishMessage() async {
    await client.publish('test/topic', 'Hello, MQTT!');
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('MQTT Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _publishMessage,
          child: Text('Publish Message'),
        ),
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    client.disconnect();
    super.dispose();
  }
}
回到顶部