【发布时间】:2026-01-27 00:30:01
【问题描述】:
我是 Flutter 的新手,(来自网络,尤其是 JS/VueJS)
我在 firebase 中有一个数据库,它有一个名为 edito 的集合,在里面,我有不同的艺术家,他们有一个特定的 ID,可以用它来调用 Deezer Api。
所以我要做的是首先调用我的数据库并获取每个艺术家的 ID,然后将此 ID 作为参数放入函数中以完成 url。
我做了2个Future函数,一个调用db,一个调用api。
但我不明白如何在构建中使用一个与其他的来获取列表视图,其中包含每个数据的 deezer api 信息。
我正在获取列表,但它陷入了无限循环。
我所有的应用程序都将在这个嵌套函数上,是否可以这样做并在我想要的任何小部件中调用它?
这是我的代码,谢谢
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
class GetAlbum extends StatefulWidget {
@override
_GetAlbumState createState() => _GetAlbumState();
}
class _GetAlbumState extends State<GetAlbum> {
Map mapResponse;
Future<QuerySnapshot> getDocument() async{
return FirebaseFirestore.instance.collection("edito").get();
}
Future<dynamic> fetchData(id) async{
http.Response response;
response = await http.get('https://api.deezer.com/album/' + id);
if(response.statusCode == 200){
setState(() {
mapResponse = json.decode(response.body);
});
}
}
Future<dynamic> getDocut;
Future<dynamic> getArtist;
@override
void initState() {
getDocut = getDocument();
getArtist = fetchData(null);
super.initState();
}
@override
Widget build(BuildContext context) {
return FutureBuilder<QuerySnapshot>(
future : getDocut,
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot){
if(!snapshot.hasData) {
return CircularProgressIndicator();
}else{
return new ListView(
children: snapshot.data.docs.map<Widget>((document){
print(document.data().length);
return FutureBuilder(
future: fetchData(document.data()['idDeezer'].toString()),
builder: (context, snapshot){
return Container(
child: mapResponse==null?Container(): Text(mapResponse['title'].toString(), style: TextStyle(fontSize: 30),),
);
}
);
}).toList(),
);
}
},
);
}
}
【问题讨论】:
标签: flutter dart flutter-layout future