Flutter MQTT客户端服务插件mqtt_client_service的使用

Flutter MQTT客户端服务插件mqtt_client_service的使用

特性

  • 轻松发送和接收消息

开始使用

要使用此包,在您的 pubspec.yaml 文件中添加 mqtt_client_service 作为依赖项。

使用方法

以下是一个简单的示例,展示了如何使用 mqtt_client_service 插件:

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

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late MQTTClientService mqttClientService;
  final String broker = 'broker.emqx.io';
  final String clientId = 'mqttx_3ced2008';
  final TextEditingController topicController = TextEditingController();
  final TextEditingController messageController = TextEditingController();
  List<String> receivedMessages = []; // 存储接收到的消息
  Set<String> subscribedTopics = {}; // 跟踪已订阅的主题

  [@override](/user/override)
  void initState() {
    super.initState();
    mqttClientService = MQTTClientService(broker, clientId);
    mqttClientService.onMessageReceived = onMessageReceived;
    mqttClientService.initializeMQTTClient();
  }

  void onMessageReceived(String topic, String message) {
    setState(() {
      receivedMessages.add('Topic: $topic, Message: $message');
    });
  }

  [@override](/user/override)
  void dispose() {
    mqttClientService.onDisconnected();
    super.dispose();
  }

  void handleSubscribe() {
    final topic = topicController.text;
    if (topic.isNotEmpty) {
      mqttClientService.onSubscribed(topic);
    }
  }

  void handleUnsubscribe() {
    final topic = topicController.text;
    if (topic.isNotEmpty) {
      mqttClientService.unSubscribed(topic);
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('MQTT Client Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: <Widget>[
            TextField(
              controller: topicController,
              decoration: const InputDecoration(labelText: '主题'),
            ),
            TextField(
              controller: messageController,
              decoration: const InputDecoration(labelText: '消息'),
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: handleSubscribe,
              child: const Text('订阅'),
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: handleUnsubscribe,
              child: const Text('取消订阅'),
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                mqttClientService.publishMessage(
                  topicController.text,
                  messageController.text,
                );
              },
              child: const Text('发布'),
            ),
            const SizedBox(height: 20),
            Expanded(
              child: ListView.builder(
                itemCount: receivedMessages.length,
                itemBuilder: (context, index) {
                  final messageData = receivedMessages[index];
                  print("Received Message : $messageData");
                  // 解析接收到的消息
                  final parts = messageData.split(', ');
                  final topic = parts[0].substring('Topic: '.length);
                  final message = parts[1].substring('Message: '.length);
                  return ListTile(
                    title: Row(
                      children: [
                        Expanded(
                          child: Text(topic),
                        ),
                        Expanded(
                          child: Text(message),
                        ),
                      ],
                    ),
                  );
                },
              ),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


mqtt_client_service 是一个用于在 Flutter 应用中实现 MQTT 客户端功能的插件。MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息传输协议,常用于物联网设备之间的通信。

以下是如何在 Flutter 项目中使用 mqtt_client_service 插件的基本步骤:

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加 mqtt_client_service 依赖:

dependencies:
  flutter:
    sdk: flutter
  mqtt_client_service: ^0.1.0  # 请检查最新版本

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

2. 初始化 MQTT 客户端

在你的 Dart 文件中,导入 mqtt_client_service 并初始化 MQTT 客户端:

import 'package:mqtt_client_service/mqtt_client_service.dart';

final mqttClientService = MqttClientService();

3. 连接到 MQTT 代理

使用 connect 方法连接到 MQTT 代理。你需要提供代理的地址、端口、客户端 ID 等信息:

Future<void> connect() async {
  await mqttClientService.connect(
    broker: 'your.broker.address',  // MQTT 代理地址
    port: 1883,                     // 端口号,通常是 1883
    clientId: 'flutter_client',     // 客户端 ID
    username: 'your_username',      // 用户名(可选)
    password: 'your_password',      // 密码(可选)
  );
}

4. 订阅主题

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

Future<void> subscribe(String topic) async {
  await mqttClientService.subscribe(topic);
}

5. 发布消息

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

Future<void> publish(String topic, String message) async {
  await mqttClientService.publish(topic, message);
}

6. 接收消息

使用 stream 属性来监听接收到的消息:

mqttClientService.stream.listen((message) {
  print('Received message: ${message.payload} on topic ${message.topic}');
});

7. 断开连接

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

Future<void> disconnect() async {
  await mqttClientService.disconnect();
}

8. 处理连接状态

你可以监听连接状态的变化:

mqttClientService.connectionStatusStream.listen((status) {
  print('Connection status: $status');
});

9. 完整示例

以下是一个完整的示例,展示了如何使用 mqtt_client_service 插件进行连接、订阅、发布和接收消息:

import 'package:flutter/material.dart';
import 'package:mqtt_client_service/mqtt_client_service.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> {
  final mqttClientService = MqttClientService();

  [@override](/user/override)
  void initState() {
    super.initState();
    connect();
  }

  Future<void> connect() async {
    await mqttClientService.connect(
      broker: 'your.broker.address',
      port: 1883,
      clientId: 'flutter_client',
    );

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

    mqttClientService.stream.listen((message) {
      print('Received message: ${message.payload} on topic ${message.topic}');
    });

    mqttClientService.connectionStatusStream.listen((status) {
      print('Connection status: $status');
    });
  }

  Future<void> publish() async {
    await mqttClientService.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: publish,
          child: Text('Publish Message'),
        ),
      ),
    );
  }

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