7. Flutter——GridView组件

本文介绍了Flutter中用于网格布局的GridView组件,详细解析了其常用属性,包括scrollDirection、padding、crossAxisCount、childAspectRatio等,并通过示例展示了GridView.count和GridView.builder两种实现方式,帮助开发者理解如何构建和定制网格布局。
摘要由CSDN通过智能技术生成

GridView 组件的常用参数

  • 当数据量很大的时候用矩阵方式排列比较清晰。此时我们可以用网格列表组件 GridView 实 现布局。

  • 常用属性:

名称类型说明
scrollDirectionAxis滚动
paddingEdgeInsetsGeometry内边距
resolvebool组件反向序列化
crossAxisSpacingdouble水平子 Widget 之间间距
mainAxisSpacingdouble垂直子 Widget 之间间距
crossAxisCountint一行的 Widget 数量
childAspectRatiodouble子 Widget 宽高比例
childrenint< Widget >[ ]
gridDelegateSliverGridDelegateWithFix edCrossAxisCount(常用) SliverGridDelegateWithMax CrossAxisExtent控制布局主要用在 GridView.builder 里面

GridView.count 实现网格布局

import'package:flutter/material.dart';
import'res/listData.dart';

voidmain()=>runApp(MyApp());

classMyAppextendsStatelessWidget{ 
	@override
	 Widgetbuild(BuildContextcontext){  
	 	returnMaterialApp( 
	 		home:Scaffold( 
	 			appBar:AppBar(title:Text('FlutterDemo')), 
	 			body:LayoutContent(), 
	 		));
	 } 
	}

classLayoutContentextendsStatelessWidget{
	List<Widget>_getListData(){ 
		vartempList=listData.map((value){ 
			returnContainer( 
				child: Column( 
					children:<Widget>[ 
						Image.network(value["imageUrl"]), 
						SizedBox(height:12),	
						Text(value["title"],										
						textAlign:TextAlign.center,
						style:TextStyle(fontSize:20)), 
						], 
					), 
				    decoration:BoxDecoration( 
				    	border:Border.all( 
				    		color:Color.fromRGBO(230,230,230,0.9), 
				    		width:1.0 
				    		) 
				    	),
					);
	}); 
	returntempList.toList();
}

@override 
Widgetbuild(BuildContextcontext){  
	returnGridView.count( 
		padding:EdgeInsets.all(20), 
		crossAxisCount:2, 
		crossAxisSpacing:20, 
		mainAxisSpacing:20,  
		children:this._getListData(), 
		); 
	}
}

GridView.builder 实现网格布局

import'package:flutter/material.dart';
import'res/listData.dart';

voidmain()=>runApp(MyApp());

classMyAppextendsStatelessWidget{ 
	@override Widgetbuild(BuildContextcontext){ 
		returnMaterialApp( 
			home:Scaffold( 
			appBar:AppBar(title:Text('FlutterDemo')), 
			body:LayoutContent(), 
			)); 
		} 
	}

classLayoutContentextendsStatelessWidget{
	Widget_getListData(context,index){ 
		returnContainer( 
			child: Column( 
				children:<Widget>[ 
					Image.network(listData[index]["imageUrl"]), 
					SizedBox(height:12), 
					Text(listData[index]["title"],
					textAlign: TextAlign.center,style:TextStyle(fontSize: 20)), 
					], 
				), 
			decoration:BoxDecoration( 
				border:Border.all( 
					color:Color.fromRGBO(230,230,230,0.9), 
					width:1.0 
				) 
			),
	);
}

@override 
Widgetbuild(BuildContextcontext){ 
	 returnGridView.builder( 
	 	itemCount:listData.length, 
	 	gridDelegate:SliverGridDelegateWithFixedCrossAxisCount(
	 			 //横轴元素个数 
	 			 crossAxisCount:2, 
	 			 //纵轴间距 
	 			 mainAxisSpacing:20.0, 
	 			 //横轴间距 
	 			 crossAxisSpacing:10.0, 
	 			 //子组件宽高长度比例 
	 			 childAspectRatio:1.0 
	 		), 
		itemBuilder:this._getListData, 
	  ); 
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值