Remove debug messages. Update example to use shuffle order.
This commit is contained in:
parent
d0908a5f5e
commit
7a125149d9
|
@ -284,7 +284,8 @@ class ControlButtons extends StatelessWidget {
|
|||
return IconButton(
|
||||
icon: Icon(Icons.replay),
|
||||
iconSize: 64.0,
|
||||
onPressed: () => player.seek(Duration.zero, index: 0),
|
||||
onPressed: () => player.seek(Duration.zero,
|
||||
index: player.effectiveIndices.first),
|
||||
);
|
||||
}
|
||||
},
|
||||
|
|
|
@ -7,7 +7,7 @@ packages:
|
|||
name: async
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.5.0-nullsafety.1"
|
||||
version: "2.5.0-nullsafety.3"
|
||||
audio_session:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -21,35 +21,35 @@ packages:
|
|||
name: boolean_selector
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0-nullsafety.1"
|
||||
version: "2.1.0-nullsafety.3"
|
||||
characters:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: characters
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0-nullsafety.3"
|
||||
version: "1.1.0-nullsafety.5"
|
||||
charcode:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: charcode
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0-nullsafety.1"
|
||||
version: "1.2.0-nullsafety.3"
|
||||
clock:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: clock
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0-nullsafety.1"
|
||||
version: "1.1.0-nullsafety.3"
|
||||
collection:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: collection
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.15.0-nullsafety.3"
|
||||
version: "1.15.0-nullsafety.5"
|
||||
convert:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -77,7 +77,7 @@ packages:
|
|||
name: fake_async
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0-nullsafety.1"
|
||||
version: "1.2.0-nullsafety.3"
|
||||
ffi:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -114,6 +114,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.16.1"
|
||||
js:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: js
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.6.3-nullsafety.3"
|
||||
just_audio:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -141,21 +148,21 @@ packages:
|
|||
name: matcher
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.12.10-nullsafety.1"
|
||||
version: "0.12.10-nullsafety.3"
|
||||
meta:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: meta
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.0-nullsafety.3"
|
||||
version: "1.3.0-nullsafety.6"
|
||||
path:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.8.0-nullsafety.1"
|
||||
version: "1.8.0-nullsafety.3"
|
||||
path_provider:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -230,49 +237,49 @@ packages:
|
|||
name: source_span
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.8.0-nullsafety.2"
|
||||
version: "1.8.0-nullsafety.4"
|
||||
stack_trace:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stack_trace
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.10.0-nullsafety.1"
|
||||
version: "1.10.0-nullsafety.6"
|
||||
stream_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stream_channel
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0-nullsafety.1"
|
||||
version: "2.1.0-nullsafety.3"
|
||||
string_scanner:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: string_scanner
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0-nullsafety.1"
|
||||
version: "1.1.0-nullsafety.3"
|
||||
term_glyph:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: term_glyph
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0-nullsafety.1"
|
||||
version: "1.2.0-nullsafety.3"
|
||||
test_api:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_api
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.2.19-nullsafety.2"
|
||||
version: "0.2.19-nullsafety.6"
|
||||
typed_data:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: typed_data
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.0-nullsafety.3"
|
||||
version: "1.3.0-nullsafety.5"
|
||||
uuid:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -286,7 +293,7 @@ packages:
|
|||
name: vector_math
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0-nullsafety.3"
|
||||
version: "2.1.0-nullsafety.5"
|
||||
win32:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -302,5 +309,5 @@ packages:
|
|||
source: hosted
|
||||
version: "0.1.2"
|
||||
sdks:
|
||||
dart: ">=2.10.0-110 <2.11.0"
|
||||
dart: ">=2.12.0-0.0 <3.0.0"
|
||||
flutter: ">=1.12.13+hotfix.5 <2.0.0"
|
||||
|
|
|
@ -105,7 +105,6 @@ class AudioPlayer {
|
|||
.map((event) => event.currentIndex)
|
||||
.distinct()
|
||||
.handleError((err, stack) {/* noop */}));
|
||||
currentIndexStream.listen((index) => print('### index: $index'));
|
||||
_androidAudioSessionIdSubject.addStream(playbackEventStream
|
||||
.map((event) => event.androidAudioSessionId)
|
||||
.distinct()
|
||||
|
@ -154,8 +153,6 @@ class AudioPlayer {
|
|||
currentIndex: message.currentIndex,
|
||||
androidAudioSessionId: message.androidAudioSessionId,
|
||||
);
|
||||
print(
|
||||
"### received event with currentIndex: ${playbackEvent.currentIndex}");
|
||||
_durationFuture = Future.value(playbackEvent.duration);
|
||||
if (playbackEvent.duration != _playbackEvent.duration) {
|
||||
_durationSubject.add(playbackEvent.duration);
|
||||
|
@ -308,69 +305,48 @@ class AudioPlayer {
|
|||
Stream<SequenceState> get sequenceStateStream => _sequenceStateSubject.stream;
|
||||
|
||||
/// Whether there is another item after the current index.
|
||||
bool get hasNext => _nextIndex != null;
|
||||
bool get hasNext => nextIndex != null;
|
||||
|
||||
/// Whether there is another item before the current index.
|
||||
bool get hasPrevious => _previousIndex != null;
|
||||
bool get hasPrevious => previousIndex != null;
|
||||
|
||||
int get _nextIndex => _getRelativeIndex(1);
|
||||
int get _previousIndex => _getRelativeIndex(-1);
|
||||
/// Returns [shuffleIndices] if [shuffleModeEnabled] is `true`, otherwise
|
||||
/// returns the unshuffled indices.
|
||||
List<int> get effectiveIndices {
|
||||
if (shuffleIndices == null || sequence == null) return null;
|
||||
return shuffleModeEnabled
|
||||
? shuffleIndices
|
||||
: List.generate(sequence.length, (i) => i);
|
||||
}
|
||||
|
||||
List<int> get _effectiveIndicesInv {
|
||||
if (shuffleIndices == null || sequence == null) return null;
|
||||
return shuffleModeEnabled
|
||||
? _shuffleIndicesInv
|
||||
: List.generate(sequence.length, (i) => i);
|
||||
}
|
||||
|
||||
int get nextIndex => _getRelativeIndex(1);
|
||||
int get previousIndex => _getRelativeIndex(-1);
|
||||
|
||||
int _getRelativeIndex(int offset) {
|
||||
print('### _getRelativeIndex');
|
||||
print('audioSource = $_audioSource');
|
||||
print('currentIndex = $currentIndex');
|
||||
print('shuffleModeEnabled = $shuffleModeEnabled');
|
||||
if (_audioSource == null ||
|
||||
currentIndex == null ||
|
||||
shuffleModeEnabled == null) return null;
|
||||
if (loopMode == LoopMode.one) return currentIndex;
|
||||
int result;
|
||||
print('shuffleModeEnabled: $shuffleModeEnabled');
|
||||
if (shuffleModeEnabled) {
|
||||
print('shuffleIndices: $shuffleIndices');
|
||||
print('shuffleIndicesInv: $_shuffleIndicesInv');
|
||||
if (shuffleIndices == null) return null;
|
||||
final shufflePos = _shuffleIndicesInv[currentIndex];
|
||||
var newShufflePos = shufflePos + offset;
|
||||
print(
|
||||
'newshufflePos($newShufflePos) >= shuffleIndices.length(${shuffleIndices.length})');
|
||||
if (newShufflePos >= shuffleIndices.length) {
|
||||
final effectiveIndices = this.effectiveIndices;
|
||||
if (effectiveIndices == null) return null;
|
||||
final effectiveIndicesInv = _effectiveIndicesInv;
|
||||
final invPos = effectiveIndicesInv[currentIndex];
|
||||
var newInvPos = invPos + offset;
|
||||
if (newInvPos >= effectiveIndices.length || newInvPos < 0) {
|
||||
if (loopMode == LoopMode.all) {
|
||||
newShufflePos = 0;
|
||||
newInvPos %= effectiveIndices.length;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
if (newShufflePos < 0) {
|
||||
if (loopMode == LoopMode.all) {
|
||||
newShufflePos = shuffleIndices.length - 1;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
result = shuffleIndices[newShufflePos];
|
||||
} else {
|
||||
print("sequence: $sequence");
|
||||
if (sequence == null) return null;
|
||||
result = currentIndex + offset;
|
||||
print("result($result >= sequence.length(${sequence.length}))");
|
||||
if (result >= sequence.length) {
|
||||
if (loopMode == LoopMode.all) {
|
||||
result = 0;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
if (result < 0) {
|
||||
if (loopMode == LoopMode.all) {
|
||||
result = sequence.length - 1;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
print("returning $result");
|
||||
final result = effectiveIndices[newInvPos];
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -535,7 +511,6 @@ class AudioPlayer {
|
|||
if (_disposed) return null;
|
||||
try {
|
||||
_audioSource = source;
|
||||
print("### set _audioSource = $_audioSource");
|
||||
_broadcastSequence();
|
||||
final duration = await _load(source,
|
||||
initialPosition: initialPosition, initialIndex: initialIndex);
|
||||
|
@ -550,18 +525,12 @@ class AudioPlayer {
|
|||
}
|
||||
|
||||
void _broadcastSequence() {
|
||||
print("### _broadcastSequence");
|
||||
_sequenceSubject.add(_audioSource?.sequence);
|
||||
|
||||
print('sequence: ${_audioSource?.sequence?.length}');
|
||||
|
||||
_updateShuffleIndices();
|
||||
}
|
||||
|
||||
_updateShuffleIndices() {
|
||||
_shuffleIndicesSubject.add(_audioSource?.shuffleIndices);
|
||||
print('shuffle indices: ${_audioSource?.shuffleIndices?.length}');
|
||||
print('shuffleIndices: ${shuffleIndices?.length}');
|
||||
final shuffleIndicesLength = shuffleIndices?.length ?? 0;
|
||||
if (_shuffleIndicesInv.length > shuffleIndicesLength) {
|
||||
_shuffleIndicesInv.removeRange(
|
||||
|
@ -573,7 +542,6 @@ class AudioPlayer {
|
|||
for (var i = 0; i < shuffleIndicesLength; i++) {
|
||||
_shuffleIndicesInv[shuffleIndices[i]] = i;
|
||||
}
|
||||
print('shuffleIndicesInv: ${_shuffleIndicesInv?.length}');
|
||||
}
|
||||
|
||||
_registerAudioSource(AudioSource source) {
|
||||
|
@ -582,7 +550,6 @@ class AudioPlayer {
|
|||
|
||||
Future<Duration> _load(AudioSource source,
|
||||
{Duration initialPosition, int initialIndex}) async {
|
||||
print("### _load with initialIndex=$initialIndex");
|
||||
try {
|
||||
if (!kIsWeb && source._requiresHeaders) {
|
||||
if (_proxy == null) {
|
||||
|
@ -732,13 +699,10 @@ class AudioPlayer {
|
|||
|
||||
/// Recursively shuffles the children of the currently loaded [AudioSource].
|
||||
Future<void> shuffle() async {
|
||||
print(
|
||||
"shuffle. _disposed: $_disposed, currentIndex: $currentIndex, _audioSource: $_audioSource");
|
||||
if (_disposed) return;
|
||||
if (_audioSource == null) return;
|
||||
_audioSource._shuffle(initialIndex: currentIndex);
|
||||
_updateShuffleIndices();
|
||||
print("Shuffle: $shuffleIndices");
|
||||
await (await _platform).setShuffleOrder(
|
||||
SetShuffleOrderRequest(audioSourceMessage: _audioSource._toMessage()));
|
||||
}
|
||||
|
@ -776,19 +740,17 @@ class AudioPlayer {
|
|||
}
|
||||
}
|
||||
|
||||
/// Seek to the next item.
|
||||
/// Seek to the next item, or does nothing if there is no next item.
|
||||
Future<void> seekToNext() async {
|
||||
if (_disposed) return;
|
||||
if (hasNext) {
|
||||
await seek(Duration.zero, index: _nextIndex);
|
||||
await seek(Duration.zero, index: nextIndex);
|
||||
}
|
||||
}
|
||||
|
||||
/// Seek to the previous item.
|
||||
/// Seek to the previous item, or does nothing if there is no previous item.
|
||||
Future<void> seekToPrevious() async {
|
||||
if (_disposed) return;
|
||||
if (hasPrevious) {
|
||||
await seek(Duration.zero, index: _previousIndex);
|
||||
await seek(Duration.zero, index: previousIndex);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -817,7 +779,6 @@ class AudioPlayer {
|
|||
await (await _platform).dispose(DisposeRequest());
|
||||
}
|
||||
_audioSource = null;
|
||||
print("### set _audioSource = $_audioSource (dispose)");
|
||||
_audioSources.values.forEach((s) => s._dispose());
|
||||
_audioSources.clear();
|
||||
_proxy?.stop();
|
||||
|
@ -1445,8 +1406,6 @@ class ConcatenatingAudioSource extends AudioSource {
|
|||
child._shuffle(initialIndex: childInitialIndex);
|
||||
si += childLength;
|
||||
}
|
||||
print(
|
||||
"cat _shuffle (initialIndex=$initialIndex, localInitialIndex=$localInitialIndex)");
|
||||
_shuffleOrder.shuffle(initialIndex: localInitialIndex);
|
||||
}
|
||||
|
||||
|
@ -1603,11 +1562,8 @@ class ConcatenatingAudioSource extends AudioSource {
|
|||
}
|
||||
final indices = <int>[];
|
||||
for (var index in _shuffleOrder.indices) {
|
||||
final childIndices = childIndicesList[index];
|
||||
//print("child indices: $childIndices");
|
||||
indices.addAll(childIndices);
|
||||
indices.addAll(childIndicesList[index]);
|
||||
}
|
||||
print("### returning: $indices");
|
||||
return indices;
|
||||
}
|
||||
|
||||
|
@ -1728,11 +1684,8 @@ class DefaultShuffleOrder extends ShuffleOrder {
|
|||
@override
|
||||
void shuffle({int initialIndex}) {
|
||||
assert(initialIndex == null || indices.contains(initialIndex));
|
||||
print(
|
||||
"### order shuffle, initialIndex: $initialIndex (existing: $indices)");
|
||||
if (indices.length <= 1) return;
|
||||
indices.shuffle(_random);
|
||||
print("now $indices");
|
||||
if (initialIndex == null) return;
|
||||
|
||||
final initialPos = 0;
|
||||
|
@ -1741,7 +1694,6 @@ class DefaultShuffleOrder extends ShuffleOrder {
|
|||
final swapIndex = indices[initialPos];
|
||||
indices[initialPos] = initialIndex;
|
||||
indices[swapPos] = swapIndex;
|
||||
print("final $indices");
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -28,7 +28,7 @@ packages:
|
|||
name: async
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.5.0-nullsafety.1"
|
||||
version: "2.5.0-nullsafety.3"
|
||||
audio_session:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -42,7 +42,7 @@ packages:
|
|||
name: boolean_selector
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0-nullsafety.1"
|
||||
version: "2.1.0-nullsafety.3"
|
||||
build:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -70,14 +70,14 @@ packages:
|
|||
name: characters
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0-nullsafety.3"
|
||||
version: "1.1.0-nullsafety.5"
|
||||
charcode:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: charcode
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0-nullsafety.1"
|
||||
version: "1.2.0-nullsafety.3"
|
||||
cli_util:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -91,7 +91,7 @@ packages:
|
|||
name: clock
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0-nullsafety.1"
|
||||
version: "1.1.0-nullsafety.3"
|
||||
code_builder:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -105,7 +105,7 @@ packages:
|
|||
name: collection
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.15.0-nullsafety.3"
|
||||
version: "1.15.0-nullsafety.5"
|
||||
convert:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -133,7 +133,7 @@ packages:
|
|||
name: fake_async
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0-nullsafety.1"
|
||||
version: "1.2.0-nullsafety.3"
|
||||
ffi:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -190,7 +190,7 @@ packages:
|
|||
name: js
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.6.2"
|
||||
version: "0.6.3-nullsafety.3"
|
||||
just_audio_platform_interface:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -218,14 +218,14 @@ packages:
|
|||
name: matcher
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.12.10-nullsafety.1"
|
||||
version: "0.12.10-nullsafety.3"
|
||||
meta:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: meta
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.0-nullsafety.3"
|
||||
version: "1.3.0-nullsafety.6"
|
||||
mockito:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
|
@ -260,7 +260,7 @@ packages:
|
|||
name: path
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.8.0-nullsafety.1"
|
||||
version: "1.8.0-nullsafety.3"
|
||||
path_provider:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -363,49 +363,49 @@ packages:
|
|||
name: source_span
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.8.0-nullsafety.2"
|
||||
version: "1.8.0-nullsafety.4"
|
||||
stack_trace:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stack_trace
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.10.0-nullsafety.1"
|
||||
version: "1.10.0-nullsafety.6"
|
||||
stream_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stream_channel
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0-nullsafety.1"
|
||||
version: "2.1.0-nullsafety.3"
|
||||
string_scanner:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: string_scanner
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0-nullsafety.1"
|
||||
version: "1.1.0-nullsafety.3"
|
||||
term_glyph:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: term_glyph
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0-nullsafety.1"
|
||||
version: "1.2.0-nullsafety.3"
|
||||
test_api:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_api
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.2.19-nullsafety.2"
|
||||
version: "0.2.19-nullsafety.6"
|
||||
typed_data:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: typed_data
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.0-nullsafety.3"
|
||||
version: "1.3.0-nullsafety.5"
|
||||
uuid:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -419,7 +419,7 @@ packages:
|
|||
name: vector_math
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0-nullsafety.3"
|
||||
version: "2.1.0-nullsafety.5"
|
||||
watcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -449,5 +449,5 @@ packages:
|
|||
source: hosted
|
||||
version: "2.2.1"
|
||||
sdks:
|
||||
dart: ">=2.10.0 <2.11.0"
|
||||
dart: ">=2.12.0-0.0 <3.0.0"
|
||||
flutter: ">=1.12.13+hotfix.5 <2.0.0"
|
||||
|
|
Loading…
Reference in New Issue