繁体   English   中英

颤振:函数返回空值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM