首页 > 其他分享 >7、Flutter GridView网格布局组件

7、Flutter GridView网格布局组件

时间:2023-11-15 19:14:59浏览次数:29  
标签:Widget GridView const 网格 key return Flutter

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

1、可以通过GridView.count 实现网格布局    一行的 Widget 数量
class HomePage extends StatelessWidget {
const HomePage({Key? key}) : super(key: key);
List<Widget> _getListData() {
List<Widget> list = [];
for (var i = 0; i < 200; i++) {
list.add(Container(
alignment: Alignment.center,
color: Colors.blue,
child: Text(
'这是第$i条数据',
style: const TextStyle(color: Colors.white, fontSize: 20),
),
// height: 400, //设置高度没有反应
));
}
return list;
}
@override
Widget build(BuildContext context) {
return GridView.count(
crossAxisSpacing: 10.0, //水平子 Widget 之间间距
mainAxisSpacing: 20.0, //垂直子 Widget 之间间距
padding: const EdgeInsets.all(10),
crossAxisCount: 2, //一行的 Widget 数量
childAspectRatio: 2, //宽度和高度的比例
children: _getListData(),
);
}
}
2、可以通过GridView.extent 实现网格布局    视图中每个单元格在网格交叉轴上最大的尺寸
class HomePage5 extends StatelessWidget {
const HomePage5({Key? key}) : super(key: key);
List<Widget> _getListData() {
List<Widget> list = [];
for (var i = 0; i < 200; i++) {
list.add(Container(
alignment: Alignment.center,
color: Colors.blue,
child: Text(
'这是第$i条数据',
style: const TextStyle(color: Colors.white, fontSize: 20),
),
// height: 400, //设置高度没有反应
));
}
return list;
}
@override
Widget build(BuildContext context) {
return GridView.extent(
crossAxisSpacing: 10.0, //水平子 Widget 之间间距
mainAxisSpacing: 20.0, //垂直子 Widget 之间间距
padding: const EdgeInsets.all(10),
childAspectRatio: 2, //宽度和高度的比例
maxCrossAxisExtent: 400, //视图中每个单元格在网格交叉轴上最大的尺寸
children: _getListData(),
);
}
}
3、通过GridView.builder实现动态网格布局
(1)SliverGridDelegateWithFixedCrossAxisCount         Flutter中用于创建具有固定列数的网格布局
class MyApp4 extends StatelessWidget {
  MyApp4({Key? key}) : super(key: key) {
    print(ListText);
  }
  Widget _initListData(context, index) {
      return Container(
        decoration: BoxDecoration(
          color: Color.fromARGB(255, 181, 192, 27), //背景颜色
          border: Border.all(
            //边框
          color: Colors.red, //边框颜色
          width: 1.0),
          borderRadius: BorderRadius.circular(20), //圆角
        ),
        child: Column(children: [
          Image.network(ListText[index]["imageUrl"],height: 100,),
          const SizedBox(height: 10,),
           Text(ListText[index]["title"]),
        ]), 
      );
  }
  @override
  Widget build(BuildContext context) {
    return GridView.builder(
      itemCount: ListText.length, //数组长度
      gridDelegate:  const SliverGridDelegateWithFixedCrossAxisCount(
      crossAxisSpacing: 10.0, //水平子 Widget 之间间距
      mainAxisSpacing: 10.0, //垂直子 Widget 之间间距
      crossAxisCount: 2, //一行的 Widget 数量
      childAspectRatio: 2, //宽度和高度的比例
    ),
    itemBuilder: _initListData
    );
  }
}
(2)SliverGridDelegateWithMaxCrossAxisExtent     单个网格项目或列表项的最大宽度
class MyApp5 extends StatelessWidget {
  MyApp5({Key? key}) : super(key: key) {
    print(ListText);
  }
  Widget _initListData(context, index) {
      return Container(
        decoration: BoxDecoration(
          color: Color.fromARGB(255, 181, 192, 27), //背景颜色
          border: Border.all(
            //边框
          color: Colors.red, //边框颜色
          width: 1.0),
          borderRadius: BorderRadius.circular(20), //圆角
        ),
        child: Column(children: [
          Image.network(ListText[index]["imageUrl"],height: 100,),
          const SizedBox(height: 10,),
           Text(ListText[index]["title"]),
        ]),
        
      );
  }
  @override
  Widget build(BuildContext context) {
    return GridView.builder(
      itemCount: ListText.length, //数组长度
      gridDelegate:  const SliverGridDelegateWithMaxCrossAxisExtent(
      crossAxisSpacing: 10.0, //水平子 Widget 之间间距
      mainAxisSpacing: 10.0, //垂直子 Widget 之间间距
      childAspectRatio: 2, //宽度和高度的比例
      maxCrossAxisExtent: 800,  //这个属性的作用是定义单个网格项目或列表项的最大宽度 必须
    ),
    itemBuilder: _initListData
    );
  }
}

 

标签:Widget,GridView,const,网格,key,return,Flutter
From: https://www.cnblogs.com/xbinbin/p/17822511.html

相关文章

  • android开发Flutter Text自动换行实现
    flutter自动换行处理flutter自动换行有几种场景:column中,row中在Column中的Text不用任何处理,能够自动换行。在Row中的Text需要用Expanded包裹。因为文字是水平方向排放的,和Row的计算规则冲突,需要使用Expanded包裹,表示剩下的给Text,Text自然知道自身宽度,才能实现自动换行。Row(cro......
  • 【Flutter】一文读懂混入类Mixin
    【Flutter】一文读懂混入类Mixin基本介绍Mixin是一种有利于代码复用,又避免了多继承的解决方案。Mixin是面向对象程序设计语言中的类,提供了方法的实现,其他类可以访问Mixin类的方法而不必成为其子类;Mixin为使用它的Class类提供额外的功能,但自身却不单独使用(不能单独生成......
  • Flutter网络请求与dio实战指南
    当在Flutter中进行网络请求时,dio是一个强大且常用的网络请求库。以下是使用dio实现网络请求的基本配置,包括GET和POST请求,以及文件上传和下载的功能。首先,确保在pubspec.yaml文件中添加dio库的依赖:dependencies:#https://github.com/flutterchina/diodio:^5.3.3然后运行flut......
  • 现代移动应用开发的未来非Flutter莫属!
    前言Flutter是一种开源的移动应用开发框架,由Google推出,为开发者提供了一种全新的方式来构建跨平台的高性能应用程序。随着移动应用市场的快速发展和技术的不断进步,Flutter被认为是现代移动应用开发的未来。Flutter优势首先,Flutter具备卓越的性能和响应速度它采用了自己的渲染引擎,名......
  • Flutter CocoaPods 报错
    报错如下Warning:CocoaPodsnotinstalled.Skippingpodinstall.CocoaPodsisusedtoretrievetheiOSandmacOSplatformside'splugincodethatrespondstoyourpluginusageontheDartside.WithoutCocoaPods,pluginswillnotworkoniOSormacOS.Fo......
  • 基于 Flutter + 百度人工智能 开发出的一款测颜值的 App
    Flutter颜值大师基于Flutter+百度人工智能开发出的一款测颜值的App。最重要的一点:一颗满怀学习热情的心项目核心知识点1.渲染头部区域//头部AppBar区域appBar:AppBar(title:Text("人脸识别",//设置标题文字样式style:TextStyle(fontSize:16,fontWe......
  • Flutter-dart基础之Map
    Map定义不指定泛型varmap1={'aa':'aaa','bb':'bbb','cc':true};//直接赋值初始值print(map1);//{aa:aaa,bb:bbb,cc:true}Mapmap2={'a':'a1','b':'b1'};//直接赋值初始值......
  • 初学者如何高效的学习Flutter?这份快速入门Flutter学习指南,拿走不谢
    什么是FlutterFlutter是Google推出并开源的移动端开发框架,主打跨平台、高保真、高性能。开发者可以通过Dart语言开发App,一套代码可以同时运行在iOS和Android平台。2018年12月,Google发布Flutter1.0。从那时候开始,Flutter以迅雷不及掩耳之势,迅速崛起,并稳固了其在市场上......
  • iOS项目(Swift),使用Flutter进行混合开发
    一、创建flutter_module先创建fluttermodule项目,参考官方文档,先cd至目标文件夹,执行命令为fluttercreate--templatemoduleflutter_module创建成功后,打开flutter_module项目,打开pubspec.yaml文件,添加所需的依赖 执行命令,更新依赖。执行 flutterrun 命令,生成po......
  • flutter 运行的四种模式
    Debug(调试)模式1、这是开发Flutter应用程序时最常用的模式。可以在真机和模拟器上同时运行。重要用于开发和调试阶段。2、可以进行热重载,即在不重新启动应用程序的情况下实时更新代码。3、应用程序会包含用于调试和开发的额外信息和工具(debugging信息、debuggeraids(比如......