我有一个Ffltter应用程序发布到‘topic1’,目前正在收听‘topic1’.

   MQTTManager(
        {required String host,
        required String topic,
        required String identifier,
        required MQTTAppState state})
        :
          _identifier = 'id',
          _host = '48.238.196.188',
          _topic = 'topic1',
          _currentState = state;

我想发布到‘topic1’,然后收听关于‘topic2’的回复

有没有可能用mqtt_client美元?

 void onConnected() {
      _currentState.setAppConnectionState(MQTTAppConnectionState.connected);
      print('EXAMPLE::Mosquitto client connected....');
      _client!.subscribe(_topic, MqttQos.atLeastOnce);
      _client!.updates!.listen((List<MqttReceivedMessage<MqttMessage?>>? c) {
        // ignore: avoid_as
        final MqttPublishMessage recMess = c![0].payload as MqttPublishMessage;

        // final MqttPublishMessage recMess = c![0].payload;
        final String pt =
            MqttPublishPayload.bytesToStringAsString(recMess.payload.message!);
        _currentState.setReceivedText(pt);
        print(
            'EXAMPLE::Change notification:: topic is <${c[0].topic}>, payload is <-- $pt -->');
        print('');
      });
      print(
          'EXAMPLE::OnConnected client callback - Client connection was sucessful');
    }
  }

推荐答案

发布字符串

    void publish(String message) {
      final MqttClientPayloadBuilder builder = MqttClientPayloadBuilder();
      builder.addString(message);
      _client!.publishMessage(_topic1, MqttQos.exactlyOnce, builder.payload!);
    }

订阅者字符串

_client!.subscribe(_topic2, MqttQos.atLeastOnce);

您可以看到这两个不同的主题.

  import 'package:mqtt_client/mqtt_client.dart';
  import 'package:flutter_mqtt/mqtt/state/mqtt_app_state.dart';
  import 'package:mqtt_client/mqtt_server_client.dart';

  class MQTTManager {
    // Private instance of client
    final MQTTAppState _currentState;
    MqttServerClient? _client;
    final String _identifier;
    final String _host;
    final String _topic1;
    final String _topic2;

    // Constructor
    // ignore: sort_constructors_first
    MQTTManager(
        {required String host,
        required String topic,
        required String identifier,
        required MQTTAppState state})
        : //_identifier = identifier,
          _identifier = 'id',
          //_host = host,
          _host = '48.238.196.188',
          //_topic = topic,
          _topic1 = 'topic1',
          _topic2 = 'topic2',
          _currentState = state;

    void initializeMQTTClient() {
      _client = MqttServerClient(_host, _identifier);
      //_client = MqttServerClient('140.238.96.88', 'Where');
      _client!.port = 1883;
      _client!.keepAlivePeriod = 20;
      _client!.onDisconnected = onDisconnected;
      _client!.secure = false;
      _client!.logging(on: true);

      /// Add the successful connection callback
      _client!.onConnected = onConnected;
      _client!.onSubscribed = onSubscribed;

      final MqttConnectMessage connMess = MqttConnectMessage()
          .withClientIdentifier(_identifier)
          .withWillTopic(
              'willtopic') // If you set this you must set a will message
          .withWillMessage('My Will message')
          .startClean() // Non persistent session for testing
          .withWillQos(MqttQos.atLeastOnce);
      print('EXAMPLE::Mosquitto client connecting....');
      _client!.connectionMessage = connMess;
    }

    // Connect to the host
    // ignore: avoid_void_async
    void connect() async {
      assert(_client != null);
      try {
        print('EXAMPLE::Mosquitto start client connecting....');
        _currentState.setAppConnectionState(MQTTAppConnectionState.connecting);
        await _client!.connect();
      } on Exception catch (e) {
        print('EXAMPLE::client exception - $e');
        disconnect();
      }
    }

    void disconnect() {
      print('Disconnected');
      _client!.disconnect();
    }

    void publish(String message) {
      final MqttClientPayloadBuilder builder = MqttClientPayloadBuilder();
      builder.addString(message);
      _client!.publishMessage(_topic1, MqttQos.exactlyOnce, builder.payload!);
    }

    /// The subscribed callback
    void onSubscribed(String topic) {
      print('EXAMPLE::Subscription confirmed for topic $topic');
    }

    /// The unsolicited disconnect callback
    void onDisconnected() {
      print('EXAMPLE::OnDisconnected client callback - Client disconnection');
      if (_client!.connectionStatus!.returnCode ==
          MqttConnectReturnCode.noneSpecified) {
        print('EXAMPLE::OnDisconnected callback is solicited, this is correct');
      }
      _currentState.setAppConnectionState(MQTTAppConnectionState.disconnected);
    }

    /// The successful connect callback
    void onConnected() {
      _currentState.setAppConnectionState(MQTTAppConnectionState.connected);
      print('EXAMPLE::Mosquitto client connected....');
      _client!.subscribe(_topic2, MqttQos.atLeastOnce);
      _client!.updates!.listen((List<MqttReceivedMessage<MqttMessage?>>? c) {
        // ignore: avoid_as
        final MqttPublishMessage recMess = c![0].payload as MqttPublishMessage;

        // final MqttPublishMessage recMess = c![0].payload;
        final String pt =
            MqttPublishPayload.bytesToStringAsString(recMess.payload.message!);
        _currentState.setReceivedText(pt);
        print(
            'EXAMPLE::Change notification:: topic is <${c[0].topic}>, payload is <-- $pt -->');
        print('');
      });
      print(
          'EXAMPLE::OnConnected client callback - Client connection was sucessful');
    }
  }

Flutter相关问答推荐

当第二页在单独的小工具中使用Navigator.pop时,Navigator.push不起作用

我怎样才能判断一个字符串值是否为空(&Q;&Q;)?

如何在Flutter 中不从getX库中初始化GetxController中的变量

在setState之后,Ffltter ListView.Builder未更新

如何在抖动中预加载一条路由,或者即使在屏幕外也保持加载小工具?

如何使页面浏览量达到活动页面所要求的高度?

如何让经过Firebase身份验证的用户能够将Zip文件上载到Firebase云存储?

Flutter 块消费者仅对特定的状态属性更改做出react

我如何在Android 13中通过Flutter应用程序打开文件(不是图像、视频或音频)?

当 Dart SDK 版本范围不匹配时,为什么依赖解析器不会抛出错误?

使用 Flutter 显示/隐藏带有下拉抽屉动画的小部件

在使用 Android 12+ 的真实 Android 设备上,SingleChildScrollView 中最初位于视口之外的无响应 Web 视图

Flutter居中的SizedBox无法居中

使 Row 中的元素保持在中间的空间,如果它们太大,则将它们包裹起来

Flutter - 展开图标无法正常工作

NoSuchMethodError:方法 '[]' 在 null 上被调用.我的信息流中的错误

http响应在Flutter 中返回307

使用 hydrad_bloc 的预览包

Flutter Bloc Todo 示例 - 收听存储库中的单个 todo

单击列表视图导航到 Flutter 中的另一个页面