从网络加载图像时,“接收到完整的报头之前关闭连接

时间:2019-12-30 10:36:23

标签: android ios flutter networkimageview

我也看到了很多相同的问题,但是还没有答案,所以我决定再说一次。

我正在使用rest API通过ScrollController在Gridview.count中加载数据,该功能通常运行良好,但是很多时候某些图像未加载到框架上,并且出现此错误:-
“在收到完整的标头之前,连接已关闭,uri = IMAGE URL”

这是我的代码

    class CreateHome extends StatefulWidget {
      _AppState state;
      BuildContext context;

      CreateHome(this.state, this.context);

      @override
      State<StatefulWidget> createState() {
        // TODO: implement createState
        return new CreateHomeState(state, context);
      }
    }

class CreateHomeState extends State<CreateHome> {
      _AppState state;
      BuildContext context;
      int _selectBuilder = 0;
      List<ProductModel> productList = new List();
      CreateHomeState(this.state, this.context);
      ScrollController _controller;
      String lasthit = "";

      FutureBuilder<List<ProductModel>> _getFutureBuilder(int pos) {
        switch (pos) {
          case 0:
            return new FutureBuilder(
              future: Api.getProductList(context, '0'),
              builder: (context, snapshot) {
                if (snapshot.hasData) {
                  productList.addAll(snapshot.data);
                  return GridList(productList);
                } else if (snapshot.hasError) {
                  Toast.show(snapshot.error, context,
                      duration: 3, backgroundColor: Colors.deepOrange);
                }
                return RoundProgress();
              },
            );
          case 1:
            return new FutureBuilder(
              future: Api.getProductList(
                  context, productList[productList.length - 1].product_id),
              builder: (context, snapshot) {
                lasthit = productList[productList.length - 1].product_id;
                if (snapshot.hasData) {
                  productList.addAll(snapshot.data);
                  //productList = productList.sublist(productList.length-7, productList.length-1);
                  var distinctIds = productList.toSet().toList();
                  return GridList(distinctIds);
                } else if (snapshot.hasError) {
                  Toast.show(snapshot.error, context,
                      duration: 3, backgroundColor: Colors.deepOrange);
                }
                return RoundProgress();
              },
            );
        }
      }

      @override
      void initState() {
        print('initstatecalled');
        _controller = ScrollController();
        _controller.addListener(_scrollListener);
        super.initState();
      }

      _scrollListener() {
        if (_controller.offset >= _controller.position.maxScrollExtent &&
            !_controller.position.outOfRange) {
          print(productList.length.toString());
          String currentHit = productList[productList.length - 1].product_id;
          if (currentHit != lasthit) {
            setState(() {
              _selectBuilder = 1;
            });
          }
        }
      }

      @override
      Widget build(BuildContext context) {
        return SingleChildScrollView(
          controller: _controller,
          child: Container(
            color: Colors.black12,
            //=========Main Container For Scrollview==============//
            child: Padding(
              padding: const EdgeInsets.fromLTRB(0, 15, 0, 0),
              child: Column(
                children: <Widget>[
                  Container(
                    width: double.infinity,
                    //================Container for Categories==================//
                    color: Colors.white,
                    child: Container(
                      height: 130,
                      child: FutureBuilder<List<CategoryModel>>(
                        future: Api.getDataCategories(context),
                        builder: (context, snapshot) {
                          if (snapshot.hasData) {
                            List<CategoryModel> categoryListing = snapshot.data;
                            return ListView.builder(
                              scrollDirection: Axis.horizontal,
                              shrinkWrap: true,
                              itemCount: categoryListing.length,
                              itemBuilder: (BuildContext context, int index) {
                                return createList(
                                    state,
                                    categoryListing[index].url,
                                    categoryListing[index].name,
                                    1,
                                    categoryListing[index].id);
                              },
                            );
                          } else if (snapshot.hasError) {
                            Toast.show("Error", context,
                                duration: 3,
                                gravity: Toast.BOTTOM,
                                backgroundColor: Colors.deepOrange);
                          }
                          return RoundProgress();
                        },
                      ),
                    ),
                  ),
                  Padding(
                    padding: const EdgeInsets.fromLTRB(0, 20, 0, 20),
                    child: Container(
                      color: Colors.white,
                      child: Padding(
                        padding: const EdgeInsets.fromLTRB(0, 10, 0, 10),
                        child: SizedBox(
                          child: FutureBuilder<List<String>>(
                            future: Api.getBanners(context, "front"),
                            builder: (context, snapshot) {
                              if (snapshot.hasData) {
                                List<String> images = snapshot.data;
                                return CarouselWithIndicator(images);
                              } else if (snapshot.hasError) {
                                Toast.show("Error", context,
                                    duration: 3,
                                    gravity: Toast.BOTTOM,
                                    backgroundColor: Colors.deepOrange);
                              }
                              return RoundProgress();
                            },
                          ),
                        ),
                      ),
                    ),
                  ),
                  Container(
                      color: Colors.white, child: _getFutureBuilder(_selectBuilder))
                ],
              ),
            ),
          ),
        );
      }
    }

这是我制作GridView的代码

class GridList extends StatelessWidget {
      List<ProductModel> list;
      GridList(this.list);

