DroppableDisposedException error encountered when using RustOpaque and Struct in 2.0 #1778
-
Rust code: pub struct Mqtt {
pub client_id: String,
// TODO
pub test: AtomicBool,
}
impl Mqtt {
#[frb(sync)]
pub fn new(client_id: String) -> Mqtt {
// ...
}
pub async fn send(&self, payload: String) -> Result<()> {
// ...
}
pub fn connect(&self, host: String, sink: StreamSink<String>) {
// ...
}
} I use it in Dart like this: void main() {
Mqtt.newMqtt(clientId: 'one').connect(host: "x.x.x.x").listen((e) {
setState(() => msg = e);
// TODO
clientOne?.send(payload: 'one: $event');
});
} Whenever I receive data and call the send method, I get the following error: [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: DroppableDisposedException: Try to use `RustArc<dynamic>` after it has been disposed
#0 Droppable.dangerousReadInternalPtr (package:flutter_rust_bridge/src/droppable/_common.dart:24:16)
#1 RustArc._ptr (package:flutter_rust_bridge/src/rust_arc/_common.dart:13:42)
#2 RustArc.intoRaw (package:flutter_rust_bridge/src/rust_arc/_common.dart:44:17)
#3 RustOpaque.cstEncode (package:flutter_rust_bridge/src/misc/rust_opaque.dart:52:19)
#4 RustOpaque.sseEncode (package:flutter_rust_bridge/src/misc/rust_opaque.dart:57:34)
#5 RustLibApiImpl.sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLockAtomicBool (package:class_card_util/frb_generated.dart:4600:27)
#6 RustLibApiImpl.sse_encode_mqtt (package:class_card_util/frb_generated.dart:5406:5)
#7 RustLibApiImpl.sse_encode_box_autoadd_mqtt (package:class_card_util/frb_generated.dart:4746:5)
#8 RustLibApiImpl.mqttSend.<anonymous closure> (package:class_card_util/frb_generated.dart:1807:9)
#9 BaseHandler.executeNormal (package:flutter_rust_bridge/src/main_components/handler.dart:18:17)
#10 RustLibApiImpl.mqttSend (package:class_card_util/frb_generated.dart:1804:20)
#11 Mqtt.send (package:class_card_util/api/mqtt.dart:85:28)
#12 _HomePageState.connectMqtt.<anonymous closure>.<anonymous closure> (package:class_card_util_example/main.dart:129:20)
#13 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#14 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#15 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#16 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:784:19)
#17 _StreamController._add (dart:async/stream_controller.dart:658:7)
#18 _StreamController.add (dart:async/stream_controller.dart:606:5)
#19 _AsyncStarStreamController.add (dart:async-patch/async_patch.dart:76:16)
#20 BaseHandler._executeStreamInner (package:flutter_rust_bridge/src/main_components/handler.dart)
<asynchronous suspension>
#21 _HomePageState.connectMqtt.<anonymous closure>.<anonymous closure> (package:class_card_util_example/main.dart:127:19)
<asynchronous suspension> When I remove the Is this error expected? Or is there something wrong with the way I'm using it? |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 6 replies
-
I guess it is because Could you please provide a minimal reproducible sample (would be great to be a separate github repo s.t. I can clone and try it)? More specifically, I want to know more about |
Beta Was this translation helpful? Give feedback.
Ok I see: It is not a bug, and just add
#[frb(opaque)] struct Mqtt { ... }
. (Otherwise, as can be seen from the generated dart code, frb automatically thinksMqtt
is a translatable struct, while the AtomicBool is an owned opaque.)Feel free to ask questions if you find any problems!