Buscar pacotes, repositórios e categorias de apps

Detalhes do pacotev0.8.0

dbus

Uma implementação nativa em Dart do cliente da mensagem do barramento D-Bus. Este pacote permite que aplicativos Dart acessem diretamente serviços na área de trabalho do Linux.

WindowsLinux
Downloads em 30 dias
8,5 mi
Curtidas
80
Pontos Pub
160

Instalar pacote

flutter pub add dbus

Visão geral do pacote

Orientação gerada a partir de informações públicas. Apenas para referência.

Uma implementação nativa em Dart do cliente da mensagem do barramento D-Bus, permitindo que aplicativos Dart se comuniquem diretamente com serviços de desktop do Linux. Este pacote fornece acesso de baixo nível ao D-Bus, permitindo interações com serviços do sistema e aplicativos, como gerenciamento de sessão, eventos de hardware e integração com a área de trabalho. É projetado para desenvolvedores que constroem aplicações desktop no Linux, com suporte a Windows e macOS por meio de implementações compatíveis do D-Bus. A biblioteca oferece uma API limpa e nativa em Dart para envio e recebimento de mensagens pelo D-Bus.

Casos de uso

  • Interagindo com serviços do sistema Linux
  • Integrando recursos de desktop em aplicativos Dart
  • Acessando eventos de hardware e sessão
  • Construindo utilitários de desktop multiplataforma
  • Habilitar a comunicação com outros aplicativos de desktop

Principais recursos

  • Cliente nativo do Dart D-Bus
  • Acesso direto aos serviços de desktop do Linux
  • Suporte para barramentos de mensagens (sessão e sistema)
  • Compatibilidade multiplataforma (Linux, Windows, macOS)
  • API Dart assíncrona limpa

Indicado para

  • Desenvolvedores de aplicativos para desktop voltados para Linux
  • Integrações de nível do sistema
  • Desenvolvedores Dart construindo ferramentas para desktop
  • Aplicações que exigem comunicação com serviço de desktop
  • Projetos que precisam de integração de baixo nível com o Linux

Considerações

  • Principalmente destinado a ambientes Linux
  • Documentação limitada além do uso básico
  • Requer a disponibilidade do daemon D-Bus nos sistemas-alvo
  • Pode ser necessário configurar especificamente para a plataforma no Windows/macOS
  • Não adequado para plataformas móveis ou web

README original

Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.

Pub Package codecov

A native Dart client implementation of D-Bus.

Accessing remote objects

The easiest way to get started is to generate Dart classes from a D-Bus interface definition, for example:

<node name="/com/example/Test/Object">
  <interface name="com.example.Test">
    <property name="Version" type="s" access="read"/>
    <method name="ReverseText">
      <arg name="input" type="s" direction="in"/>
      <arg name="output" type="s" direction="out"/>
    </method>
  </interface>
</node>

The dart-dbus tool processes this interface to generate a Dart source file:

$ dart-dbus generate-remote-object test-object.xml -o test-remote-object.dart

You can then use the generated test-remote-object.dart to access that remote object from your program:

import 'package:dbus/dbus.dart';
import 'test-remote-object.dart';

Future<void> main() async {
  var client = DBusClient.session();
  var object = ComExampleTestObject(client, 'com.example.Test');
  var version = await object.getVersion();
  print('version: $version');
  var reversedText = await object.callReverseText('Hello World');
  print(reversedText);
  await client.close();
}

The code generated by dart-dbus may not be the cleanest API you want to expose for your service. It is recommended that you use the generated code as a starting point and then modify it as necessary.

Exporting local objects

The above interface definition can also be processed to generate a class for exporting this object.

$ dart-dbus generate-object test-object.xml -o test-object.dart

You can then use the generated test-object.dart in your program:

import 'package:dbus/dbus.dart';
import 'test-object.dart';

class TestObject extends ComExampleTestObject {
  @override
  Future<DBusMethodResponse> getVersion() async {
    return DBusGetPropertyResponse(DBusString('1.2'));
  }

  @override
  Future<DBusMethodResponse> doReverseText(String input) async {
    var reversedText = String.fromCharCodes(input.codeUnits.reversed);
    return DBusMethodSuccessResponse([DBusString(reversedText)]);
  }
}

Future<void> main() async {
  var client = DBusClient.session();
  await client.requestName('com.example.Test');
  await client.registerObject(TestObject());
}

Using objects without dbus-dart

You can also choose to access D-Bus objects directly without interface definitions and dbus-dart. This requires writing more code and handing more error cases.

The following code shows how to access the remote object in the above examples:

import 'package:dbus/dbus.dart';

Future<void> main() async {
  var client = DBusClient.session();
  var object = DBusRemoteObject(client, name: 'com.example.Test', path: DBusObjectPath('/com/example/Test/Object'));
  var value = await object.getProperty('com.example.Test', 'Version', signature: DBusSignature('s'));
  var version = value.asString();
  print('version: $version');
  var response = await object.callMethod('com.example.Test', 'ReverseText', [DBusString('Hello World')], replySignature: DBusSignature('s'));
  var reversedText = response.values[0].asString();
  print('$reversedText');
  await client.close();
}

And the following shows how to export that object:

import 'package:dbus/dbus.dart';

class TestObject extends DBusObject {
  TestObject() : super(DBusObjectPath('/com/example/Test/Object'));

  @override
  Future<DBusMethodResponse> getProperty(String interface, String name) async {
    if (interface == 'com.example.Test' && name == 'Version') {
      return DBusGetPropertyResponse(DBusString('1.2'));
    } else {
      return DBusMethodErrorResponse.unknownProperty();
    }
  }

  @override
  Future<DBusMethodResponse> handleMethodCall(DBusMethodCall methodCall) async {
    if (methodCall.interface == 'com.example.Test') {
      if (methodCall.name == 'ReverseText') {
        if (methodCall.signature != DBusSignature('s')) {
          return DBusMethodErrorResponse.invalidArgs();
        }
	var input = methodCall.values[0].asString();
        var reversedText = String.fromCharCodes(input.codeUnits.reversed);
        return DBusMethodSuccessResponse([DBusString(reversedText)]);
      } else {
        return DBusMethodErrorResponse.unknownMethod();
      }
    } else {
      return DBusMethodErrorResponse.unknownInterface();
    }
  }
}

Future<void> main() async {
  var client = DBusClient.session();
  await client.requestName('com.example.Test');
  await client.registerObject(TestObject());
}

Contributing to dbus.dart

We welcome contributions! See the contribution guide for more details.

Categorias

Dependências

Lista de dependências 4 itens

Repositório-fonte

Projetos que usam este pacote