dispose method
Implementation
@override
Future<void> dispose() async {
try {
await methodsChannel.invokeMethod<void>('dispose');
} catch (_) {
// Dispose is best-effort on the native side — always release Dart
// resources even if native throws. Do not transition to disposed
// since native state is unknown.
await _cancelSubs();
await _closeControllers();
rethrow;
}
_state = BoatState.disposed;
await _cancelSubs();
await _closeControllers();
}