0

当我播放音频时,我的歌曲正在加载,当时在 IOS 中显示错误,当从该页面返回时,我收到此错误“_dependents.isempty' is not true”。对于 android 它工作正常。

这是我的卡片页面,从这里我转到我正在播放歌曲的详细信息页面

import 'package:audioplayers/audioplayers.dart';
import 'package:cwc/constants/constants.dart';
import 'package:cwc/ui/video/video_player.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';

import '../podcast_details_page.dart';

class PodcastCompoentPurple extends StatefulWidget {
  final cwcAudioListData;
  const PodcastCompoentPurple({Key? key, this.cwcAudioListData,}) : super(key: key);

  @override
  State<PodcastCompoentPurple> createState() => _PodcastCompoentPurpleState();
}

class _PodcastCompoentPurpleState extends State<PodcastCompoentPurple> {
  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.fromLTRB(18, 0, 18, 0),
      child: GestureDetector(
                onTap: () async{
                  isBtnHide=false;
          await Navigator.push(context, MaterialPageRoute(builder: (context){
            return PodcastDetailsPage(cwcAudioListData:widget.cwcAudioListData);
          }));
                  print("s3 $playing");
                  if (playing==true) {
                    //pause song
                    var res = await audioPlayer.pause();
                    if (res == 1) {
                      setState(() {
                        playing = false;
                        print("s2 $playing");
                      });
                    }
                  }
          print("s1 $playing");

        },
        child: Container(
          height: 234,
          // width: 260,
          width: double.infinity,
          decoration: BoxDecoration(
            color: widget.cwcAudioListData['packages'][0]["name"]
                .toString()
                .toLowerCase() ==
                "starter"
                ? Color(0xff69C583).withOpacity(.25)
                :widget.cwcAudioListData['packages'][0]["name"]
                .toString()
                .toLowerCase() ==
                "explorer"
                ? Color(0xFFC691D3).withOpacity(0.25)
                : Color(0xFFF6931E).withOpacity(0.25),
            // color:  Colors.red,
            borderRadius: const BorderRadius.all(
              Radius.circular(10),
            ),
          ),
          child: Padding(
            padding: const EdgeInsets.fromLTRB(10, 10, 10, 10),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.start,
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Container(
                  height: 145,
                  // width: 300,
                  width: double.infinity,
                  decoration: BoxDecoration(
                    color: widget.cwcAudioListData['packages'][0]["name"]
                        .toString()
                        .toLowerCase() ==
                        "starter"
                        ? Color(0xff69C583).withOpacity(.25)
                        : widget.cwcAudioListData['packages'][0]["name"]
                        .toString()
                        .toLowerCase() ==
                        "explorer"
                        ? Color(0xFFC691D3).withOpacity(0.25)
                        : Color(0xFFF6931E).withOpacity(0.25),
                    // color:  Colors.red,
                    borderRadius: const BorderRadius.all(
                      Radius.circular(10),
                    ),
                    image:  DecorationImage(
                      image: NetworkImage('${widget.cwcAudioListData['coverImage']}'),
                      fit: BoxFit.cover,
                    ),
                  ),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.center,
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                    Center(
                        child: CircleAvatar(
                          backgroundColor: Color(0xffF1F2F6).withOpacity(0.5),
                          radius: 23,
                          child: Icon(
                            Icons.headphones,
                            size: 24,
                            color: Color(0xffF1F2F6).withOpacity(1),
                          ),
                        ),
                      ),
                    ],
                  ),
                ),
                SizedBox(
                  height: 10,
                ),
                Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    Text(
                      '${widget.cwcAudioListData['title']}',
                  style: GoogleFonts.poppins(
                      fontWeight: FontWeight.w600,
                      fontSize: 14,
                      color: Color(0xFF444444)),textAlign: TextAlign.center,
                ),
                Text(
                  '${widget.cwcAudioListData['description']}',
                  maxLines: 2,
                  style: GoogleFonts.poppins(
                      fontSize: 12, color: Color(0xFF444444)),
                ),
                  ],)
                
              ],
            ),
          ),
        ),
      ),
    );
  }
}

这是我的详细信息页面。

import 'package:audioplayers/audioplayers.dart';
import 'package:cwc/constants/constants.dart';
import 'package:cwc/constants/top_card.dart';
import 'package:cwc/ui/video/video_screen.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:intl/intl.dart';
import 'package:flutter/material.dart';

