1.需求
最近使用flutter desktop,开发一个mqtt的桌面工具。
mqtt的发送没有问题,但是订阅的实现有点麻烦。
订阅需要listen监听到消息后,返回给页面,页面刷新收到的消息数据,在页面展示出来。
网上查找,最好实现的方式是event_bus,用起来还真不错。
2.实现
- 先单独实现个eventbus
import 'package:event_bus/event_bus.dart';
class rmsgdata {
late final String data;
rmsgdata(this.data);
}
EventBus eventBus = EventBus();
- UI页面部分订阅topic后,开始监听eventbus
btnsubscribeMsg(context) async {
mcc = MqttClient(clientid!);
mc = await mcc.msgSubscribe(topicname);
showMaterialDialogSingle(context, "订阅成功");
eventBus.on<rmsgdata>().listen((event) {
if (!mounted) return;
setState(() {
backMsgList!.add(event.data);
});
});
}
- 发送部分,mqtt监听到消息后,发送eventbus
void onReceivedHandle(client, topic, payload) {
print("我是处理函数");
serverMqttSend(client, topic, "success");
eventBus.fire(rmsgdata(payload));
}
完成了前端页面的刷新。