We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
E/MediaPlayerNative(13002): error (1, -2147483648) E/MediaPlayer(13002): Error (1,-2147483648) E/MediaPlayerNative(13002): error (1, -2147483648) E/MediaPlayer(13002): Error (1,-2147483648)TimeoutException (TimeoutException after 0:00:30.000000: Future not completed)
// ios18+iphpne 13 // I encountered an error on Android.
dart code import 'dart:async'; import 'package:flutter/material.dart'; import 'package:audioplayers/audioplayers.dart'; class Song extends StatefulWidget { const Song({super.key}); @override State<Song> createState() => _SongState(); } class _SongState extends State<Song> { //播放器实例 late AudioPlayer player = AudioPlayer(); @override void initState() { super.initState(); player = AudioPlayer(); player.setReleaseMode(ReleaseMode.stop); // Start the player as soon as the app is displayed. WidgetsBinding.instance.addPostFrameCallback((_) async { // http://downsc.chinaz.net/Files/DownLoad/sound1/201906/11582.mp3' // 加载网络音乐资源 await player.setSource(UrlSource( 'http://m10.music.126.net/20240403104728/0b83b6d1d2ecd36a43442d3af109ad58/ymusic/5353/0f0f/0358/d99739615f8e5153d77042092f07fd77.mp3')); await player.resume(); }); } @override void dispose() { player.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Column( children: [ Container( width: MediaQuery.of(context).size.width - 64, padding: const EdgeInsets.only(top: 8, left: 8, right: 16, bottom: 8), clipBehavior: Clip.antiAlias, decoration: ShapeDecoration( color: Colors.white, shape: RoundedRectangleBorder( side: const BorderSide(width: 1, color: Color(0xFFCCD8E5)), borderRadius: BorderRadius.circular(12), ), shadows: const [ BoxShadow( color: Color(0x14031425), blurRadius: 42, offset: Offset(0, 0), spreadRadius: 0, ) ], ), child: GestureDetector( onTap: () { Navigator.pushNamed(context, '/onPlay'); }, child: PlayerWidget(player: player), )), ], ); } } class PlayerWidget extends StatefulWidget { final AudioPlayer player; const PlayerWidget({ required this.player, super.key, }); @override State<StatefulWidget> createState() { return _PlayerWidgetState(); } } class _PlayerWidgetState extends State<PlayerWidget> { PlayerState? _playerState; Duration? _duration; Duration? _position; StreamSubscription? _durationSubscription; StreamSubscription? _positionSubscription; StreamSubscription? _playerCompleteSubscription; StreamSubscription? _playerStateChangeSubscription; bool get _isPlaying => _playerState == PlayerState.playing; bool get _isPaused => _playerState == PlayerState.paused; String get _durationText => _duration?.toString().split('.').first ?? ''; String get _positionText => _position?.toString().split('.').first ?? ''; AudioPlayer get player => widget.player; @override void initState() { super.initState(); // Use initial values from player _playerState = player.state; player.getDuration().then( (value) => setState(() { _duration = value; }), ); player.getCurrentPosition().then( (value) => setState(() { _position = value; }), ); _initStreams(); } @override void setState(VoidCallback fn) { if (mounted) { super.setState(fn); } } @override void dispose() { _durationSubscription?.cancel(); _positionSubscription?.cancel(); _playerCompleteSubscription?.cancel(); _playerStateChangeSubscription?.cancel(); super.dispose(); } @override Widget build(BuildContext context) { final color = Theme.of(context).primaryColor; return Column( mainAxisSize: MainAxisSize.min, children: <Widget>[ SizedBox( width: double.infinity, child: Row( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, children: [ Container( width: 48, height: 48, decoration: ShapeDecoration( image: const DecorationImage( image: AssetImage('assets/images/song1.png'), fit: BoxFit.fill, ), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8)), ), ), const SizedBox(width: 8), Expanded( child: Container( padding: const EdgeInsets.symmetric(vertical: 4), child: const Column( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox( width: double.infinity, child: Text( 'Hidup seperti ini', style: TextStyle( color: Color(0xFF112022), fontSize: 14, fontFamily: 'Poppins', fontWeight: FontWeight.w500, letterSpacing: -0.28, ), ), ), SizedBox(height: 4), SizedBox( width: double.infinity, child: Text( 'James adam', style: TextStyle( color: Color(0xFF93989D), fontSize: 12, fontFamily: 'Poppins', fontWeight: FontWeight.w400, ), ), ), ], ), ), ), const SizedBox(width: 8), Row( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ !_isPlaying ? IconButton( key: const Key('play_button'), onPressed: _isPlaying ? null : _play, iconSize: 30, icon: const Icon(Icons.play_arrow), color: color, ) : IconButton( key: const Key('pause_button'), onPressed: _isPlaying ? _pause : null, iconSize: 30, icon: const Icon(Icons.pause), color: color, ), ], ), const SizedBox(width: 8), const SizedBox( width: 24, height: 24, child: Row( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ SizedBox( width: 24, height: 24, child: Stack(children: [ //icon 喇叭 Icon( Icons.volume_up_rounded, color: Color.fromARGB(255, 7, 7, 7), size: 24, ) ]), ), ], ), ), ], ), ), Row( children: [ SizedBox( width: 180, child: Slider( onChanged: (value) { final duration = _duration; if (duration == null) { return; } final position = value * duration.inMilliseconds; player.seek(Duration(milliseconds: position.round())); }, value: (_position != null && _duration != null && _position!.inMilliseconds > 0 && _position!.inMilliseconds < _duration!.inMilliseconds) ? _position!.inMilliseconds / _duration!.inMilliseconds : 0.0, ), ), Text( _position != null ? '$_positionText / $_durationText' : _duration != null ? _durationText : '00:00:00/00:00:00', style: const TextStyle(fontSize: 13.0), ), ], ), ], ); } void _initStreams() { _durationSubscription = player.onDurationChanged.listen((duration) { setState(() => _duration = duration); }); _positionSubscription = player.onPositionChanged.listen( (p) => setState(() => _position = p), ); _playerCompleteSubscription = player.onPlayerComplete.listen((event) { setState(() { _playerState = PlayerState.stopped; _position = Duration.zero; }); }); _playerStateChangeSubscription = player.onPlayerStateChanged.listen((state) { setState(() { _playerState = state; }); }); } Future<void> _play() async { //加载音乐资源 await player.resume(); print('resume'); setState(() => _playerState = PlayerState.playing); } Future<void> _pause() async { await player.pause(); print('pause'); setState(() => _playerState = PlayerState.paused); } Future<void> _stop() async { await player.stop(); setState(() { _playerState = PlayerState.stopped; _position = Duration.zero; }); } }
The text was updated successfully, but these errors were encountered:
have you found any solution >?
Sorry, something went wrong.
No branches or pull requests
// ios18+iphpne 13
// I encountered an error on Android.
The text was updated successfully, but these errors were encountered: