diff --git a/.github/workflows/build-example.yml b/.github/workflows/build-example.yml index b0fe7f40d..a1ed132e0 100644 --- a/.github/workflows/build-example.yml +++ b/.github/workflows/build-example.yml @@ -9,11 +9,18 @@ on: type: choice options: - 'any' + - '3.16.x' - '3.13.x' - - '3.10.x' - - '3.7.x' - - '3.3.x' - - '3.0.x' + flutter_channel: + description: 'Flutter Channel' + required: false + default: 'stable' + type: choice + options: + - 'stable' + - 'beta' + - 'dev' + - 'master' enable_android: description: 'Build Android' required: false @@ -53,7 +60,11 @@ on: inputs: flutter_version: required: false - default: '3.13.0' + default: '3.16.8' + type: string + flutter_channel: + required: false + default: 'stable' type: string enable_android: required: false @@ -94,7 +105,7 @@ jobs: - uses: subosito/flutter-action@v2 with: flutter-version: ${{ inputs.flutter_version }} - channel: 'stable' + channel: ${{ inputs.flutter_channel }} - uses: bluefireteam/melos-action@main - name: Example app - Build Web app @@ -120,7 +131,7 @@ jobs: - uses: subosito/flutter-action@v2 with: flutter-version: ${{ inputs.flutter_version }} - channel: 'stable' + channel: ${{ inputs.flutter_channel }} - uses: bluefireteam/melos-action@main - name: Example App - Build Android APK @@ -136,7 +147,7 @@ jobs: - uses: subosito/flutter-action@v2 with: flutter-version: ${{ inputs.flutter_version }} - channel: 'stable' + channel: ${{ inputs.flutter_channel }} - uses: bluefireteam/melos-action@main - name: Example app - Build iOS @@ -152,7 +163,7 @@ jobs: - uses: subosito/flutter-action@v2 with: flutter-version: ${{ inputs.flutter_version }} - channel: 'stable' + channel: ${{ inputs.flutter_channel }} - uses: bluefireteam/melos-action@main - name: Example app - Build macOS @@ -168,7 +179,7 @@ jobs: - uses: subosito/flutter-action@v2 with: flutter-version: ${{ inputs.flutter_version }} - channel: 'stable' + channel: ${{ inputs.flutter_channel }} - uses: bluefireteam/melos-action@main - name: Example app - Build Windows app @@ -184,7 +195,7 @@ jobs: - uses: subosito/flutter-action@v2 with: flutter-version: ${{ inputs.flutter_version }} - channel: 'stable' + channel: ${{ inputs.flutter_channel }} - uses: bluefireteam/melos-action@main - name: Install Flutter requirements for Linux diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bb47e2b99..0fad84b07 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -9,10 +9,18 @@ on: type: choice options: - 'any' + - '3.16.x' - '3.13.x' - - '3.10.x' - - '3.7.x' - - '3.3.x' + flutter_channel: + description: 'Flutter Channel' + required: false + default: 'stable' + type: choice + options: + - 'stable' + - 'beta' + - 'dev' + - 'master' fatal_warnings: description: 'Treat warnings as fatal' required: false @@ -52,7 +60,11 @@ on: inputs: flutter_version: required: false - default: '3.13.0' + default: '3.16.8' + type: string + flutter_channel: + required: false + default: 'stable' type: string fatal_warnings: required: false @@ -96,7 +108,7 @@ jobs: - uses: subosito/flutter-action@v2 with: flutter-version: ${{ inputs.flutter_version }} - channel: 'stable' + channel: ${{ inputs.flutter_channel }} - uses: bluefireteam/melos-action@main - run: melos run format-check @@ -128,7 +140,7 @@ jobs: - uses: subosito/flutter-action@v2 with: flutter-version: ${{ inputs.flutter_version }} - channel: 'stable' + channel: ${{ inputs.flutter_channel }} - uses: bluefireteam/melos-action@main - uses: nanasess/setup-chromedriver@v2 @@ -179,7 +191,7 @@ jobs: - uses: subosito/flutter-action@v2 with: flutter-version: ${{ inputs.flutter_version }} - channel: 'stable' + channel: ${{ inputs.flutter_channel }} - uses: bluefireteam/melos-action@main - name: Download Android emulator image @@ -220,7 +232,7 @@ jobs: - uses: subosito/flutter-action@v2 with: flutter-version: ${{ inputs.flutter_version }} - channel: 'stable' + channel: ${{ inputs.flutter_channel }} - uses: bluefireteam/melos-action@main - name: List all simulators @@ -249,7 +261,7 @@ jobs: - uses: subosito/flutter-action@v2 with: flutter-version: ${{ inputs.flutter_version }} - channel: 'stable' + channel: ${{ inputs.flutter_channel }} - uses: bluefireteam/melos-action@main - name: Run Flutter integration tests @@ -270,7 +282,7 @@ jobs: - uses: subosito/flutter-action@v2 with: flutter-version: ${{ inputs.flutter_version }} - channel: 'stable' + channel: ${{ inputs.flutter_channel }} - uses: bluefireteam/melos-action@main - name: Start audio server run: net start audiosrv @@ -311,7 +323,7 @@ jobs: - uses: subosito/flutter-action@v2 with: flutter-version: ${{ inputs.flutter_version }} - channel: 'stable' + channel: ${{ inputs.flutter_channel }} - uses: bluefireteam/melos-action@main - name: Install Flutter requirements for Linux run: | diff --git a/melos.yaml b/melos.yaml index 5bd6fa242..c58e93825 100644 --- a/melos.yaml +++ b/melos.yaml @@ -22,15 +22,15 @@ scripts: format: run: melos exec dart format . --fix - description: Run `flutter format` for all packages. + description: Run `dart format` for all packages. format-check: run: melos exec dart format . --set-exit-if-changed - description: Run `flutter format` checks for all packages. + description: Run `dart format` checks for all packages. dartdoc: - run: melos exec flutter pub run dartdoc - description: Run dartdoc checks for all non-example packages. + run: melos exec dart doc + description: Run `dart doc` for all non-example packages. packageFilters: ignore: "*_example" diff --git a/packages/audioplayers/example/android/app/build.gradle b/packages/audioplayers/example/android/app/build.gradle index 82832b5ea..988878c18 100644 --- a/packages/audioplayers/example/android/app/build.gradle +++ b/packages/audioplayers/example/android/app/build.gradle @@ -26,7 +26,8 @@ apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdk 33 + // Allow compatibility with selected Flutter SDK + compileSdk flutter.compileSdkVersion namespace 'xyz.luan.audioplayers.example' diff --git a/packages/audioplayers/example/integration_test/lib/lib_test_utils.dart b/packages/audioplayers/example/integration_test/lib/lib_test_utils.dart index b12bd1fe2..552f080e7 100644 --- a/packages/audioplayers/example/integration_test/lib/lib_test_utils.dart +++ b/packages/audioplayers/example/integration_test/lib/lib_test_utils.dart @@ -2,10 +2,15 @@ import 'package:flutter/foundation.dart'; import 'package:flutter_test/flutter_test.dart'; extension LibWidgetTester on WidgetTester { - Future pumpLinux() async { + Future pumpPlatform([ + Duration? duration, + EnginePhase phase = EnginePhase.sendSemanticsUpdate, + ]) async { if (!kIsWeb && defaultTargetPlatform == TargetPlatform.linux) { - // FIXME(gustl22): Linux needs additional pump (#1556) - await pump(); + // FIXME(1556): Pump on Linux doesn't work with GStreamer bus callback + await Future.delayed(duration ?? Duration.zero); + } else { + await pump(duration, phase); } } diff --git a/packages/audioplayers/example/integration_test/lib_test.dart b/packages/audioplayers/example/integration_test/lib_test.dart index f5bf703e5..1caaad9ea 100644 --- a/packages/audioplayers/example/integration_test/lib_test.dart +++ b/packages/audioplayers/example/integration_test/lib_test.dart @@ -21,13 +21,11 @@ void main() async { (WidgetTester tester) async { final player = AudioPlayer(); - await tester.pumpLinux(); await player.play(specialCharAssetTestData.source); // Sources take some time to get initialized - await tester.pump(const Duration(seconds: 8)); + await tester.pumpPlatform(const Duration(seconds: 8)); await player.stop(); - await tester.pumpLinux(); await player.dispose(); }); @@ -36,15 +34,13 @@ void main() async { (WidgetTester tester) async { final player = AudioPlayer(); - await tester.pumpLinux(); final path = await player.audioCache.loadPath(specialCharAsset); expect(path, isNot(contains('%'))); // Ensure path is not URL encoded await player.play(DeviceFileSource(path)); // Sources take some time to get initialized - await tester.pump(const Duration(seconds: 8)); + await tester.pumpPlatform(const Duration(seconds: 8)); await player.stop(); - await tester.pumpLinux(); await player.dispose(); }, skip: kIsWeb, @@ -53,13 +49,11 @@ void main() async { testWidgets('test url source with special char', (WidgetTester tester) async { final player = AudioPlayer(); - await tester.pumpLinux(); await player.play(specialCharUrlTestData.source); // Sources take some time to get initialized - await tester.pump(const Duration(seconds: 8)); + await tester.pumpPlatform(const Duration(seconds: 8)); await player.stop(); - await tester.pumpLinux(); await player.dispose(); }); @@ -68,13 +62,11 @@ void main() async { (WidgetTester tester) async { final player = AudioPlayer(); - await tester.pumpLinux(); await player.play(noExtensionAssetTestData.source); // Sources take some time to get initialized - await tester.pump(const Duration(seconds: 8)); + await tester.pumpPlatform(const Duration(seconds: 8)); await player.stop(); - await tester.pumpLinux(); await player.dispose(); }, // Darwin does not support files without extension unless its specified @@ -101,8 +93,6 @@ void main() async { testWidgets( '#positionEvent with $positionUpdaterName: ${td.source}', (tester) async { - await tester.pumpLinux(); - if (useTimerPositionUpdater) { player.positionUpdater = TimerPositionUpdater( getPosition: player.getCurrentPosition, @@ -127,7 +117,6 @@ void main() async { await player.stop(); expect(player.state, PlayerState.stopped); } - await tester.pumpLinux(); await player.dispose(); final positions = await futurePositions; printOnFailure('Positions: $positions'); @@ -166,22 +155,19 @@ void main() async { // Start all players simultaneously final iterator = List.generate(audioTestDataList.length, (i) => i); - await tester.pumpLinux(); await Future.wait( iterator.map((i) => players[i].play(audioTestDataList[i].source)), ); // Sources take some time to get initialized - await tester.pump(const Duration(seconds: 8)); + await tester.pumpPlatform(const Duration(seconds: 8)); for (var i = 0; i < audioTestDataList.length; i++) { final td = audioTestDataList[i]; if (td.isLiveStream || td.duration! > const Duration(seconds: 10)) { - await tester.pump(); final position = await players[i].getCurrentPosition(); printWithTimeOnFailure('Test position: $td'); expect(position, greaterThan(Duration.zero)); } await players[i].stop(); - await tester.pumpLinux(); } await Future.wait(players.map((p) => p.dispose())); }, @@ -196,19 +182,16 @@ void main() async { final player = AudioPlayer(); for (final td in audioTestDataList) { - await tester.pumpLinux(); await player.play(td.source); // Sources take some time to get initialized - await tester.pump(const Duration(seconds: 8)); + await tester.pumpPlatform(const Duration(seconds: 8)); if (td.isLiveStream || td.duration! > const Duration(seconds: 10)) { - await tester.pump(); final position = await player.getCurrentPosition(); printWithTimeOnFailure('Test position: $td'); expect(position, greaterThan(Duration.zero)); } await player.stop(); } - await tester.pumpLinux(); await player.dispose(); }); }); @@ -235,10 +218,10 @@ void main() async { await AudioPlayer.global.setAudioContext(audioContext); await player.setAudioContext(audioContext); - await tester.pumpLinux(); await player.play(td.source); - await tester - .pump((td.duration ?? Duration.zero) + const Duration(seconds: 8)); + await tester.pumpPlatform( + (td.duration ?? Duration.zero) + const Duration(seconds: 8), + ); expect(player.state, PlayerState.completed); audioContext = AudioContextConfig( @@ -250,10 +233,10 @@ void main() async { await player.setAudioContext(audioContext); await player.resume(); - await tester - .pump((td.duration ?? Duration.zero) + const Duration(seconds: 8)); + await tester.pumpPlatform( + (td.duration ?? Duration.zero) + const Duration(seconds: 8), + ); expect(player.state, PlayerState.completed); - await tester.pumpLinux(); await player.dispose(); }, skip: !features.hasRespectSilence, @@ -281,11 +264,11 @@ void main() async { await AudioPlayer.global.setAudioContext(audioContext); await player.setAudioContext(audioContext); - await tester.pumpLinux(); await player.setSource(td.source); await player.resume(); - await tester - .pump((td.duration ?? Duration.zero) + const Duration(seconds: 8)); + await tester.pumpPlatform( + (td.duration ?? Duration.zero) + const Duration(seconds: 8), + ); expect(player.state, PlayerState.playing); await player.stop(); expect(player.state, PlayerState.stopped); @@ -299,12 +282,12 @@ void main() async { await player.setAudioContext(audioContext); await player.resume(); - await tester - .pump((td.duration ?? Duration.zero) + const Duration(seconds: 8)); + await tester.pumpPlatform( + (td.duration ?? Duration.zero) + const Duration(seconds: 8), + ); expect(player.state, PlayerState.playing); await player.stop(); expect(player.state, PlayerState.stopped); - await tester.pumpLinux(); await player.dispose(); }, skip: !features.hasRespectSilence || !features.hasLowLatency, @@ -315,7 +298,6 @@ void main() async { (WidgetTester tester) async { final player = AudioPlayer(); - await tester.pumpLinux(); final futurePlay = player.play(mp3Url1TestData.source); // Player is still in `stopped` state as it isn't playing yet. @@ -331,7 +313,6 @@ void main() async { expect(player.state, PlayerState.paused); - await tester.pumpLinux(); await player.dispose(); }); @@ -347,11 +328,11 @@ void main() async { ..setReleaseMode(ReleaseMode.stop); await player.play(wavAsset1TestData.source); - await tester.pump(const Duration(seconds: 1)); + await tester.pumpPlatform(const Duration(seconds: 1)); await player.stop(); await player.play(wavAsset2TestData.source); - await tester.pump(const Duration(seconds: 1)); + await tester.pumpPlatform(const Duration(seconds: 1)); await player.stop(); player = AudioPlayer() @@ -360,11 +341,11 @@ void main() async { // This should play the new source, not the old one: await player.play(wavAsset1TestData.source); - await tester.pump(const Duration(seconds: 1)); + await tester.pumpPlatform(const Duration(seconds: 1)); await player.stop(); await player.play(wavAsset2TestData.source); - await tester.pump(const Duration(seconds: 1)); + await tester.pumpPlatform(const Duration(seconds: 1)); await player.stop(); }); }, diff --git a/packages/audioplayers/example/integration_test/platform_test.dart b/packages/audioplayers/example/integration_test/platform_test.dart index e349f9044..02cd0f903 100644 --- a/packages/audioplayers/example/integration_test/platform_test.dart +++ b/packages/audioplayers/example/integration_test/platform_test.dart @@ -8,7 +8,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; import 'lib/lib_source_test_data.dart'; -import 'lib/lib_test_utils.dart'; import 'platform_features.dart'; import 'test_utils.dart'; @@ -47,7 +46,6 @@ void main() async { } on PlatformException catch (e) { expect(e.message, startsWith('Failed to set source.')); } - await tester.pumpLinux(); }, ); @@ -62,11 +60,9 @@ void main() async { testData: nonExistentUrlTestData, ); fail('PlatformException not thrown'); - // ignore: avoid_catches_without_on_clauses } on PlatformException catch (e) { expect(e.message, startsWith('Failed to set source.')); } - await tester.pumpLinux(); }, // FIXME(Gustl22): for some reason, the error propagated back from the // Android MediaPlayer is only triggered, when the timeout has reached, @@ -77,7 +73,6 @@ void main() async { ); testWidgets('#create and #dispose', (tester) async { - await tester.pumpAndSettle(); await platform.dispose(playerId); try { @@ -94,7 +89,6 @@ void main() async { // Create player again, so it can be disposed in tearDown await platform.create(playerId); - await tester.pumpLinux(); }); for (final td in audioTestDataList) { @@ -118,7 +112,6 @@ void main() async { deviation: Duration(milliseconds: td.isVBR ? 100 : 1), ), ); - await tester.pumpLinux(); }, // FIXME(gustl22): cannot determine initial duration for VBR on Linux // FIXME(gustl22): determines wrong initial position for m3u8 on Linux @@ -142,7 +135,6 @@ void main() async { await platform.stop(playerId); } // May check native volume here - await tester.pumpLinux(); }); } } @@ -162,7 +154,6 @@ void main() async { await platform.stop(playerId); } // May check native balance here - await tester.pumpLinux(); }); } } @@ -182,7 +173,6 @@ void main() async { await platform.stop(playerId); } // May check native playback rate here - await tester.pumpLinux(); }); } } @@ -196,7 +186,6 @@ void main() async { await platform.setPlaybackRate(playerId, 2.0); await tester.pumpAndSettle(const Duration(seconds: 2)); expect(await platform.getCurrentPosition(playerId), 0); - await tester.pumpLinux(); }); for (final td in audioTestDataList) { @@ -229,7 +218,6 @@ void main() async { deviation: const Duration(milliseconds: 1), ), ); - await tester.pumpLinux(); }); } } @@ -250,7 +238,6 @@ void main() async { await platform.stop(playerId); // May check number of loops here - await tester.pumpLinux(); }); } } @@ -275,7 +262,6 @@ void main() async { // TODO(Gustl22): test if source was released expect(await platform.getDuration(playerId), null); expect(await platform.getCurrentPosition(playerId), null); - await tester.pumpLinux(); }); } } @@ -293,7 +279,6 @@ void main() async { // Check if position & duration is zero after play & release expect(await platform.getDuration(playerId), null); expect(await platform.getCurrentPosition(playerId), null); - await tester.pumpLinux(); }); } @@ -305,7 +290,6 @@ void main() async { testData: wavUrl1TestData, ); } - await tester.pumpLinux(); }); }); @@ -343,10 +327,6 @@ void main() async { testData: td, ); - if (td.source == wavAsset2TestData.source) { - await tester.pumpLinux(); - } - expect( await durationCompleter.future .timeout(const Duration(seconds: 30)), @@ -357,7 +337,6 @@ void main() async { ), ); await onDurationSub.cancel(); - await tester.pumpLinux(); }, // TODO(gustl22): cannot determine duration for VBR on Linux // FIXME(gustl22): duration event is not emitted for short duration @@ -390,7 +369,6 @@ void main() async { await tester.pumpAndSettle(const Duration(seconds: 3)); await completeCompleter.future.timeout(const Duration(seconds: 30)); onCompleteSub.cancel(); - await tester.pumpLinux(); }); } } @@ -400,7 +378,6 @@ void main() async { for (var i = 0; i < 2; i++) { final eventSub = eventStream.listen(null); await eventSub.cancel(); - await tester.pumpLinux(); } }); @@ -417,7 +394,6 @@ void main() async { final log = await logCompleter.future; expect(log, 'SomeLog'); await logSub.cancel(); - await tester.pumpLinux(); }); testWidgets('Emit global platform log', (tester) async { @@ -438,7 +414,6 @@ void main() async { // FIXME: cancelling the global event stream leads to // MissingPluginException on Android, if dispose app afterwards // await eventStreamSub.cancel(); - await tester.pumpLinux(); }); testWidgets('Emit platform error', (tester) async { @@ -459,7 +434,6 @@ void main() async { expect(platformException.code, 'SomeErrorCode'); expect(platformException.message, 'SomeErrorMessage'); await eventStreamSub.cancel(); - await tester.pumpLinux(); }); testWidgets('Emit global platform error', (tester) async { @@ -483,7 +457,6 @@ void main() async { // FIXME: cancelling the global event stream leads to // MissingPluginException on Android, if dispose app afterwards // await eventStreamSub.cancel(); - await tester.pumpLinux(); }); }); } diff --git a/packages/audioplayers/example/pubspec.yaml b/packages/audioplayers/example/pubspec.yaml index 3a0f82d43..02cb31af9 100644 --- a/packages/audioplayers/example/pubspec.yaml +++ b/packages/audioplayers/example/pubspec.yaml @@ -5,7 +5,7 @@ publish_to: none dependencies: audioplayers: ^5.2.1 collection: ^1.16.0 - file_picker: ^5.0.1 + file_picker: ^6.1.1 flutter: sdk: flutter http: '>=0.13.1 <2.0.0' @@ -30,4 +30,4 @@ flutter: environment: sdk: '>=3.0.0 <4.0.0' - flutter: '>=3.10.0' + flutter: '>=3.13.0' diff --git a/packages/audioplayers/example/windows/flutter/CMakeLists.txt b/packages/audioplayers/example/windows/flutter/CMakeLists.txt index d4b577061..e7107414b 100644 --- a/packages/audioplayers/example/windows/flutter/CMakeLists.txt +++ b/packages/audioplayers/example/windows/flutter/CMakeLists.txt @@ -9,6 +9,11 @@ include(${EPHEMERAL_DIR}/generated_config.cmake) # https://github.com/flutter/flutter/issues/57146. set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + # === Flutter Library === set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") @@ -91,7 +96,7 @@ add_custom_command( COMMAND ${CMAKE_COMMAND} -E env ${FLUTTER_TOOL_ENVIRONMENT} "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" - windows-x64 $ + ${FLUTTER_TARGET_PLATFORM} $ VERBATIM ) add_custom_target(flutter_assemble DEPENDS diff --git a/packages/audioplayers/pubspec.yaml b/packages/audioplayers/pubspec.yaml index bb24bdfe1..12aa1c622 100644 --- a/packages/audioplayers/pubspec.yaml +++ b/packages/audioplayers/pubspec.yaml @@ -37,12 +37,11 @@ dependencies: uuid: '>=3.0.7 <5.0.0' dev_dependencies: - dartdoc: ^6.1.5 flame_lint: ^1.0.0 flutter_test: sdk: flutter environment: sdk: '>=3.0.0 <4.0.0' - flutter: '>=3.10.0' + flutter: '>=3.13.0' diff --git a/packages/audioplayers/test/audio_cache_test.dart b/packages/audioplayers/test/audio_cache_test.dart index a1610e128..a7f159423 100644 --- a/packages/audioplayers/test/audio_cache_test.dart +++ b/packages/audioplayers/test/audio_cache_test.dart @@ -18,7 +18,7 @@ class FakeAudioCache extends AudioCache { @override Future loadAsset(String path) async { - return ByteData.sublistView((utf8.encode(path)) as Uint8List); + return ByteData.sublistView(utf8.encode(path)); } @override diff --git a/packages/audioplayers_android/pubspec.yaml b/packages/audioplayers_android/pubspec.yaml index b4666b6ca..db33d7ba9 100644 --- a/packages/audioplayers_android/pubspec.yaml +++ b/packages/audioplayers_android/pubspec.yaml @@ -18,12 +18,11 @@ dependencies: sdk: flutter dev_dependencies: - dartdoc: ^6.1.5 flame_lint: ^1.0.0 flutter_test: sdk: flutter environment: sdk: '>=3.0.0 <4.0.0' - flutter: '>=3.10.0' + flutter: '>=3.13.0' diff --git a/packages/audioplayers_darwin/pubspec.yaml b/packages/audioplayers_darwin/pubspec.yaml index 370954a49..c67164118 100644 --- a/packages/audioplayers_darwin/pubspec.yaml +++ b/packages/audioplayers_darwin/pubspec.yaml @@ -19,12 +19,11 @@ dependencies: sdk: flutter dev_dependencies: - dartdoc: ^6.1.5 flame_lint: ^1.0.0 flutter_test: sdk: flutter environment: sdk: '>=3.0.0 <4.0.0' - flutter: '>=3.10.0' + flutter: '>=3.13.0' diff --git a/packages/audioplayers_linux/pubspec.yaml b/packages/audioplayers_linux/pubspec.yaml index 6ba842f10..b7b75e5f1 100644 --- a/packages/audioplayers_linux/pubspec.yaml +++ b/packages/audioplayers_linux/pubspec.yaml @@ -17,7 +17,6 @@ dependencies: sdk: flutter dev_dependencies: - dartdoc: ^6.1.5 flame_lint: ^1.0.0 flutter_test: sdk: flutter diff --git a/packages/audioplayers_platform_interface/pubspec.yaml b/packages/audioplayers_platform_interface/pubspec.yaml index f70032681..c5d49ef77 100644 --- a/packages/audioplayers_platform_interface/pubspec.yaml +++ b/packages/audioplayers_platform_interface/pubspec.yaml @@ -12,11 +12,10 @@ dependencies: plugin_platform_interface: ^2.0.2 dev_dependencies: - dartdoc: ^6.1.5 flame_lint: ^1.0.0 flutter_test: sdk: flutter environment: sdk: '>=3.0.0 <4.0.0' - flutter: '>=3.10.0' + flutter: '>=3.13.0' diff --git a/packages/audioplayers_web/pubspec.yaml b/packages/audioplayers_web/pubspec.yaml index d4da4b81f..3b9ccc3ad 100644 --- a/packages/audioplayers_web/pubspec.yaml +++ b/packages/audioplayers_web/pubspec.yaml @@ -20,11 +20,10 @@ dependencies: js: ^0.6.4 dev_dependencies: - dartdoc: ^6.1.5 flame_lint: ^1.0.0 flutter_test: sdk: flutter environment: sdk: '>=3.0.0 <4.0.0' - flutter: '>=3.10.0' + flutter: '>=3.13.0' diff --git a/packages/audioplayers_windows/pubspec.yaml b/packages/audioplayers_windows/pubspec.yaml index 8c4bf5d3b..9d6fa5539 100644 --- a/packages/audioplayers_windows/pubspec.yaml +++ b/packages/audioplayers_windows/pubspec.yaml @@ -17,12 +17,11 @@ dependencies: sdk: flutter dev_dependencies: - dartdoc: ^6.1.5 flame_lint: ^1.0.0 flutter_test: sdk: flutter environment: sdk: '>=3.0.0 <4.0.0' - flutter: '>=3.10.0' + flutter: '>=3.13.0'