      @override
      Widget build(BuildContext context) {
        print('length from grid..'+list.length.toString());
        IconData icon;
        Color color;
        String price;
        bool boolean;
        return Padding(
          padding: const EdgeInsets.fromLTRB(10, 10, 10, 20),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              Padding(
                padding: const EdgeInsets.fromLTRB(0, 10, 0, 10),
                child: Text(
                  'Popular Products',
                  style: TextStyle(
                      fontSize: 16,
                      fontFamily: 'SFProRegular',
                      color: Colors.black),
                ),
              ),
              Padding(
                padding: const EdgeInsets.fromLTRB(0, 10, 0, 0),
                child: GridView.count(
                  shrinkWrap: true,
                  primary: false,
                  childAspectRatio: 0.6,
                  //(itemWidth / itemHeight),
                  crossAxisCount: 2,
                  children: List.generate(list.length, (index) {
                    if (list[index].wishlist == "1") {
                      icon = Icons.favorite;
                      color = Colors.red;
                    } else {
                      icon = Icons.favorite_border;
                      color = Colors.black38;
                    }
                    if (list[index].discounted_price != "0") {
                      price = "Rs " + list[index].discounted_price;
                      boolean = true;
                    } else {
                      price = "Rs " + list[index].price;
                      boolean = false;
                    }
                    return Wrap(
                      children: <Widget>[
                        Card(
                          elevation: 5,
                          child: Container(
                            child: Column(
                              crossAxisAlignment: CrossAxisAlignment.start,
                              children: <Widget>[
                                new Container(
                                    constraints: new BoxConstraints.expand(
                                      height: 150.0,
                                    ),
                                    padding:
                                    new EdgeInsets.only(top: 8.0, right: 8.0),
                                    decoration: new BoxDecoration(
                                      borderRadius: BorderRadius.only(
                                          topLeft: Radius.circular(4),
                                          topRight: Radius.circular(4)),
                                      image: new DecorationImage(
                                        image:
                                        new NetworkImage(list[index].image_url),
                                        fit: BoxFit.cover,
                                      ),
                                    ),
                                    child: new Stack(
                                      children: <Widget>[
                                        new Positioned(
                                          right: 0.0,
                                          top: 0.0,
                                          child: Material(
                                            borderRadius: BorderRadius.all(
                                                Radius.circular(50)),
                                            child: Padding(
                                              padding: const EdgeInsets.all(6.0),
                                              child: Center(
                                                child: new Icon(
                                                  icon,
                                                  color: color,
                                                  size: 16,
                                                ),
                                              ),
                                            ),
                                          ),
                                        ),
                                      ],
                                    )),
                                Padding(
                                  padding:
                                  const EdgeInsets.fromLTRB(5.0, 10, 0, 10),
                                  child: Text(
                                    list[index].product_name,
                                    style: TextStyle(
                                        fontSize: 16,
                                        fontFamily: 'SFProRegular',
                                        color: Colors.black),
                                  ),
                                ),
                                Padding(
                                  padding: const EdgeInsets.fromLTRB(5.0, 0, 0, 10),
                                  child: Row(
                                    children: <Widget>[
                                      Icon(
                                        Icons.person,
                                        size: 23,
                                        color: Colors.black38,
                                      ),
                                      Padding(
                                        padding:
                                        const EdgeInsets.fromLTRB(5.0, 0, 0, 0),
                                        child: Text(
                                          list[index].designer,
                                          style: TextStyle(
                                            fontSize: 14,
                                            fontFamily: 'SFProRegular',
                                            color: Colors.black38,
                                            decoration: TextDecoration.underline,
                                          ),
                                        ),
                                      ),
                                    ],
                                  ),
                                ),
                                Padding(
                                  padding: const EdgeInsets.fromLTRB(5.0, 2, 0, 10),
                                  child: Row(
                                    children: <Widget>[
                                      Text(
                                        price,
                                        style: TextStyle(
                                            fontSize: 13,
                                            fontFamily: 'SFProRegular',
                                            color: Colors.green),
                                      ),
                                      Padding(
                                        padding:
                                        const EdgeInsets.fromLTRB(10, 0, 0, 0),
                                        child: Visibility(
                                          visible: boolean,
                                          maintainSize: true,
                                          maintainAnimation: true,
                                          maintainState: true,
                                          child: Text(
                                            "Rs " + list[index].price,
                                            style: TextStyle(
                                                fontSize: 13,
                                                fontFamily: 'SFProRegular',
                                                color: Colors.grey,
                                                decoration:
                                                TextDecoration.lineThrough),
                                          ),
                                        ),
                                      ),
                                    ],
                                  ),
                                ),
                                Padding(
                                  padding: const EdgeInsets.fromLTRB(5.0, 0, 0, 5),
                                  child: Visibility(
                                    maintainSize: true,
                                    maintainAnimation: true,
                                    maintainState: true,
                                    visible: boolean,
                                    child: Text(
                                      list[index].discount + '% OFF',
                                      style: TextStyle(
                                          fontSize: 13,
                                          fontFamily: 'SFProRegular',
                                          color: Colors.deepOrange),
                                    ),
                                  ),
                                ),
                              ],
                            ),
                          ),
                        ),
                      ],
                    );
                  }),
                  crossAxisSpacing: 3.0,
                  mainAxisSpacing: 5.0,
                ),
              ),
            ],
          ),
        );
      }
    }

1 个答案:

答案 0 :(得分:0)

此问题将通过

解决
  1. 扑打干净
  2. 运行