0

I'm trying to make a music player with flutter. Using flutter_audio_query package to get the songs from the storage and also audioplayers package. The thing is that when I run the program it shows nothing in my ListView, not getting the songs. Not even showing the Text('No songs found'). I have added the required permissions in Android manifest. It seems like a problem with flutter_audio_query. Here is my main.dart file:

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

Any ideas ?

Moh Say 21
  • 81
  • 1
  • 1
  • 5

1 Answers1

0

Have you added the assets in pubspec.yaml like this

flutter:

  assets:
    - assets/folder_name/ 

And reloaded Sometimes this single may cause errors

For local storage

  • Add read/write permissions in AndroidManifest file
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  • Now Add the following code.
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
  }