快照是空颤动

时间:2021-03-24 09:51:24

标签: api flutter dart

我尝试使用 FutureBuilder 在 Flutter 中的 ListView 中显示来自 JSON 的结果。当我检查这样的数据时检查(快照。数据);我得到了这个结果

enter image description here

但是当我检查这样的数据时,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,
                          ),
                        ),

2 个答案:

答案 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]