前言
Flutter的GridView网格组件学习笔记
GridView网格组件
生成网格
通过定义每行格子数量生成网格
crossAxisCount
:定义每行格子总数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| import 'package:flutter/material.dart';
void main() { runApp(MaterialApp( home: Scaffold( appBar: AppBar( title: const Text("文本内容"), ), body: const App(), ), )); }
class App extends StatelessWidget { const App({super.key});
@override Widget build(BuildContext context) { return GridView.count( crossAxisCount: 3, children: const [ Icon(Icons.home), Icon(Icons.home), Icon(Icons.home), Icon(Icons.home), Icon(Icons.home), Icon(Icons.home), ], ); } }
|
通过定义每个格子宽度生成网格
maxCrossAxisExtent
:定义每个格子的最大宽度,并不是真实的宽度,这个宽度用于决定每行有多少个格子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| import 'package:flutter/material.dart';
void main() { runApp(MaterialApp( home: Scaffold( appBar: AppBar( title: const Text("文本内容"), ), body: const App(), ), )); }
class App extends StatelessWidget { const App({super.key});
@override Widget build(BuildContext context) { return GridView.extent( maxCrossAxisExtent: 180, children: const [ Icon(Icons.home), Icon(Icons.home), Icon(Icons.home), Icon(Icons.home), Icon(Icons.home), Icon(Icons.home), ], ); } }
|
指定格子间距
crossAxisSpacing
:指定水平方向的间距
mainAxisSpacing
:指定垂直方向的间距
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import 'package:flutter/material.dart';
void main() { runApp(MaterialApp( home: Scaffold( appBar: AppBar( title: const Text("文本内容"), ), body: const App(), ), )); }
class App extends StatelessWidget { const App({super.key});
@override Widget build(BuildContext context) { return GridView.count( crossAxisCount: 3, crossAxisSpacing: 10, mainAxisSpacing: 10, ); } }
|
指定格子内边距
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import 'package:flutter/material.dart';
void main() { runApp(MaterialApp( home: Scaffold( appBar: AppBar( title: const Text("文本内容"), ), body: const App(), ), )); }
class App extends StatelessWidget { const App({super.key});
@override Widget build(BuildContext context) { return GridView.count( crossAxisCount: 3, padding: const EdgeInsets.all(10), ); } }
|
指定格子宽高比
childAspectRatio
:宽高比,默认值为1,大于1时表示横向长方形,小于1时表示纵向长方形
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import 'package:flutter/material.dart';
void main() { runApp(MaterialApp( home: Scaffold( appBar: AppBar( title: const Text("文本内容"), ), body: const App(), ), )); }
class App extends StatelessWidget { const App({super.key});
@override Widget build(BuildContext context) { return GridView.count( crossAxisCount: 3, childAspectRatio: 0.7, ); } }
|
通过build()方法遍历数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| import 'package:flutter/material.dart';
void main() { runApp(MaterialApp( home: Scaffold( appBar: AppBar( title: const Text("文本内容"), ), body: App(), ), )); }
class App extends StatelessWidget { List<int> list = []; App({Key? key}) : super(key: key) { for (var i = 0; i < 20; i++) { list.add(i); } }
@override Widget build(BuildContext context) { return GridView.builder( itemCount: list.length, gridDelegate: const SliverGridDeleteWithFixedCrossAxisCount( crossAxisSpacing: 10, mainAxisSpacing: 10, ), itemBuilder: (context, index) { return ListTile( title: Text("${list[index]}"), ); } ); } }
|
完成
参考文献
哔哩哔哩——筱筱知晓