0

我正在尝试制作一个带有颤振的音乐播放器。使用 flutter_audio_query 包从存储和 audioplayers 包中获取歌曲。问题是,当我运行程序时,它在我的 ListView 中什么也没有显示,没有得到歌曲。甚至没有显示文本('未找到歌曲')。我在 Android 清单中添加了所需的权限。这似乎是flutter_audio_query的问题。这是我的 main.dart 文件:

import 'package:flutter/material.dart';
import 'package:flutter_audio_query/flutter_audio_query.dart';
import 'package:music_player/Routes/playing_song.dart';

void main() => runApp(MaterialApp(
  title: 'Music Player',
  home: Home(),
  debugShowCheckedModeBanner: false,
  theme: ThemeData(
    primarySwatch: Colors.deepPurple,
    brightness: Brightness.dark,
  ),
));

class Home extends StatefulWidget {
  @override
  State createState() => _Home();
}

class _Home extends State<Home> {
  List<dynamic> _songs = [];
  var songs;
  int position = 0;
  late FlutterAudioQuery audioQuery;

  Future<List<dynamic>> getAllSongs() async => await audioQuery.getSongs();

    @override
    void initState() {
      super.initState();
      audioQuery = FlutterAudioQuery();
      songs = getAllSongs();
      setState(() {});
    }

    @override
    Widget build(BuildContext context) {
      return Scaffold(
        body: _build(),
        bottomNavigationBar: Row(
          mainAxisAlignment: MainAxisAlignment.center,
          mainAxisSize: MainAxisSize.max,
          children: <IconButton>[
            IconButton(
              autofocus: true,
              icon: Icon(Icons.home_filled),
              tooltip: 'Home',
              onPressed: () {},
            ),
            IconButton(
              icon: Icon(Icons.queue_music_sharp),
              tooltip: 'Albums/Artists',
              onPressed: () {},
            ),
            IconButton(
              icon: Icon(Icons.settings),
              tooltip: 'Settings',
              onPressed: () {},
            ),
          ],
        ),
      );
    }

    Widget? _build() {
      FutureBuilder<List<dynamic>> (
          future: songs,
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              setState(() => _songs = snapshot.data!);
              return ListView.builder(
                  itemCount: this._songs.length,
                  itemBuilder: (BuildContext context, int index) {
                    position = index++;
                    return Card(child: ListTile(
                      leading: CircleAvatar(
                        child: Text('$position'),
                        foregroundColor: Colors.black,
                        backgroundColor: Colors.deepPurple,
                      ),
                      title: Text(_songs[index].title),
                      subtitle: Text(_songs[index].artist),
                      onTap: () => Navigator.push(context,
                          MaterialPageRoute(builder: (BuildContext context) =>
                              Playing_Song(_songs[index]))),
                    ));
                  }
              );
            } else return Center(child: const Text('No Songs Found'));
          }
      );
    }

有任何想法吗 ?

4

1 回答 1

0

你有没有像这样在 pubspec.yaml 中添加资产

flutter:

  assets:
    - assets/folder_name/ 

并重新加载 有时这个单可能会导致错误

用于本地存储

  • 在 AndroidManifest 文件中添加读/写权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  • 现在添加以下代码。
void getFiles() async { //asyn function to get list of files
      List<StorageInfo> storageInfo = await PathProviderEx.getStorageInfo();
      var root = storageInfo[0].rootDir; //storageInfo[1] for SD card, geting the root directory
      var files = FileManager(root: Directory(root)); //
      files = await files.filesTree( 
        excludedPaths: ["/storage/emulated/0/Android"],
        extensions: ["mp3","wav] //to filter files types
      );
      setState(() {}); //update the UI
  }
于 2022-02-02T17:22:05.323 回答