如何解决如何以颤动的方式播放前一屏幕的音频?
有一个带有其URL的歌曲列表,我正在使用Assets_Audio_Player来播放来自URL的音频,并且当我在播放流的同一位置添加播放按钮和播放功能时,它将播放歌曲名称。但是我创建了一个播放器,并且想要它,以便在单击歌曲时转到播放器并播放歌曲。
歌曲列表
class AryanaSayeed extends StatefulWidget {
@override
_AryanaSayeedState createState() => _AryanaSayeedState();
}
class _AryanaSayeedState extends State<AryanaSayeed> {
var played = 0;
final assetsAudioPlayer = AssetsAudioPlayer.withId("0");
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.red[500],title: Text('Aryana Sayeed'),centerTitle: true,actions: <Widget>[
Icon(
Icons.search,),SizedBox(width: 10)
],body: StreamBuilder(
stream: Firestore.instance.collection('aryana sayeed').snapshots(),builder: (
context,snapshot,) {
if (snapshot.data == null)
return Center(
child: CircularProgressIndicator(
backgroundColor: Colors.red,valueColor: new AlwaysStoppedAnimation<Color>(Colors.teal),);
return ListView.builder(
itemCount: snapshot.data.documents.length,itemBuilder: (context,index) {
return SingleChildScrollView(
child: Column(
children: <Widget>[
ListTile(
onTap: () {
Navigator.push(
context,MaterialPageRoute(
builder: (context) => Player1(),));
},leading: Icon(
Icons.audiotrack,color: Colors.red,title: Text(
snapshot.data.documents[index]['name'],style: TextStyle(fontFamily: 'Font'),Divider(
thickness: 1,indent: 40,endIndent: 40,],));
});
},);
}
}
import 'package:flutter/material.dart';
import 'package:assets_audio_player/assets_audio_player.dart';
class Player1 extends StatefulWidget {
@override
_Player1State createState() => _Player1State();
}
class _Player1State extends State<Player1> {
final assetsAudioPlayer = AssetsAudioPlayer.withId("0");
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
backgroundColor: Colors.grey[800],body: Padding(
padding: const EdgeInsets.all(10.0),child: Column(
children: <Widget>[
/////////back button////options////////////
Padding(
padding: const EdgeInsets.all(25.0),child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,children: <Widget>[
InkWell(
onTap: () {},child: Container(
height: 30,width: 60,decoration: BoxDecoration(
border: Border.all(
color: Colors.blueAccent,width: 0.5),borderRadius: BorderRadius.circular(100),color: Colors.grey[800],boxShadow: [
BoxShadow(
color: Colors.grey[700],spreadRadius: 2,blurRadius: 2,offset: Offset(0,1),child: Icon(
Icons.arrow_back,color: Colors.blueAccent,Image.asset(
'assets/logo.png',height: 20,InkWell(
onTap: () {},child: Container(
height: 30,width: 65,decoration: BoxDecoration(
border: Border.all(
color: Colors.blueAccent,boxShadow: [
BoxShadow(
color: Colors.grey[700],child: Center(
child: InkWell(
onTap: () {
Navigator.pushNamed(context,'/singers');
},child: Text(
'Singers',style: TextStyle(color: Colors.blueAccent),))),]),/////end of ////back button////options////////////
),SizedBox(height: 70),/////////////////image//////////////////
Image.asset(
'assets/back.png',height: 180,////////////////////end image////////////
SizedBox(height: 70),///////Singer name/////////////
Text('singer name',style: TextStyle(
color: Colors.white,fontSize: 16,)),///////////////Song Name//////////
Text('song name',fontSize: 23,fontWeight: FontWeight.bold,///////////////position
SizedBox(height: 60),Padding(
padding: const EdgeInsets.all(15.0),child: Divider(
thickness: 3,indent: 20,endIndent: 20)),/////////////////////buttons//////////
///1///
SizedBox(height: 70),Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,children: <Widget>[
InkWell(
onTap: () {
assetsAudioPlayer.previous();
},child: Container(
height: 40,width: 40,decoration: BoxDecoration(
border: Border.all(
color: Colors.blueAccent,boxShadow: [
BoxShadow(
color: Colors.grey[700],child: Icon(
Icons.skip_previous,/////2
InkWell(
onTap: () {
assetsAudioPlayer..seekBy(Duration(seconds: -30));
},child: Container(
alignment: FractionalOffset(0.5,0.5),height: 45,width: 45,child: Text(
'-30s',style: TextStyle(
color: Colors.blueAccent,fontSize: 12),////3
InkWell(
onTap: () {
assetsAudioPlayer.playOrPause();
},child: Container(
height: 55,width: 55,child: Icon(
Icons.play_arrow,/////////4
InkWell(
onTap: () {
assetsAudioPlayer.seekBy(Duration(seconds: 30));
},child: Text(
'+30s',//////////////5
InkWell(
onTap: () {
assetsAudioPlayer.next();
},child: Icon(
Icons.skip_next,SizedBox(height: 30),);
}
}
解决方法
在歌曲列表文件中,ListTitle小部件下的onTap函数应如下所示:
onTap: () {
Navigator.push(
context,MaterialPageRoute(
builder: (context) => Player1(name: snapshot.data.documents[index]['name'],url: snapshot.data.documents[index]['url']),));
},
然后播放器文件应如下所示:
import 'package:flutter/material.dart';
class _PlayerState1 extends StatefulWidget {
String name;
String url;
_PlayerState1({this.name,this.url});
@override
__PlayerState1State createState() => __PlayerState1State();
}
class __PlayerState1State extends State<_PlayerState1> {
final assetsAudioPlayer = AssetsAudioPlayer.withId("0");
@override
Widget build(BuildContext context) {
return Scaffold(
body: GestureDetector(
onTap: () {
try {
await assetsAudioPlayer.open(
Audio.network(widget.url),);
} catch (t) {
//mp3 unreachable
}
},),);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。