如何以颤动的方式播放前一屏幕的音频?

问题描述

一个带有其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,],));
              });
        },);
  }
}

数据库

db

玩家

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
      }
     },),);
  }
 }