class PodcastDetailsPage extends StatefulWidget {
  final cwcAudioListData;
  const PodcastDetailsPage({Key? key, this.cwcAudioListData}) : super(key: key);

  @override
  _PodcastDetailsPageState createState() => _PodcastDetailsPageState();
}

class _PodcastDetailsPageState extends State<PodcastDetailsPage> {

  Duration duration = new Duration();
  Duration position = Duration();

  var url = '';
  @override
  void initState() {
    url=widget.cwcAudioListData['upload'].toString();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Color(0xffffffff).withOpacity(1),
      body: SafeArea(
        child: Stack(
          children: [
            Container(
              width: double.infinity,
              height: 350,
              decoration:  BoxDecoration(
                color: Color(0xffF6931E),
                image: DecorationImage(
                  image: NetworkImage('${widget.cwcAudioListData["coverImage"]}'),
                  fit: BoxFit.cover,
                ),
              ),
              child: Column(
                mainAxisAlignment: MainAxisAlignment.start,
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Padding(
                    padding: const EdgeInsets.fromLTRB(18, 12, 0, 0),
                    child: GestureDetector(
                      onTap: () {
                        Navigator.pop(context);
                      },
                      child: const CircleAvatar(
                        radius: 23,
                        backgroundColor: Colors.white,
                        child: Icon(Icons.arrow_back_ios_new,
                            color: Colors.black),
                      ),
                    ),
                  ),
                  const SizedBox(
                    height: 138,
                  ),
                  Padding(
                    padding: EdgeInsets.fromLTRB(18, 0, 18, 15),
                    child: Container(
                      height: 80,
                    ),
                  ),
                ],
              ),
            ),
            Padding(
              padding: const EdgeInsets.only(top: 270.0),
              child: Container(
                decoration: const BoxDecoration(
                  color: Colors.white,
                  borderRadius: BorderRadius.only(
                    topRight: Radius.circular(24.0),
                    topLeft: Radius.circular(24.0),
                  ),
                ),
                // height: 50,
                width: double.infinity,
                child: SingleChildScrollView(
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.start,
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Row(
                        mainAxisAlignment: MainAxisAlignment.start,
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          
                          Padding(
                            padding: const EdgeInsets.fromLTRB(19, 33, 0, 0),
                            child: Column(
                              mainAxisAlignment: MainAxisAlignment.start,
                              crossAxisAlignment: CrossAxisAlignment.start,
                              children: [
                                Text(
                                  '${widget.cwcAudioListData["title"]}',
                                  style: GoogleFonts.poppins(
                                    fontSize: 18,
                                    color: Color(0xff444444),
                                    fontWeight: FontWeight.w600,
                                  ),
                                ),
                                Text(
                                  "${formateDat(DateTime.parse(widget.cwcAudioListData['uploadDate']))} at ${DateFormat("hh:mm a").format(DateFormat("yyyy-MM-ddTHH:mm:ssZ").parseUTC("${widget.cwcAudioListData['uploadDate']}").toLocal())}",

                                  // 'Sept, 10th 2021',
                                  style: GoogleFonts.poppins(
                                    fontSize: 12,
                                    color: Color(0xff8F9698),
                                    fontWeight: FontWeight.w600,
                                  ),
                                ),
                                Text(
                                  'FREE to watch',
                                  style: GoogleFonts.poppins(
                                    fontSize: 14,
                                    color: Color(0xff69C583),
                                    fontWeight: FontWeight.w500,
                                  ),
                                ),
                              ],
                            ),
                          )
                        ],
                      ),
                      Padding(
                        padding: const EdgeInsets.fromLTRB(20, 20, 0, 0),
                        child: Text(
                          'Video Description',
                          style: GoogleFonts.poppins(
                              fontSize: 18,
                              color: Color(0xFF69C583),
                              fontWeight: FontWeight.w500),
                        ),
                      ),
                      Padding(
                        padding: const EdgeInsets.fromLTRB(20, 8, 17, 22),
                        child: Text(
                          '${widget.cwcAudioListData["description"]}',
                          style: GoogleFonts.poppins(
                            fontSize: 13,
                            fontWeight: FontWeight.normal,
                            color: Color(0xff444444),
                          ),
                        ),
                      ),
                    ],
                  ),
                ),
              ),
            )
          ],
        ),
      ),




      bottomNavigationBar: isBtnHide == false
          ? Container(
              color: Colors.white,
              child: Padding(
                padding: const EdgeInsets.fromLTRB(0, 10, 0, 10),
                child: Row(
                  children: [
                    SizedBox(
                      width: 30,
                    ),
                    Expanded(
                      child: ElevatedButton(
                        style: ButtonStyle(
                            backgroundColor:
                                MaterialStateProperty.all(Color(0xFF158998)),
                            shape: MaterialStateProperty.all<
                                    RoundedRectangleBorder>(
                                RoundedRectangleBorder(
                                    borderRadius: BorderRadius.circular(18.0),
                                    side: BorderSide(
                                        color: Colors.teal, width: 0.0)))),
                        onPressed: () async {
                          setState(() {
                            isBtnHide = true;
                          });
                          getAudio();
                        },
                        child: Padding(
                          padding: const EdgeInsets.all(15.0),
                          child: Text(
                            'Listen Now',
                            style: GoogleFonts.poppins(fontSize: 14),
                          ),
                        ),
                      ),
                    ),
                    const SizedBox(
                      width: 30,
                    ),
                  ],
                ),
              ),
            )
          : Container(
              color: Colors.white,
              height: 80,
              child: Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  Padding(
                    padding: const EdgeInsets.only(bottom: 29.0),
                    child:

                    duration.toString().split(".")[0].toString() == "0:00:00" ? Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: CircularProgressIndicator(color: selectBlueColor,),
                    ): InkWell(
                      onTap: () {
                        getAudio();
                      },
                      child: Icon(
                        playing == false ||
                                position.inSeconds.toDouble() ==
                                    duration.inSeconds.toDouble()
                            ? Icons.play_circle_outline
                            : Icons.pause_circle_outline,
                        size: 40,
                        color: selectBlueColor,
                      ),
                    ),
                  ),
                  Column(
                    children: [
                      slider(),
                      Row(
                        children: [
                          Text(
                            "${position.toString().split(".")[0]}",
                            style: TextStyle(fontWeight: FontWeight.w700),
                          ),
                          SizedBox(
                            width: MediaQuery.of(context).size.width / 2.55,
                          ),
                          Text(
                            "${duration.toString().split(".")[0]}",
                            style: TextStyle(fontWeight: FontWeight.w300),
                          ),
                        ],
                      )
                    ],
                  )
                ],
              ),
            ),
    );
  }

  Widget slider() {
    return Container(
        width: MediaQuery.of(context).size.width / 1.3,
        child: Slider.adaptive(
            activeColor: selectBlueColor,
            inactiveColor: Colors.grey[350],
            value: position.inSeconds.toDouble(),
            min: 0.0,
            max: duration.inSeconds.toDouble(),
            onChanged: (double value) {
              print(duration.inSeconds.toDouble());
              setState(() {
                audioPlayer.seek(Duration(seconds: value.toInt()));
              });
            }));
  }

  Future<void> getAudio() async {
    // playing is false by default
    print(playing);
    if (playing) {
      //pause song
      var res = await audioPlayer.pause();
      if (res == 1) {
        setState(() {
          playing = false;
        });
      }
    } else {
      //play song

      var res = await audioPlayer.play(url, isLocal: true);

      if (res == 1) {
        setState(() {
          print(res);
          playing = true;
        });
      }
    }

    audioPlayer.onDurationChanged.listen((Duration d) {
      // print('Max duration: $d');
      if (mounted) {
        setState(() => duration = d);
      }
    });
    audioPlayer.onAudioPositionChanged.listen((Duration dd) {
      if (mounted) {
        setState(() {
          position = dd;
        });
      }
    });
  }
}

formateDat(DateTime date) {
  final DateFormat formatter = DateFormat.MMM();
  String formatted = formatter.format(date);
  formatted = "${formatted} " + "${date.day}";
  var week = DateFormat('EEEE').format(date);
  var we = week[0] + week[1] + week[2];
  return "$we, " + formatted;
}

这是我的错误

在此处输入图像描述

这是我的录像。 在此处输入图像描述

4

0 回答 0