Je connais avec une autre question, l’usage concret des différentes classes :
Dans mon service j’ai positionné :
class MusicService extends DirectusService<Music> {
MusicService({required DirectusApiManager apiManager})
: super(
apiManager: apiManager,
typeName: 'musics',
fields: '*,user_created.*, title.*, album.*, years.*, artiste.*',
);
@override
Music fromDirectus(rawData) {
return Music(rawData);
}
Future<List<Music>> getAllMusics() async {
try {
return List<Music>.from(await apiManager.findListOfItems(
name: typeName,
fields: fields,
createItemFunction: fromDirectus,
));
} catch (exe) {
print(exe);
throw false;
}
}
Dans le view model :
class MusicViewModel extends IMusicViewModel {
final DirectusApiManager _apiDirectus;
final _musicService = MusicService;
MusicViewModel(this._apiDirectus);
@override
Future<List<Music>> getMyMusic() async {
final MusicService musicService = MusicService(apiManager: _apiDirectus);
List<Music> allMusics = await musicService.getAllMusics();
print(allMusics.elementAt(1).album);
return allMusics;
}
Je récupère bien les infos de Directus, comme me le présente le print()
Puis dans la view :
int compteur() {
Map _map = widget.musicViewModel.getMyMusic();
return _map.length;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("Music List")),
body: Container(
width: double.infinity,
height: 500,
child: ListView.builder(
itemCount: compteur(),
itemBuilder: (context, index) {
return MusicLigne(
id: index,
musicList: widget.musicViewModel.getMyMusic(),
);
},
))
);
}
}
et pour finir le widget qui composera les items :
class MusicLigne extends StatelessWidget {
final List<Music> musicList;
final int id;
// final String album;
// final String artiste;
// final int year;
// final String titre;
const MusicLigne({super.key, required this.musicList, required this.id});
@override
Widget build(BuildContext context) {
return Container(
width: double.infinity,
height: 80,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
flex: 5,
child: Text(musicList.elementAt(id).title),
),
Expanded(
flex: 5,
child: Text(musicList.elementAt(id).artist),
),
Expanded(
flex: 5,
child: Text(musicList.elementAt(id).album),
),
Expanded(
flex: 5,
child: Text(musicList.elementAt(id).year),
),
],
),
);
}
}
Je n’ai aucune erreur dans VSC, mais toujours sur l’exe :
The following _TypeError was thrown building MusicListView(dirty, state: _MusicListViewState#fe713):
type 'Future<List<Music>>' is not a subtype of type 'Map<dynamic, dynamic>'
Je suis dessus depuis un moment, mais je n’arrive pas à comprendre ce que je convertit mal, puisque tout est du type List…
Merci !