当前位置: 首页 > article >正文

Flutter GridView网格组件

目录

常用属性

GridView使用配置       

        GridView.count使用

        GridView.extent使用

        GridView.count Container 实现列表

        GridView.extent Container 实现列表

        GridView.builder使用


GridView网格布局在实际项目中用的也是非常多的,当我们想让可以滚动的元素使用矩阵方式排列的时候。此时我们可以用网格列表组件GridView实现布局。

GridView创建网格列表主要有下面三种方式

1、可以通过GridView.count实现网格布局
2、可以通过GridView.extent 实现网格布局
3、通过GridView.builder实现动态网格布局

常用属性

GridView使用配置       

        GridView.count使用

import 'package:flutter/material.dart';void main() {runApp(MyTestApp());
}class MyTestApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(theme: ThemeData(primarySwatch: Colors.yellow),home: Scaffold(appBar: AppBar(title: Text("App")),body: MyTestHomePage(),),);}
}//Material Design官方Icons图标
class MyTestHomePage extends StatelessWidget {@overrideWidget build(BuildContext context) {return GridView.count(crossAxisCount: 4, //一行显示的children: [Image.asset("assets/images/iv_account_selected.png"),Icon(Icons.abc_rounded),Icon(Icons.abc_sharp),Icon(Icons.factory),]);}
}

        GridView.extent使用

import 'package:flutter/material.dart';void main() {runApp(MyTestApp());
}class MyTestApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(theme: ThemeData(primarySwatch: Colors.yellow),home: Scaffold(appBar: AppBar(title: Text("App")),body: MyTestHomePage(),),);}
}//Material Design官方Icons图标
class MyTestHomePage extends StatelessWidget {@overrideWidget build(BuildContext context) {return GridView.extent(maxCrossAxisExtent: 180, //横轴子元素的最大长度children: [Icon(Icons.abc_rounded),Icon(Icons.abc_sharp),Icon(Icons.factory),],);}
}

        GridView.count Container 实现列表

import 'package:flutter/material.dart';void main() {runApp(MyTestApp());
}class MyTestApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(theme: ThemeData(primarySwatch: Colors.yellow),home: Scaffold(appBar: AppBar(title: Text("App")),body: MyTestHomePage(),),);}
}//Material Design官方Icons图标
class MyTestHomePage extends StatelessWidget {List<Widget> initList() {List<Widget> list = [];for (var i = 0; i < 10; i++) {list.add(Container(alignment: Alignment.center,decoration: BoxDecoration(color: Colors.blue),child: Text("第$i个元素", style: TextStyle(fontSize: 20)),),);}return list;}@overrideWidget build(BuildContext context) {return GridView.count(padding: EdgeInsets.all(10),crossAxisSpacing: 10, //水平间距mainAxisSpacing: 10, //垂直间距crossAxisCount: 2, //一行显示多少个元素childAspectRatio: 0.7,//宽高的比例children: initList(),);}
}

        GridView.extent Container 实现列表

import 'package:flutter/material.dart';void main() {runApp(MyTestApp());
}class MyTestApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(theme: ThemeData(primarySwatch: Colors.yellow),home: Scaffold(appBar: AppBar(title: Text("App")),body: MyTestHomePage(),),);}
}//Material Design官方Icons图标
class MyTestHomePage extends StatelessWidget {List<Widget> initList() {List<Widget> list = [];for (var i = 0; i < 10; i++) {list.add(Container(alignment: Alignment.center,decoration: BoxDecoration(color: Colors.blue),child: Text("第$i个元素", style: TextStyle(fontSize: 20)),),);}return list;}@overrideWidget build(BuildContext context) {return GridView.extent(padding: EdgeInsets.all(10),crossAxisSpacing: 10, //水平间距mainAxisSpacing: 10, //垂直间距maxCrossAxisExtent: 120,//横轴子元素的最大长度 动态计算//childAspectRatio: 0.7,//宽高的比例children: initList(),);}
}

map循环遍历数据,通过Container渲染

import 'package:flutter/material.dart';void main() {runApp(MyTestApp());
}class MyTestApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(theme: ThemeData(primarySwatch: Colors.yellow),home: Scaffold(appBar: AppBar(title: Text("App")),body: MyTestHomePage(),),);}
}//Material Design官方Icons图标
class MyTestHomePage extends StatelessWidget {List<Widget> initList() {List<Widget> list = [];for (var i = 0; i < 10; i++) {list.add(Container(alignment: Alignment.center,decoration: BoxDecoration(color: Colors.blue),child: Column(children: [Image.network("https://p4.img.cctvpic.com/photoAlbum/photo/2025/05/27/PHOT1cFfxozsH6VncGwLpViz250527_1000x2000.jpg"),Text("第$i元素"),]),),);}return list;}@overrideWidget build(BuildContext context) {return GridView.extent(padding: EdgeInsets.all(10),crossAxisSpacing: 10,//水平间距mainAxisSpacing: 10,//垂直间距maxCrossAxisExtent: 120,//横轴子元素的最大长度childAspectRatio: 1,//宽高的比例children: initList(),);}
}

