You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter无法从assets加载MQTT证书问题求助

Flutter MQTT证书加载失败:Unable to load asset错误

花了3小时尝试解决Flutter连接MQTT服务器的问题,始终卡在证书加载环节。以下是使用rootBundle.load()加载证书的代码,无论尝试何种方法均报错(报错信息见下方)。

代码实现

_MyHomePageState() {

Future<SecurityContext> loadSecurityContext() async {
  // Load the CA certificate
  final ByteData caByteData = await rootBundle.load('certs/ca.crt');
  final caCrt = String.fromCharCodes(caByteData.buffer.asUint8List());

  // Load the client certificate
  final ByteData clientByteData = await rootBundle.load('certs/mosquitto.crt');
  final clientCrt = String.fromCharCodes(clientByteData.buffer.asUint8List());

  // Load the client private key
  final ByteData keyByteData = await rootBundle.load('certs/mosquitto.key');
  final keyBytes = keyByteData.buffer.asUint8List();


  // Create the security context
  final context = SecurityContext.defaultContext;
  context.setTrustedCertificatesBytes(caCrt.codeUnits);
  context.useCertificateChainBytes(clientCrt.codeUnits);
  context.usePrivateKeyBytes(keyBytes, password: keyPassword);

  // Set the security context for the MQTT client
  return context;
}

loadSecurityContext().then((securityContext) {
  final mqttServer = "REDACTED";
  client = MqttServerClient.withPort(mqttServer, "flutter_client", mqttPort);
  client.secure = true;
  client.securityContext = securityContext;
  client.onConnected = onConnected;
  client.onDisconnected = onDisconnected;
  client.onSubscribed = onSubscribed;
  client.logging(on: true);

  subscription = client.updates!.listen((List<MqttReceivedMessage<MqttMessage>> messages) {
    final MqttPublishMessage receivedMessage = messages[0].payload as MqttPublishMessage;
    final String message = MqttPublishPayload.bytesToStringAsString(receivedMessage.payload.message);

    setState(() {
      _receivedMessage = message;
    });
  });

  client.connect();
});
}

报错信息

Syncing files to device Android SDK built for x86...
E/flutter ( 6814): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: Unable to load asset: certs/ca.crt
E/flutter ( 6814): #0      PlatformAssetBundle.load (package:flutter/src/services/asset_bundle.dart:224:7)
E/flutter ( 6814): <asynchronous suspension>
E/flutter ( 6814): #1      new _MyHomePageState.loadSecurityContext (package:mars2/main.dart:54:35)
E/flutter ( 6814): <asynchronous suspension>
E/flutter ( 6814): 

pubspec.yaml配置

assets:
  - assets/certificates/
  - certs/

证书当前存放在项目根目录的certs文件夹中,之前曾放在assets文件夹内,尝试移动证书位置来解决问题但无效。

相关截图

  • 项目目录结构:项目目录结构
  • pubspec.yaml配置:pubspec.yaml配置

内容的提问来源于stack exchange,提问作者AAnon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 02:27:02