Search code examples
flutterjust-audio

flutter web : just audio exception : PlatformException(abort, Loading interrupted, null, null)


I am getting PlatformException only in web when changing the audio url from one to another.Everything works fine in android and IOS.Issue is only in web.

just_audio: ^0.9.35

this is the version og plugin used.

    Error: PlatformException(abort, Loading interrupted, null, null)
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 294:49  throw_
packages/just_audio/just_audio.dart 1247:7                                    checkInterruption
packages/just_audio/just_audio.dart 1358:11                                   setPlatform
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 45:50            <fn>
dart-sdk/lib/async/zone.dart 1661:54                                          runUnary
dart-sdk/lib/async/future_impl.dart 156:18                                    handleValue
dart-sdk/lib/async/future_impl.dart 840:44                                    handleValueCallback
dart-sdk/lib/async/future_impl.dart 869:13                                    _propagateToListeners
dart-sdk/lib/async/future_impl.dart 641:5                                     [_completeWithValue]
dart-sdk/lib/async/future_impl.dart 715:7                                     callback
dart-sdk/lib/async/schedule_microtask.dart 40:11                              _microtaskLoop
dart-sdk/lib/async/schedule_microtask.dart 49:5                               _startMicrotaskLoop
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 181:15           <fn>
Error: PlatformException(error, Platform player 510aeb46-afa2-42f6-a4e3-5728ef8fafad already exists, null, null)
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 294:49         throw_
packages/just_audio_web/just_audio_web.dart 22:7                                     init
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                   runBody
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 127:5                   _async
packages/just_audio_web/just_audio_web.dart 20:35                                    init
packages/just_audio/just_audio.dart 1341:54                                          setPlatform
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                   runBody
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 127:5                   _async
packages/just_audio/just_audio.dart 1328:44                                          setPlatform
packages/just_audio/just_audio.dart 1452:17                                          [_setPlatformActive]
packages/just_audio/just_audio.dart 785:20                                           load
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                   runBody
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 127:5                   _async
packages/just_audio/just_audio.dart 773:25                                           load
packages/just_audio/just_audio.dart 756:24                                           setAudioSource
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                   runBody
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 127:5                   _async
packages/just_audio/just_audio.dart 738:35                                           setAudioSource
packages/just_audio/just_audio.dart 669:7                                            setUrl

Code sample is given below.

 setPlayer(String url) async {
    try {
      _selectedMood = moodBloc.state.selectedMood;
      await _stopPlayer();
      await _player.setVolume(_getVolumeValue(state.volume));
      await _player.setUrl(url);
      _subscribeToStream();
    } catch (e) {
      print('set player error====e');
    }
  }

Solution

  • Try this:

    import "package:flutter/material.dart";
    import "package:just_audio/just_audio.dart";
    
    void main() {
      WidgetsFlutterBinding.ensureInitialized();
      runApp(const MyApp());
    }
    
    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      @override
      Widget build(BuildContext context) {
        return const MaterialApp(
          home: HomeScreen(),
        );
      }
    }
    
    class HomeScreen extends StatefulWidget {
      const HomeScreen({super.key});
    
      @override
      State<HomeScreen> createState() => _HomeScreenState();
    }
    
    class _HomeScreenState extends State<HomeScreen> {
      final AudioPlayer player = AudioPlayer();
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: SafeArea(
            child: Column(
              children: <Widget>[
                ElevatedButton(
                  onPressed: playSound1,
                  child: const Text("Play sound 1"),
                ),
                const SizedBox(height: 16),
                ElevatedButton(
                  onPressed: playSound2,
                  child: const Text("Play sound 2"),
                ),
              ],
            ),
          ),
        );
      }
    
      Future<void> playSound1() async {
        if (player.playing) {
          await player.stop();
        }
        await player.setUrl(
          "http://commondatastorage.googleapis.com/codeskulptor-demos/DDR_assets/Kangaroo_MusiQue_-_The_Neverwritten_Role_Playing_Game.mp3",
        );
        await player.play();
        await player.stop();
        return Future<void>.value();
      }
    
      Future<void> playSound2() async {
        if (player.playing) {
          await player.stop();
        }
        await player.setUrl(
          "http://commondatastorage.googleapis.com/codeskulptor-demos/DDR_assets/Sevish_-__nbsp_.mp3",
        );
        await player.play();
        await player.stop();
        return Future<void>.value();
      }
    }