music_assistant 0.2.0 copy "music_assistant: ^0.2.0" to clipboard
music_assistant: ^0.2.0 copied to clipboard

Dart client for using working with the Music Assistant Websocket API from Dart and Flutter applications

Dart Client for Music Assistant #

Dart client for using working with the Music Assistant Websocket API from Dart and Flutter applications.

Example #

import 'package:music_assistant/music_assistant.dart';

void main() async {
  final client = MusicAssistantClient(
    serverUrl: 'http://localhost:8095',
    token: 'your_token_here',
  );

  try {
    await client.connect();
    await client.fetchState();

    for (final player in client.players.values) {
      print('${player.name}: ${player.state}');
    }
  } finally {
    await client.disconnect();
  }
}

Features #

  • Manages WebSocket connections, with automatic reconnection
  • Provides functions for accessing and controlling Music Assistant endpoints
  • Fetches state on demand, and keeps it up to date
  • Supports subscribing to server events for real-time updates

Supported endpoints #

This package currently supports the auth, players, and player_queues endpoints.

Usage #

Connecting #

final client = MusicAssistantClient(
  serverUrl: 'http://localhost:8095',
  token: 'your_token_here',
);

await client.connect();

Sending commands #

Use endpoint methods to send commands to the server:

await client.players.play('player_id');
await client.players.pause('player_id');
await client.players.volumeSet('player_id', 50);
await client.playerQueues.next('queue_id');
// ...etc

See the API documentation for a full list of available commands.

Fetching state #

Fetch the current state of players and queues to have a local copy that is kept up to date with server events:

// Fetch state for all endpoints
await client.fetchState();

// ...or fetch state endpoints individually
await client.players.fetchState();

Accessing a single object #

Once you have fetched the state, you can access a single object by id using the [] operator on the endpoint:

Player? player = client.players['player_id'];

Iterating over all objects #

You can also access all objects using the iterable values property:

for (final player in client.players.values) {
  print('${player.name}: ${player.state}');
}

Subscribing to events #

Once fetched, the client will keep the local state up to date by subscribing to server events. You can also subscribe to events directly if you want to react to them in real-time:

// Subscribe to player updates
final unsubscribe = client.subscribe(
  (event) => print('Event: ${event.type} (${event.objectId})'),
  eventTypes: {EventType.playerUpdated},
);

// Cancel the subscription later
unsubscribe();

License #

This project is licensed under the MIT License.

1
likes
160
points
10
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Dart client for using working with the Music Assistant Websocket API from Dart and Flutter applications

Repository (GitHub)
View/report issues
Contributing

License

MIT (license)

Dependencies

async, http, json_annotation, logging, multicast_dns, uuid, web_socket_channel

More

Packages that depend on music_assistant