成功调用API后FutureBuilder未完成



我正在尝试使用一个小部件,该小部件显示循环进度指示器,直到Future内部的API调用完成,然后显示ListView。生成器小工具。这是我的代码:

class LeadsList extends StatelessWidget {
LeadsList({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: post(),
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
if (snapshot.hasData) {
var liststring = snapshot.data;
var list = jsonDecode(liststring!);
return ListView.builder(
itemCount: list["response"]?.length,
itemBuilder: (context, index) {
return Card(
child: Text(list!["response"][index]["fullname"]));
});
} else {
return const CircularProgressIndicator();
}
});
}
}
Future<http.Response> post() {
return http.post(Uri.parse('https://api_url.link'),
body: jsonEncode({
//json paramaters for API call
}));
}

我99%确信API调用完成得很好,因为a。同一个调用在单独的文件中工作得很好。在该文件中,它只是打印出来,而不是发送到未来的构建器。b。API后端日志显示数据检索得很好;所以我的猜测是,我不会以某种方式将结果发送到未来构建器?任何帮助都将不胜感激:(

将方法转换为async并等待结果

Future<http.Response> post() async {
return await http.post(Uri.parse('https://api_url.link'),
body: jsonEncode({
//json paramaters for API call
}));
}

您正在解码Response类。CCD_ 2类提供必须被解码的CCD_ 3参数。

更改一行。

var liststring = snapshot.data.body;

您可以通过添加返回值的类型使FutureBuilder静态类型化,从而从Dart类型化的特性中获益。

return FutureBuilder<http.Response>(

最新更新