Firebase 颤振音频插件无法与我的音乐链接一起使用
希望有人正面临我的问题,或者能提供一个解决方案。我使用firebase保存和播放我的音乐。我的数据库项目中的以下流式链接与AudioManager()或AudioPlayer插件()不兼容,我也没有找到任何其他插件可以正常工作。老实说,这将是伟大的与AudioManager插件一起工作。我还试图在这两个插件提供商项目中制造问题,但目前没有任何成功 我面临的问题: 功能停止功能无法识别停止。“上一个”和“下一个”以及“播放暂停”只在延迟时起作用。在提供的示例中,im使用AudioManager插件 在提供的示例中,我们有一个水平列表,当您按下右上角的按钮时,我试图停止音乐。使用流媒体链接无法识别任何内容。它忽略了停止歌曲。另外,在进入下一首歌曲时有一点延迟 如果您将音频链接更改为带有文件结尾的链接,则停止歌曲效果非常好,延迟也会减少在我的例子中,更重要的是停止链接源而不停止文件结尾强>Firebase 颤振音频插件无法与我的音乐链接一起使用,firebase,flutter,android-mediaplayer,avplayer,Firebase,Flutter,Android Mediaplayer,Avplayer,希望有人正面临我的问题,或者能提供一个解决方案。我使用firebase保存和播放我的音乐。我的数据库项目中的以下流式链接与AudioManager()或AudioPlayer插件()不兼容,我也没有找到任何其他插件可以正常工作。老实说,这将是伟大的与AudioManager插件一起工作。我还试图在这两个插件提供商项目中制造问题,但目前没有任何成功 我面临的问题: 功能停止功能无法识别停止。“上一个”和“下一个”以及“播放暂停”只在延迟时起作用。在提供的示例中,im使用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",
];
如果您使用的链接以文件类型结尾,如以下示例所示,则一切正常,不会延迟:
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"
];
要复制的代码:
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]))))),
);
}
}
import'包:audio_manager/audio_manager.dart';
导入“package:flatter/signatures.dart”;
进口“包装:颤振/材料.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(),
);
}
}
类MyHomePage扩展StatefulWidget{
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
int currentIndex=0;
@凌驾
小部件构建(构建上下文){
//选项卡列表的页面选择器
void\u选择页面(整数索引){
打印(“页面索引:$index”);
设置状态(){
currentIndex=索引;
});
}
//用于选项卡导航的路由列表
最终列表_页=[
ScreenA(),
屏幕B(功能:选择页面),
];
返回脚手架(
appBar:appBar(),
正文:_页[当前索引],
底部导航栏:安全区域(
子项:底部导航栏(
onTap:\u选择页面,
iconSize:22,
currentIndex:currentIndex,
类型:BottomNavigationBarType.fixed,
项目:[
底部导航气压计(
背景色:主题。背景色,
图标:图标(图标.说明),
标签:“ScreenA”,
),
底部导航气压计(
背景色:主题。背景色,
图标:图标(图标。ac_单位概述),
标签:'ScreenB'),
],
),
),
);
}
}
类ScreenA扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回容器(
child:Text('HOME'),
);
}
}
类ScreenB扩展了StatefulWidget{
函数func;
ScreenB({Key Key,@required this.func}):super(Key:Key);
@凌驾
_ScreenBState createState()=>\u ScreenBState();
}
var音频文件=[
"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听力指数=0;
类_ScreenBState扩展状态{
//var_controller=PageController();
PlayMode PlayMode=AudioManager.instance.PlayMode;
var globalIndex=0;
@凌驾
void initState(){
//TODO:实现initState
列表_List=[];
对于(var i=0;i
//手势检测器(
//onPanUpdate:(详细信息){
//如果(details.delta.dx<0){
//_controller.nextPage(
//持续时间:持续时间(毫秒:200),
//曲线:Curves.easeInOut);
//设置状态(){
////audioIndex=pageIndex;
//AudioManager.instance.next();
// });
// }