我尝试使用 FutureBuilder 在 Flutter 中的 ListView 中显示来自 JSON 的结果。当我检查这样的数据时检查(快照。数据);我得到了这个结果
但是当我检查这样的数据时,inspect(snapshot.data['name]);我没有收到任何结果。
我想从 api 中获取数据并在列表视图中显示
有什么帮助吗?
我的代码:
@override
void initState() {
getproduct(widget.idproduct);
super.initState();
}
Future<dynamic> getproduct(int id) async {
var response = await Network().getData('/publication/show/$id');
var data = json.decode(response.body)['publication'];
return data;
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
brightness: Brightness.light,
backgroundColor: Colors.transparent,
elevation: 0,
leading: GestureDetector(
onTap: () {
Navigator.pop(context);
},
child: Icon(
Icons.arrow_back,
color: Colors.grey[800],
),
),
),
body: Container(
padding: EdgeInsets.only(left: 16, top: 1, right: 16),
child: Container(
child: FutureBuilder(
future: getproduct(widget.idproduct),
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
inspect(snapshot.data);
return ListView.builder(
itemBuilder: (BuildContext context, index) {
String price = snapshot.data[index]['price'];
String size = snapshot.data[index]['size'];
int id = int.parse('${snapshot.data[index]['user_id']}');
Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
SizedBox(
height: 10.0,
),
Text(
"$size",
style: TextStyle(
fontSize: 22.0,
color: Colors.grey,
),
),
答案 0 :(得分:0)
由于您的 getProduct 是一个异步方法,所以有一段时间(短或长)的值为空。在您的 futurebuilder 中,尝试为 snapshot.hasData 添加 if/else 检查,如下所示:
FutureBuilder(
future: getproduct(widget.idproduct),
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
inspect(snapshot.data);
if(snapshot.hasData) {
return ListView.builder(...)
}
// display something when there is no data in snapshot
}
)
答案 1 :(得分:0)
你的json有可能返回一个数组吗?尝试改为打印 snapshot.data[0]['name]