Mar*_* Dz 5 avplayer android-mediaplayer firebase flutter
希望有人正面临我的问题或可以提供解决方案。我使用 firebase 来保存和播放我的音乐。来自我的数据库项目的以下流链接不适用于 AudioManager ( https://pub.dev/packages/audio_manager ) 或 audioplayers 插件 ( https://pub.dev/packages/audioplayers ),我没有找到任何其他插件它以正确的方式工作的地方。老实说,让它与 AudioManager 插件一起工作会很棒。我还尝试在两个插件提供程序项目中提出问题,但目前没有任何成功。
我面临的问题: 功能停止功能无法识别停止。上一个和下一个以及 PlayPause 仅适用于延迟。在提供的示例中,我使用 AudioManager 插件。
在提供的示例中,我们有一个水平列表,当您按下右上角的按钮时,我试图停止播放音乐。使用流媒体链接无法识别任何内容。它忽略停止歌曲。下一首歌曲也有轻微的延迟。
如果您将音频链接更改为带有文件结尾的链接,则停止播放歌曲的效果非常好,延迟也更少。在我的情况下更重要的是在没有文件结尾的情况下获取链接源!
var audioFiles = [
"https://docs.google.com/uc?export=open&id=1SaJWqfQuHnFtL7uqrzfYG31hzOnqDM3r",
"https://docs.google.com/uc?export=open&id=1FZkFMjQyWguAl0RMAsYDEZ07c_Qf7gjz",
"https://docs.google.com/uc?export=open&id=1GqrwQ3eRuiil0p-Na_R1tMAvggp9YrbH",
];
Run Code Online (Sandbox Code Playgroud)
如果您使用文件类型结尾的链接,如下例所示,一切正常且没有延迟:
var audioFiles = [
"https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3",
"https://www.soundhelix.com/examples/mp3/SoundHelix-Song-2.mp3",
"https://www.soundhelix.com/examples/mp3/SoundHelix-Song-3.mp3"
];
Run Code Online (Sandbox Code Playgroud)
重现代码:
import 'package:audio_manager/audio_manager.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int currentIndex = 0;
@override
Widget build(BuildContext context) {
// Page selector for tab list
void _selectPage(int index) {
print('page index: $index');
setState(() {
currentIndex = index;
});
}
// Routes list for tab navigation Android
final List<Widget> _pages = [
ScreenA(),
ScreenB(func: _selectPage),
];
return Scaffold(
appBar: AppBar(),
body: _pages[currentIndex],
bottomNavigationBar: SafeArea(
child: BottomNavigationBar(
onTap: _selectPage,
iconSize: 22,
currentIndex: currentIndex,
type: BottomNavigationBarType.fixed,
items: [
BottomNavigationBarItem(
backgroundColor: Theme.of(context).primaryColor,
icon: Icon(Icons.description),
label: 'ScreenA',
),
BottomNavigationBarItem(
backgroundColor: Theme.of(context).primaryColor,
icon: Icon(Icons.ac_unit_outlined),
label: 'ScreenB'),
],
),
),
);
}
}
class ScreenA extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
child: Text('HOME'),
);
}
}
class ScreenB extends StatefulWidget {
Function func;
ScreenB({Key key, @required this.func}) : super(key: key);
@override
_ScreenBState createState() => _ScreenBState();
}
var audioFiles = [
"https://docs.google.com/uc?export=open&id=1SaJWqfQuHnFtL7uqrzfYG31hzOnqDM3r",
"https://docs.google.com/uc?export=open&id=1FZkFMjQyWguAl0RMAsYDEZ07c_Qf7gjz",
"https://docs.google.com/uc?export=open&id=1GqrwQ3eRuiil0p-Na_R1tMAvggp9YrbH",
];
var audioIndex = 0;
class _ScreenBState extends State<ScreenB> {
//var _controller = PageController();
PlayMode playMode = AudioManager.instance.playMode;
var globalIndex =0;
@override
void initState() {
// TODO: implement initState
List<AudioInfo> _list = [];
for (var i = 0; i < audioFiles.length; i++) {
_list.add(AudioInfo(audioFiles[i], coverUrl: '', desc: '', title: ''));
}
print(_list);
AudioManager.instance.audioList = _list;
//AudioManager.instance.intercepter = true;
AudioManager.instance.play(auto: true);
super.initState();
}
@override
void dispose() {
// TODO: implement dispose
// AudioManager.instance.release();
super.dispose();
}
var lastPage =0;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
actions: [
IconButton(
icon: Icon(Icons.close),
onPressed: () {
AudioManager.instance.stop();
widget.func(0);
},
),
],
),
body: PageView.custom(
onPageChanged: (page){
if(page != lastPage){
if(lastPage < page){
print('swipe right');
lastPage = page;
setState(() {
//audioIndex = page;
AudioManager.instance.next();
});
} else{
print('swipe left');
lastPage = page;
}
}
},
//controller: _controller,
physics: PageScrollPhysics(),
scrollDirection: Axis.horizontal,
childrenDelegate: SliverChildBuilderDelegate((ctx, pageIndex) =>
// GestureDetector(
// onPanUpdate: (details) {
// if (details.delta.dx < 0) {
// _controller.nextPage(
// duration: Duration(milliseconds: 200),
// curve: Curves.easeInOut);
// setState(() {
// //audioIndex = pageIndex;
// AudioManager.instance.next();
// });
// }
// },
//child:
Center(
child: Container(
width: 200,
height: 200,
color: Colors.red,
child: Text(audioFiles[audioIndex]))))),
);
}
}
Run Code Online (Sandbox Code Playgroud)