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配置:

内容的提问来源于stack exchange,提问作者AAnon
相关产品推荐
相关产品推荐

