flutter - 使用 ListTile() 将从 Api 加载的图像排列到 Flutter 中的两列

标签 flutter dart flutter-layout

我已成功将 JSON 数据从 API 加载到 Flutter 应用程序。 JSON 数据由图像列表组成。 JSON 数据采用以下格式。

{
    "images":[
    {
        "id":1,
        "images":"http://url_1.jpg"

    },
    {
        "id":3,
        "images":"http://url_3.jpg"

    },
    {
        "id":4,
        "images":"http://url_4.jpg"

    },
    {
        "id":5,
        "images":"https://url_5.jpg"

    }
]
}

我已经使用以下代码片段将数据加载到列表中,它工作正常。
_fetchData() async {
    setState(() {
      isLoading = true;
    }); //setState
    final response = await http.get("http://192.168.43.95:3000/memes");
    print("response");
    if (response.statusCode == 200) {
      list = json.decode(response.body) as List;
      print(list);
      setState(() {
        isLoading = false;
      });
    } else {
      throw Exception('Failed to load photos');
    }
  }

我已经使用以下代码块显示了图像:
ListView.builder(
                itemCount: list.length,
                itemBuilder: (BuildContext context, int index) {
                  return ListTile(
                    contentPadding: EdgeInsets.all(10.0),
                    leading: Image.network(
                      list[index]['images'],
                      fit: BoxFit.contain,
                    ),
                  );
                })

现在我需要修改上面的代码,使屏幕分为 2 列。图像应放置在这些列中(2 列的宽度相同),每个图像的高度与其宽度成正比。此外,当我们向下滚动时,剩余的图像应该加载到这两列中。 类似于 chrome 中的 google 图片搜索结果

需要做出哪些改变?如果 ListTile() 无法做到这一点,我该怎么做?
enter image description here

最佳答案

使用 flutter_staggered_grid_view: "^0.2.7"来自 here

StaggeredGridView.countBuilder(
    crossAxisCount: 4,
    itemCount: list.length,
    itemBuilder: (BuildContext context, int index) => new Card(
      elevation: 5.0,
      shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.all(Radius.circular(5.0))),
      child: Container(
        decoration: BoxDecoration(
          borderRadius: BorderRadius.all(Radius.circular(5.0)),
          image: DecorationImage(
              image: NetworkImage(list[index]['images']),
              fit: BoxFit.cover),
        ),
      ),
    ),
    staggeredTileBuilder: (int index) =>
        new StaggeredTile.count(2, index.isEven ? 2 : 1.5),
    mainAxisSpacing: 4.0,
    crossAxisSpacing: 4.0,
  ),

enter image description here

关于flutter - 使用 ListTile() 将从 Api 加载的图像排列到 Flutter 中的两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59254256/

相关文章:

firebase - 如何使用Flutter在Firestore中显示图像文件

flutter - 为什么背景过滤器会模糊我的整个应用程序

dart - 从毫米计算逻辑像素

Flutter - 如何使用 Carousel Slider 和 SingleChildScrollView?

dart - 如何在Dart中将文本添加到HTML元素?

datagrid - DART 的任何 UI 控制框架?

arrays - 比较两个对象列表A和B的列表,并存储在 Dart 中的另一个列表C中

flutter - 如何在 flutter 中更改日期选择器颜色?

flutter - 如何在 flutter 中显示动画 gif?

Flutter:带有 hintText 的 Cupertino TextField