如何将数据传递到Flutter中的小部件?

问题描述 投票:0回答:2

我有一个包含标题和songNumbers列表的json文件。我做了一个列表视图,并使用onTap和Navigator.push将det数据发送到详细信息页面。将数据显示为文本效果很好,但是我想播放本地资产中的歌曲。我使用audioplayers程序包,如果我对一个歌曲名进行硬编码,它可以工作,但是我想将该歌曲名传递到播放功能中以播放所选的歌曲。我的详细页面外观代码(有点简化和缩短)是这样的:

import 'package:flutter/material.dart';
import 'package:audioplayers/audio_cache.dart';

class SongDetail extends StatelessWidget {
  final String title;
  final String songNumber;

  final player = AudioCache();

  SongDetail(this.title, this.songNumber);

  @override
  Widget build(BuildContext context) {
    Widget titleSection = Container(
      decoration: BoxDecoration(
        color: Colors.blueGrey[50],
      ),
      child: Row(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        children: <Widget>[
          Padding(
            padding: EdgeInsets.only(left: 20.0),
            child: IconButton(icon: Icon(
                Icons.play_circle_filled,
                size: 40.0),
                onPressed: () { player.play('1.mp3'); },
              ),
          ),

我可以使用Text(this.title)和Text(this.songNumber)将标题和songNumber显示为文本。但是如何从songNumber到onPressed函数而不是硬编码的“ 1.mp3”中获取数据?

请记住,我是一个新手,可能已经完成了艰巨的任务,但是我喜欢挑战:)

flutter audio local assets playback
2个回答
0
投票

您尝试过这个吗?

onPressed: () { player.play('$songNumber.mp3'); },

0
投票

建议尝试:onPressed: () { player.play('$songNumber.mp3'); },

给出错误:

Performing hot reload...
Syncing files to device Android SDK built for x86...
Reloaded 4 of 520 libraries in 771ms.
E/flutter (20342): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: FileSystemException: Cannot create file, path = '/data/user/0/com.example.song/cache/' (OS Error: Is a directory, errno = 21)
E/flutter (20342): #0      _File.create.<anonymous closure> (dart:io/file_impl.dart:265:9)
E/flutter (20342): #1      _rootRunUnary (dart:async/zone.dart:1134:38)
E/flutter (20342): #2      _CustomZone.runUnary (dart:async/zone.dart:1031:19)
E/flutter (20342): #3      _FutureListener.handleValue (dart:async/future_impl.dart:139:18)
E/flutter (20342): #4      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:680:45)
E/flutter (20342): #5      Future._propagateToListeners (dart:async/future_impl.dart:709:32)
E/flutter (20342): #6      Future._completeWithValue (dart:async/future_impl.dart:524:5)
E/flutter (20342): #7      Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:554:7)
E/flutter (20342): #8      _rootRun (dart:async/zone.dart:1126:13)
E/flutter (20342): #9      _CustomZone.run (dart:async/zone.dart:1023:19)
E/flutter (20342): #10     _CustomZone.runGuarded (dart:async/zone.dart:925:7)
E/flutter (20342): #11     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:965:23)
E/flutter (20342): #12     _microtaskLoop (dart:async/schedule_microtask.dart:43:21)
E/flutter (20342): #13     _startMicrotaskLoop (dart:async/schedule_microtask.dart:52:5)
E/flutter (20342): 
© www.soinside.com 2019 - 2024. All rights reserved.