Как преобразовать сообщение MQTT в формат JSON во Flutter

Я уже подключаюсь и получаю данные от брокера MQTT, используя метод моментальных снимков. Однако я хочу преобразовать сообщение MQTT в формат JSON, потому что я хочу сделать некоторый код условия для определенных данных.

Моя проблема в том, что когда я передаю данные от брокера MQTT, мои данные выходят только для последних данных для этого индекса. Этот индекс состоит из трех разных данных, но, поскольку индекс содержит 3 данных одновременно, отображаются только последние данные индекса. Это мой текущий код. Как я могу это сделать?

@override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Flutter MQTT"),
      ),
      body: FutureBuilder(
        future: mqttSubscribe(topic: "/sensor_simulator/data"),
        builder: (BuildContext context, AsyncSnapshot snapshot) {
          if (snapshot.hasError) {
            return Center(
              child: Text("Error: ${snapshot.error}"),
            );
          }

          // if succeed to connect
          if (snapshot.connectionState == ConnectionState.done) {
            return StreamBuilder(
              stream: snapshot.data,
              builder: (BuildContext context, AsyncSnapshot snapshot) {
                // if have error--> display
                if (snapshot.hasError) {
                  return Center(
                    child: Text("Error: ${snapshot.error}"),
                  );
                }

                // if data detected--> display
                if (snapshot.hasData) {
                  try {
                    final List<MqttReceivedMessage> receiveMessage =
                        snapshot.data;
                    final recMess =
                        receiveMessage[0].payload as MqttPublishMessage;
                    String payload = MqttPublishPayload.bytesToStringAsString(
                        recMess.payload.message);

                    return ListView(
                      children: [
                        Card(
                            child: ListTile(
                          title: Text(payload),
                        ))
                      ],
                      padding: EdgeInsets.all(10),
                    );
                  } catch (e) {
                    return Center(
                      child: Text("Error: ${e.toString()}"),
                    );
                  }
                }

                return Center(child: CircularProgressIndicator());
              },
            );
          }

          return Center(child: CircularProgressIndicator());
        },
      ),
    );
  }
}
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
0
95
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать этот фрагмент кода:

void _subscribeToTopic(String topicName) {
  
  print('MQTTClientWrapper::Subscribing to the $topicName topic');
  client.subscribe(topicName, MqttQos.atMostOnce);

  client.updates!.listen((List<MqttReceivedMessage<MqttMessage>> c) {
  final recMess = c[0].payload as MqttPublishMessage;

  String message =
      MqttPublishPayload.bytesToStringAsString(recMess.payload.message);
  String decodeMessage = Utf8Decoder().convert(message.codeUnits);

  print("MQTTClientWrapper::GOT A NEW MESSAGE $decodeMessage");
  
  });
}

Спасибо! Решено гладко с вашим кодом!

syaf_ 23.12.2022 05:08

Другие вопросы по теме