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
更多关于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();
}
}