        GridView.builder使用

import 'package:flutter/material.dart';void main() {runApp(MyTestApp());
}class MyTestApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(theme: ThemeData(primarySwatch: Colors.yellow),home: Scaffold(appBar: AppBar(title: Text("App")),body: MyTestHomePage(),),);}
}//Material Design官方Icons图标
class MyTestHomePage extends StatelessWidget {List list = [{"title": "Candy Shop","imageUrl":"https://p4.img.cctvpic.com/photoAlbum/photo/2025/05/27/PHOT1cFfxozsH6VncGwLpViz250527_1000x2000.jpg","author": "Mohamed Chahin",},{"title": "Zhao Shop","imageUrl":"https://p4.img.cctvpic.com/photoAlbum/photo/2025/05/27/PHOT1cFfxozsH6VncGwLpViz250527_1000x2000.jpg","author": "Mohamed Chahin",},{"title": "Fei Shop","imageUrl":"https://p4.img.cctvpic.com/photoAlbum/photo/2025/05/27/PHOT1cFfxozsH6VncGwLpViz250527_1000x2000.jpg","author": "Mohamed Chahin",},];Widget initList(context,index) {return Container(alignment: Alignment.center,decoration: BoxDecoration(color: Colors.blue),child: Column(children: [Image.network(list[index]["imageUrl"]),Text(list[index]["title"]),],),);}@overrideWidget build(BuildContext context) {return GridView.builder(padding: EdgeInsets.all(10),itemCount: list.length,gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2,crossAxisSpacing: 10,childAspectRatio: 1,),itemBuilder: initList);}// return GridView.builder(//   padding: EdgeInsets.all(10),//   itemCount: list.length,//   gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(//     maxCrossAxisExtent: 200,//     crossAxisSpacing: 10,//     childAspectRatio: 1,//   ),//   itemBuilder: initList,// );
}

http://www.lryc.cn/news/2396548.html

相关文章:

  • 【深度学习】18. 生成模型:Variational Auto-Encoder(VAE)详解
  • NodeJS全栈开发面试题讲解——P6安全与鉴权
  • C# 密封类和密封方法
  • 为什么badmin reconfig以后始终不能提交任务
  • 解决Window10上IP映射重启失效的问题
  • 力扣刷题(第四十四天)
  • MyBatis-Plus高级用法:最优化持久层开发
  • c++之循环
  • python h5py 读取mat文件的<HDF5 object reference> 问题
  • linux命令 systemctl 和 supervisord 区别及用法解读
  • Spring Boot + MyBatis 实现的简单用户管理项目的完整目录结构示例
  • NodeJS全栈开发面试题讲解——P5前端能力(React/Vue + API调用)
  • [001]从操作系统层面看锁的逻辑
  • 初识 Pytest:测试世界的智能助手
  • stm32 + ads1292心率检测报警设置上下限
  • 项目练习:element ui 的icon放在button的右侧
  • 性能诊断工具AWR配置策略与报告内容解析
  • Tailwind CSS 实战,基于 Kooboo 构建 AI 对话框页面(三):实现暗黑模式主题切换
  • OleDbParameter.Value 与 DataTable.Rows.Item.Value 的性能对比
  • Unity3D ET框架游戏脚本系统解析
  • 函数的定义、调用、值传递、声明、非安全函数
  • MySQL 8.0 OCP 英文题库解析(十一)
  • 机器学习算法-k-means
  • ADQ36-2通道2.5G,4通道5G采样PXIE
  • LLM:decoder-only 思考
  • 数字创新智慧园区建设及运维方案
  • 【科研绘图系列】R语言绘制森林图(forest plot)
  • Springcloud Alibaba自定义负载均衡详解
  • 深度学习---负样本训练
  • SpringAI+DeepSeek大模型应用开发实战