1. 程式人生 > 實用技巧 >前端入門flutter-07GridView元件 以及動態GridView

前端入門flutter-07GridView元件 以及動態GridView

  大道不同,卻又總是殊途同歸,GridView元件類似於前端的flex彈性佈局:

  

  1 import 'package:flutter/material.dart';
  2 import 'res/listData.dart';
  3 
  4 void main(){
  5   runApp(new MyApp());
  6 
  7 }
  8 
  9 /*
 10       GridView :
 11       通過GridView.count實現網格佈局
 12       通過GridView.builder實現網格佈局
 13       scrollDirction  Axis 滾動方法
14 padding EdgeInsetsGeometry 內邊距 15 resolve bool 元件反向排序 16 crossAxisSpacing double 水平子Widget之間間距 17 mainAxisSpacing double垂直子Widget之間間距 18 crossAxisCount int 一行的Widget數量 19 childAspectRatio double 子Wiget寬高比例 20 */ 21 22 class MyApp extends StatelessWidget{
23 @override 24 Widget build(BuildContext context) { 25 // TODO: implement build 26 return MaterialApp( 27 home:Scaffold( 28 appBar: AppBar(title: Text("GridView元件、動態GridView")), 29 body: HomeContent(), 30 ), 31 // 主題 32 theme: ThemeData(primarySwatch: Colors.deepOrange),
33 ); 34 } 35 } 36 37 //GridView.builder 38 class HomeContent extends StatelessWidget{ 39 Widget _getListData(context,index){ 40 return Container( 41 decoration: BoxDecoration( 42 border: Border.all(width:1.0,color: Colors.green) 43 ), 44 child: Column( 45 children: <Widget>[ 46 Image.network(listData[index]['imageUrl'],height: 100.0,), 47 SizedBox(height:10.0), 48 Text(listData[index]['title'], 49 textAlign: TextAlign.center, 50 style:TextStyle(fontSize: 20), 51 ) 52 ], 53 ), 54 ); 55 } 56 57 58 // 59 60 @override 61 Widget build(BuildContext context) { 62 // TODO: implement build 63 return GridView.builder( 64 gridDelegate:SliverGridDelegateWithFixedCrossAxisCount( 65 crossAxisCount: 2,//一行的Widget的數量 66 crossAxisSpacing:10.0,//水平子Widget之間間距 67 mainAxisSpacing: 10.0,//垂直子Widget之間間距 68 ) , 69 itemCount: listData.length, 70 itemBuilder: this._getListData, 71 ); 72 } 73 } 74 75 76 //使用外部資料 77 // class HomeContent extends StatelessWidget{ 78 // List<Widget> _getListData(){ 79 // var template = listData.map((value){ 80 // return Container( 81 // decoration: BoxDecoration( 82 // border: Border.all(width:1.0,color: Colors.green) 83 // ), 84 // child: Column( 85 // children: <Widget>[ 86 // Image.network(value['imageUrl'],height: 100.0,), 87 // SizedBox(height:10.0), 88 // Text(value['title'], 89 // textAlign: TextAlign.center, 90 // style:TextStyle(fontSize: 20), 91 // ) 92 // ], 93 // ), 94 // ); 95 // }); 96 // 97 // 98 // return template.toList(); 99 // } 100 // 101 // @override 102 // Widget build(BuildContext context) { 103 // // TODO: implement build 104 // return GridView.count( 105 // crossAxisCount: 2,//一行的Widget的數量 106 // crossAxisSpacing:10.0,//水平子Widget之間間距 107 // mainAxisSpacing: 10.0,//垂直子Widget之間間距 108 // // childAspectRatio: 0.7,//寬度和高度的比例 109 // padding: EdgeInsets.all(2.0), 110 // children: this._getListData() 111 // 112 // 113 // 114 // ); 115 // } 116 // } 117 118 // class HomeContent extends StatelessWidget{ 119 // List<Widget> _getListData(){ 120 // List<Widget> list = new List(); 121 // 122 // for(var i = 0;i<20;i++){ 123 // list.add(Container( 124 // // height: 400.0,//設定無效 125 // decoration: new BoxDecoration( 126 // // border: new Border.all(color: Color(0xFFFF0000), width: 0.5), 127 // color: Color(0xFF9E9E9E), 128 // // borderRadius: new BorderRadius.circular((20.0)) 129 // ), 130 // alignment: Alignment.center, 131 // // padding: EdgeInsets.all(2.0), 132 // // margin: EdgeInsets.all(2.0), 133 // 134 // child: Text( 135 // "這是第$i條資料", 136 // style:TextStyle(color:Colors.red, 137 // 138 // ), 139 // // 140 // ), 141 // 142 // )); 143 // } 144 // return list; 145 // } 146 // 147 // @override 148 // Widget build(BuildContext context) { 149 // // TODO: implement build 150 // return GridView.count( 151 // crossAxisCount: 3,//一行的Widget的數量 152 // crossAxisSpacing:2.0,//水平子Widget之間間距 153 // mainAxisSpacing: 2.0,//垂直子Widget之間間距 154 // childAspectRatio: 0.7,//寬度和高度的比例 155 // padding: EdgeInsets.all(2.0), 156 // children: this._getListData() 157 // 158 // 159 // 160 // ); 161 // } 162 // } 163 164 // class HomeContent extends StatelessWidget{ 165 // @override 166 // Widget build(BuildContext context) { 167 // // TODO: implement build 168 // return GridView.count( 169 // crossAxisCount: 3, 170 // children: <Widget>[ 171 // 172 // Text("this is a pig"), 173 // Text("this is a pig"), 174 // Text("this is a pig"), 175 // Text("this is a pig"), 176 // Text("this is a pig"), 177 // Text("this is a pig"), 178 // Text("this is a pig"), 179 // Text("this is a pig"), 180 // Text("this is a pig"), 181 // Text("this is a pig"), 182 // Text("this is a pig"), 183 // Text("this is a pig"), 184 // Text("this is a pig"), 185 // Text("this is a pig"), 186 // Text("this is a pig"), 187 // Text("this is a pig"), 188 // Text("this is a pig"), 189 // Text("this is a pig"), 190 // Text("this is a pig"), 191 // Text("this is a pig"), 192 // ], 193 // ); 194 // } 195 // }

效果圖,如下: