Skip to content

Commit

Permalink
feat!: expose classes of package audioplayers_platform_interface (#…
Browse files Browse the repository at this point in the history
…1442)

# Description

- move files of `audioplayers_platform_interface` into `src` folder
- export files to expose classes in `audioplayers_platform_interface.dart`

## Breaking Change

### Migration instructions

Exposed classes in `audioplayers_platform_interface`:

Before:
```
import 'package:audioplayers_platform_interface/api/audio_context.dart';
import 'package:audioplayers_platform_interface/api/for_player.dart';
import 'package:audioplayers_platform_interface/api/log_level.dart';
import 'package:audioplayers_platform_interface/api/player_mode.dart';
import 'package:audioplayers_platform_interface/api/player_state.dart';
import 'package:audioplayers_platform_interface/api/release_mode.dart';
import 'package:audioplayers_platform_interface/streams_interface.dart';
import 'package:audioplayers_platform_interface/global_platform_interface.dart';
```

After:
```
import 'package:audioplayers_platform_interface/audioplayers_platform_interface.dart';
```

Internal classes in `audioplayers_platform_interface`:

Before:
```
import 'package:audioplayers_platform_interface/method_channel_interface.dart';
import 'package:audioplayers_platform_interface/api/audio_context_config.dart';
```

After:
```
import 'package:audioplayers_platform_interface/src/method_channel_interface.dart';
import 'package:audioplayers_platform_interface/src/api/audio_context_config.dart';
```
  • Loading branch information
Gustl22 authored Mar 18, 2023
1 parent e59c3b9 commit a6f89be
Show file tree
Hide file tree
Showing 19 changed files with 164 additions and 161 deletions.
6 changes: 3 additions & 3 deletions getting_started.md
Original file line number Diff line number Diff line change
Expand Up @@ -192,12 +192,12 @@ To configure a player specific Audio Context (if desired), use:

**Note:** As the iOS platform can not handle contexts for each player individually, for convenience this would also set the Audio Context globally.

While each platform has its own set of configurations, they are somewhat related, and you can create them using a unified interface call [`AudioContextConfig`](https://pub.dev/documentation/audioplayers_platform_interface/latest/api_audio_context_config/api_audio_context_config-library.html).
While each platform has its own set of configurations, they are somewhat related, and you can create them using a unified interface call [`AudioContextConfig`](https://pub.dev/documentation/audioplayers_platform_interface/latest/src_api_audio_context_config/src_api_audio_context_config-library.html).
It provides generic abstractions that convey intent, that are then converted to platform specific configurations.

Note that if this process is not perfect, you can create your configuration from scratch by providing exact details for each platform via
[AudioContextAndroid](https://pub.dev/documentation/audioplayers_platform_interface/latest/api_audio_context/AudioContextAndroid-class.html) and
[AudioContextIOS](https://pub.dev/documentation/audioplayers_platform_interface/latest/api_audio_context/AudioContextIOS-class.html).
[AudioContextAndroid](https://pub.dev/documentation/audioplayers_platform_interface/latest/audioplayers_platform_interface/AudioContextAndroid-class.html) and
[AudioContextIOS](https://pub.dev/documentation/audioplayers_platform_interface/latest/audioplayers_platform_interface/AudioContextIOS-class.html).

```dart
player.setAudioContext(AudioContext(
Expand Down
16 changes: 8 additions & 8 deletions packages/audioplayers/lib/audioplayers.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
export 'package:audioplayers_platform_interface/api/audio_context.dart';
export 'package:audioplayers_platform_interface/api/audio_context_config.dart';
export 'package:audioplayers_platform_interface/api/for_player.dart';
export 'package:audioplayers_platform_interface/api/log_level.dart';
export 'package:audioplayers_platform_interface/api/player_mode.dart';
export 'package:audioplayers_platform_interface/api/player_state.dart';
export 'package:audioplayers_platform_interface/api/release_mode.dart';
export 'package:audioplayers_platform_interface/global_platform_interface.dart';
export 'package:audioplayers_platform_interface/src/api/audio_context.dart';
export 'package:audioplayers_platform_interface/src/api/audio_context_config.dart';
export 'package:audioplayers_platform_interface/src/api/for_player.dart';
export 'package:audioplayers_platform_interface/src/api/log_level.dart';
export 'package:audioplayers_platform_interface/src/api/player_mode.dart';
export 'package:audioplayers_platform_interface/src/api/player_state.dart';
export 'package:audioplayers_platform_interface/src/api/release_mode.dart';
export 'package:audioplayers_platform_interface/src/global_platform_interface.dart';

export 'src/audio_cache.dart';
export 'src/audio_pool.dart';
Expand Down
2 changes: 1 addition & 1 deletion packages/audioplayers/test/audioplayers_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:audioplayers/audioplayers.dart';
import 'package:audioplayers_platform_interface/method_channel_interface.dart';
import 'package:audioplayers_platform_interface/src/method_channel_interface.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,129 +1,9 @@
import 'dart:async';
import 'dart:typed_data';

import 'package:audioplayers_platform_interface/api/audio_context.dart';
import 'package:audioplayers_platform_interface/api/for_player.dart';
import 'package:audioplayers_platform_interface/api/player_mode.dart';
import 'package:audioplayers_platform_interface/api/release_mode.dart';
import 'package:audioplayers_platform_interface/method_channel_audioplayers_platform.dart';
import 'package:plugin_platform_interface/plugin_platform_interface.dart';

/// The interface that implementations of audioplayers must implement.
///
/// Platform implementations should extend this class rather than implement it
/// as `audioplayers` does not consider newly added methods to be breaking
/// changes. Extending this class (using `extends`) ensures that the subclass
/// will get the default implementation, while platform implementations that
/// `implements` this interface will be broken by newly added
/// [AudioplayersPlatform] methods.
abstract class AudioplayersPlatform extends PlatformInterface {
AudioplayersPlatform() : super(token: _token);

static final Object _token = Object();

/// The default instance of [AudioplayersPlatform] to use.
///
/// Defaults to [MethodChannelAudioplayersPlatform].
/// Platform-specific plugins should set this with their own platform-specific
/// class that extends [AudioplayersPlatform] when they register themselves.
static AudioplayersPlatform instance = MethodChannelAudioplayersPlatform();

/// Pauses the audio that is currently playing.
///
/// If you call [resume] later, the audio will resume from the point that it
/// has been paused.
Future<void> pause(String playerId);

/// Stops the audio that is currently playing.
///
/// The position is going to be reset and you will no longer be able to resume
/// from the last point.
Future<void> stop(String playerId);

/// Resumes the audio that has been paused or stopped.
Future<void> resume(String playerId);

/// Releases the resources associated with this media player.
///
/// The resources are going to be fetched or buffered again as needed.
Future<void> release(String playerId);

/// Moves the cursor to the desired position.
Future<void> seek(String playerId, Duration position);

/// Sets the stereo balance.
///
/// -1 - The left channel is at full volume; the right channel is silent.
/// 1 - The right channel is at full volume; the left channel is silent.
/// 0 - Both channels are at the same volume.
Future<void> setBalance(String playerId, double balance);

/// Sets the volume (amplitude).
///
/// 0 is mute and 1 is the max volume. The values between 0 and 1 are linearly
/// interpolated.
Future<void> setVolume(String playerId, double volume);

/// Sets the release mode.
///
/// Check [ReleaseMode]'s doc to understand the difference between the modes.
Future<void> setReleaseMode(String playerId, ReleaseMode releaseMode);

/// Sets the playback rate.
///
/// iOS and macOS have limits between 0.5 and 2x
/// Android SDK version should be 23 or higher
Future<void> setPlaybackRate(String playerId, double playbackRate);

/// Configures the player to read the audio from a URL.
///
/// The resources will start being fetched or buffered as soon as you call
/// this method.
Future<void> setSourceUrl(
String playerId,
String url, {
bool? isLocal,
});

/// Configures the play to read the audio from a byte array.
Future<void> setSourceBytes(
String playerId,
Uint8List bytes,
);

Future<void> setAudioContext(
String playerId,
AudioContext audioContext,
);

Future<void> setPlayerMode(
String playerId,
PlayerMode playerMode,
);

/// Returns the duration of the media, in milliseconds, if available.
///
/// Might not be available if:
/// * source has not been set or prepared yet (for remote audios it must be
/// downloaded and buffered first)
/// * source does not support operation (e.g. streams)
/// * otherwise not supported (e.g. LOW_LATENCY mode on Android)
Future<int?> getDuration(String playerId);

/// Returns the current position of playback, in milliseconds, if available.
///
/// Might not be available if:
/// * source has not been set or prepared yet (for remote audios it must be
/// downloaded and buffered first)
/// * source does not support operation (e.g. streams)
/// * otherwise not supported (e.g. LOW_LATENCY mode on Android)
Future<int?> getCurrentPosition(String playerId);

Stream<ForPlayer<Duration>> get positionStream;

Stream<ForPlayer<Duration>> get durationStream;

Stream<ForPlayer<void>> get completeStream;

Stream<ForPlayer<void>> get seekCompleteStream;
}
export 'src/api/audio_context.dart';
export 'src/api/for_player.dart';
export 'src/api/log_level.dart';
export 'src/api/player_mode.dart';
export 'src/api/player_state.dart';
export 'src/api/release_mode.dart';
export 'src/audioplayers_platform_interface.dart';
export 'src/global_platform_interface.dart';
export 'src/streams_interface.dart';
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'dart:io' show Platform;

import 'package:audioplayers_platform_interface/api/audio_context.dart';
import 'package:audioplayers_platform_interface/src/api/audio_context.dart';

/// This class contains flags to control several secondary, platform-specific
/// aspects of audio playback, like how this audio interact with other audios,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
import 'dart:async';
import 'dart:typed_data';

import 'package:audioplayers_platform_interface/src/api/audio_context.dart';
import 'package:audioplayers_platform_interface/src/api/for_player.dart';
import 'package:audioplayers_platform_interface/src/api/player_mode.dart';
import 'package:audioplayers_platform_interface/src/api/release_mode.dart';
import 'package:audioplayers_platform_interface/src/method_channel_audioplayers_platform.dart';
import 'package:plugin_platform_interface/plugin_platform_interface.dart';

/// The interface that implementations of audioplayers must implement.
///
/// Platform implementations should extend this class rather than implement it
/// as `audioplayers` does not consider newly added methods to be breaking
/// changes. Extending this class (using `extends`) ensures that the subclass
/// will get the default implementation, while platform implementations that
/// `implements` this interface will be broken by newly added
/// [AudioplayersPlatform] methods.
abstract class AudioplayersPlatform extends PlatformInterface {
AudioplayersPlatform() : super(token: _token);

static final Object _token = Object();

/// The default instance of [AudioplayersPlatform] to use.
///
/// Defaults to [MethodChannelAudioplayersPlatform].
/// Platform-specific plugins should set this with their own platform-specific
/// class that extends [AudioplayersPlatform] when they register themselves.
static AudioplayersPlatform instance = MethodChannelAudioplayersPlatform();

/// Pauses the audio that is currently playing.
///
/// If you call [resume] later, the audio will resume from the point that it
/// has been paused.
Future<void> pause(String playerId);

/// Stops the audio that is currently playing.
///
/// The position is going to be reset and you will no longer be able to resume
/// from the last point.
Future<void> stop(String playerId);

/// Resumes the audio that has been paused or stopped.
Future<void> resume(String playerId);

/// Releases the resources associated with this media player.
///
/// The resources are going to be fetched or buffered again as needed.
Future<void> release(String playerId);

/// Moves the cursor to the desired position.
Future<void> seek(String playerId, Duration position);

/// Sets the stereo balance.
///
/// -1 - The left channel is at full volume; the right channel is silent.
/// 1 - The right channel is at full volume; the left channel is silent.
/// 0 - Both channels are at the same volume.
Future<void> setBalance(String playerId, double balance);

/// Sets the volume (amplitude).
///
/// 0 is mute and 1 is the max volume. The values between 0 and 1 are linearly
/// interpolated.
Future<void> setVolume(String playerId, double volume);

/// Sets the release mode.
///
/// Check [ReleaseMode]'s doc to understand the difference between the modes.
Future<void> setReleaseMode(String playerId, ReleaseMode releaseMode);

/// Sets the playback rate.
///
/// iOS and macOS have limits between 0.5 and 2x
/// Android SDK version should be 23 or higher
Future<void> setPlaybackRate(String playerId, double playbackRate);

/// Configures the player to read the audio from a URL.
///
/// The resources will start being fetched or buffered as soon as you call
/// this method.
Future<void> setSourceUrl(
String playerId,
String url, {
bool? isLocal,
});

/// Configures the play to read the audio from a byte array.
Future<void> setSourceBytes(
String playerId,
Uint8List bytes,
);

Future<void> setAudioContext(
String playerId,
AudioContext audioContext,
);

Future<void> setPlayerMode(
String playerId,
PlayerMode playerMode,
);

/// Returns the duration of the media, in milliseconds, if available.
///
/// Might not be available if:
/// * source has not been set or prepared yet (for remote audios it must be
/// downloaded and buffered first)
/// * source does not support operation (e.g. streams)
/// * otherwise not supported (e.g. LOW_LATENCY mode on Android)
Future<int?> getDuration(String playerId);

/// Returns the current position of playback, in milliseconds, if available.
///
/// Might not be available if:
/// * source has not been set or prepared yet (for remote audios it must be
/// downloaded and buffered first)
/// * source does not support operation (e.g. streams)
/// * otherwise not supported (e.g. LOW_LATENCY mode on Android)
Future<int?> getCurrentPosition(String playerId);

Stream<ForPlayer<Duration>> get positionStream;

Stream<ForPlayer<Duration>> get durationStream;

Stream<ForPlayer<void>> get completeStream;

Stream<ForPlayer<void>> get seekCompleteStream;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'package:audioplayers_platform_interface/api/audio_context.dart';
import 'package:audioplayers_platform_interface/api/log_level.dart';
import 'package:audioplayers_platform_interface/method_channel_interface.dart';
import 'package:audioplayers_platform_interface/src/api/audio_context.dart';
import 'package:audioplayers_platform_interface/src/api/log_level.dart';
import 'package:audioplayers_platform_interface/src/method_channel_interface.dart';
import 'package:flutter/services.dart';

abstract class GlobalPlatformInterface {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ import 'dart:async';
// ignore: unnecessary_import
import 'dart:typed_data';

import 'package:audioplayers_platform_interface/api/audio_context.dart';
import 'package:audioplayers_platform_interface/api/player_mode.dart';
import 'package:audioplayers_platform_interface/api/release_mode.dart';
import 'package:audioplayers_platform_interface/audioplayers_platform_interface.dart';
import 'package:audioplayers_platform_interface/global_platform_interface.dart';
import 'package:audioplayers_platform_interface/method_channel_interface.dart';
import 'package:audioplayers_platform_interface/streams_interface.dart';
import 'package:audioplayers_platform_interface/src/api/audio_context.dart';
import 'package:audioplayers_platform_interface/src/api/player_mode.dart';
import 'package:audioplayers_platform_interface/src/api/release_mode.dart';
import 'package:audioplayers_platform_interface/src/audioplayers_platform_interface.dart';
import 'package:audioplayers_platform_interface/src/global_platform_interface.dart';
import 'package:audioplayers_platform_interface/src/method_channel_interface.dart';
import 'package:audioplayers_platform_interface/src/streams_interface.dart';
import 'package:flutter/services.dart';

class MethodChannelAudioplayersPlatform extends AudioplayersPlatform
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'dart:async';

import 'package:audioplayers_platform_interface/api/for_player.dart';
import 'package:audioplayers_platform_interface/src/api/for_player.dart';
import 'package:flutter/foundation.dart';

mixin StreamsInterface {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import 'dart:async';

import 'package:audioplayers_platform_interface/api/log_level.dart';
import 'package:audioplayers_platform_interface/global_platform_interface.dart';
import 'package:audioplayers_platform_interface/audioplayers_platform_interface.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';

Expand Down
4 changes: 0 additions & 4 deletions packages/audioplayers_web/lib/audioplayers_web.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
import 'dart:async';
import 'dart:typed_data';

import 'package:audioplayers_platform_interface/api/audio_context.dart';
import 'package:audioplayers_platform_interface/api/player_mode.dart';
import 'package:audioplayers_platform_interface/api/release_mode.dart';
import 'package:audioplayers_platform_interface/audioplayers_platform_interface.dart';
import 'package:audioplayers_platform_interface/streams_interface.dart';
import 'package:audioplayers_web/num_extension.dart';
import 'package:audioplayers_web/wrapped_player.dart';
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
Expand Down
3 changes: 1 addition & 2 deletions packages/audioplayers_web/lib/wrapped_player.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import 'dart:async';
import 'dart:html';

import 'package:audioplayers_platform_interface/api/release_mode.dart';
import 'package:audioplayers_platform_interface/streams_interface.dart';
import 'package:audioplayers_platform_interface/audioplayers_platform_interface.dart';
import 'package:audioplayers_web/num_extension.dart';
import 'package:audioplayers_web/web_audio_js.dart';

Expand Down

0 comments on commit a6f89be

Please sign in to comment.