zenoh_dart 0.1.0-dev.0 copy "zenoh_dart: ^0.1.0-dev.0" to clipboard
zenoh_dart: ^0.1.0-dev.0 copied to clipboard

Dart and Flutter FFI bindings for the Eclipse Zenoh middleware.

example/lib/main.dart

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:zenoh_dart/zenoh_dart.dart';

void main() {
  runApp(const ZenohExampleApp());
}

class ZenohExampleApp extends StatefulWidget {
  const ZenohExampleApp({super.key});

  @override
  State<ZenohExampleApp> createState() => _ZenohExampleAppState();
}

class _ZenohExampleAppState extends State<ZenohExampleApp> {
  ZenohClient? _client;
  ZenohPublisher? _publisher;
  ZenohSubscriber? _subscriber;
  StreamSubscription<ZenohSample>? _subscription;
  String _status = 'Disconnected';
  String? _lastMessage;

  @override
  void initState() {
    super.initState();
    _initZenoh();
  }

  Future<void> _initZenoh() async {
    setState(() => _status = 'Connecting...');
    try {
      final client = await ZenohClient.connect(ZenohConfig());
      final publisher = await client.declarePublisher('demo/example');
      final subscriber = await client.subscribe('demo/example');
      final subscription = subscriber.stream.listen(
        (sample) => setState(() => _lastMessage = sample.payloadAsString()),
        onError: (Object error) =>
            setState(() => _status = 'Subscription error: $error'),
      );
      setState(() {
        _client = client;
        _publisher = publisher;
        _subscriber = subscriber;
        _subscription = subscription;
        _status = 'Connected';
      });
    } catch (error) {
      setState(() => _status = 'Error: $error');
    }
  }

  Future<void> _sendMessage() async {
    final client = _client;
    final publisher = _publisher;
    if (client == null || publisher == null) {
      return;
    }

    setState(() => _status = 'Publishing...');
    try {
      final payload =
          'Hello from Flutter at ${DateTime.now().toIso8601String()}';
      await client.publishString(publisher, payload);
      setState(() => _status = 'Last publish succeeded');
    } catch (error) {
      setState(() => _status = 'Publish failed: $error');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Zenoh Dart Example')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(_status),
              if (_lastMessage != null) ...[
                const SizedBox(height: 12),
                Text('Last message: $_lastMessage'),
              ],
              const SizedBox(height: 16),
              ElevatedButton(
                onPressed: _client == null ? null : _sendMessage,
                child: const Text('Send message'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  @override
  void dispose() {
    final client = _client;
    final publisher = _publisher;
    final subscriber = _subscriber;
    final subscription = _subscription;
    if (subscription != null) {
      subscription.cancel();
    }
    if (client != null) {
      if (publisher != null) {
        unawaited(client.undeclarePublisher(publisher));
      }
      if (subscriber != null) {
        unawaited(client.undeclareSubscriber(subscriber));
      }
      unawaited(client.close());
    }
    super.dispose();
  }
}
0
likes
160
points
--
downloads

Publisher

unverified uploader

Weekly Downloads

Dart and Flutter FFI bindings for the Eclipse Zenoh middleware.

Repository (GitHub)
View/report issues

Documentation

API reference

License

Apache-2.0 (license)

Dependencies

ffi, flutter, flutter_web_plugins, meta, plugin_platform_interface

More

Packages that depend on zenoh_dart

Packages that implement zenoh_dart