[英]Flutter: Function returns null
不知道为什么我的有效负载为空。 我想使用有效负载来确定我的设备是否已注册。 如果注册,我将订阅主题。 如果没有,我会做其他事情。 但是我的有效载荷为空。
第1部分:
client.subscribe(registerTopic, MqttQos.atMostOnce);
onSub().then((payload) {
//if(payload == '1')
print('Payload: $payload');
client.subscribe(subTopic, MqttQos.atMostOnce);
});
然后是第 2 部分:
Future<String> onSub() async {
client.updates.listen((List<MqttReceivedMessage<MqttMessage>> c) {
final MqttPublishMessage recMess = c[0].payload;
receivedMessage =
MqttPublishPayload.bytesToStringAsString(recMess.payload.message);
print(
'::Change notification:: topic -> <${c[0].topic}>, payload -> <$receivedMessage> ');
payload = receivedMessage;
});
return payload;
}
我的输出:
Performing hot restart...
Syncing files to device AOSP on IA Emulator...
Restarted application in 2,501ms.
I/flutter (12404): ::Data connection is available.
I/flutter (12404): ::Mosquitto client connecting....
I/flutter (12404): ::Mosquitto client connected
I/flutter (12404): Payload: null
I/flutter (12404): ::Subscription confirmed -> topic -> registerTopic/registered
I/flutter (12404): ::Subscription confirmed -> topic -> subTopic/control_instruction
I/flutter (12404): ::Change notification:: topic -> <reisterTopic/registered>, payload -> <1>
I/flutter (12404): ::Change notification:: topic -> <subTopic/control_instruction>, payload -> <00010000011000000000>
你得到空,因为then
从收到第一条消息之前就被称为client.updates
你不应该使用的未来。 如果你想在第一条消息后连接,你应该使用Stream<String>
而不是Future<String>
。
第1部分:
client.subscribe(registerTopic, MqttQos.atMostOnce);
client.updates
.map<String>(_mapToString)
.listen((String payload) {
if (payload == '1') {
client.subscribe(subTopic, MqttQos.atMostOnce);
}
});
第2部分:
String _mapToString(List<MqttReceivedMessage<MqttMessage>> c) {
final MqttPublishMessage recMess = c[0].payload;
receivedMessage = MqttPublishPayload.bytesToStringAsString(recMess.payload.message);
print(
'::Change notification:: topic -> <${c[0].topic}>, payload -> <$receivedMessage> ');
return receivedMessage;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.