|
1 | | -``` |
2 | | - |
3 | | -class _DemoState extends State<Demo> { |
4 | | - bool loading = true; |
5 | | - String ___MD___ = _mdUrl; |
| 1 | +## ***GridView*** |
6 | 2 |
|
7 | | - @override |
8 | | - void initState() { |
9 | | - super.initState(); |
10 | | - this.initMd(); |
11 | | - } |
| 3 | +> GridView是自带滚动的二维列表组件。 |
12 | 4 | |
13 | | - initMd() async { |
14 | | - String mdStr = await FileUtils.readLocaleFile(___MD___); |
15 | | - setState(() { |
16 | | - this.___MD___ = mdStr; |
17 | | - loading = false; |
18 | | - }); |
19 | | - } |
| 5 | +### 构造方法 |
| 6 | +``` |
| 7 | +GridView({ |
| 8 | + Key key, |
| 9 | + Axis scrollDirection: Axis.vertical, |
| 10 | + bool reverse: false, |
| 11 | + ScrollController controller, |
| 12 | + bool primary, |
| 13 | + ScrollPhysics physics, |
| 14 | + bool shrinkWrap: false, |
| 15 | + EdgeInsetsGeometry padding, |
| 16 | + @required SliverGridDelegate gridDelegate, |
| 17 | + bool addAutomaticKeepAlives: true, |
| 18 | + bool addRepaintBoundaries: true, |
| 19 | + bool addSemanticIndexes: true, |
| 20 | + double cacheExtent, |
| 21 | + List<Widget> children: const [], |
| 22 | + int semanticChildCount |
| 23 | +}) |
| 24 | +``` |
| 25 | +### 进阶用法 |
| 26 | +``` |
| 27 | +GridView.builder // 动态加载,用于分页较多 |
| 28 | +GridView.count // 指定数据加载 |
| 29 | +GridView.custom |
| 30 | +GridView.extent |
| 31 | +``` |
20 | 32 |
|
21 | | - @override |
22 | | - Widget build(BuildContext context) { |
23 | | - return WidgetComp( |
24 | | - name: Demo.name, |
25 | | - codeUrl: Demo.codeUrl, |
26 | | - mdUrl: Demo.mdUrl, |
27 | | - loading: loading, |
28 | | - modelChild: (context, child, model) { |
29 | | - return [ |
30 | | - ___MD___, |
31 | | - Container( |
32 | | - color: Colors.teal.shade700, |
33 | | - alignment: Alignment.center, |
34 | | - child: Text( |
35 | | - 'Hello WorldHello WorldHello WorldHello WorldHello World', |
36 | | - style: Theme.of(context) |
37 | | - .textTheme |
38 | | - .display1 |
39 | | - .copyWith(color: Colors.white), |
40 | | - ), |
41 | | - ), |
42 | | - ]; |
43 | | - }, |
| 33 | +### 用例 |
| 34 | +* GridView.count |
| 35 | +> |
| 36 | +crossAxisCount:必填,指定列数 |
| 37 | +children: 子组件 |
| 38 | +reverse:默认false, 当为true时反转滚动方向,即上到下反转成下到上,左到右反转成右到左 |
| 39 | +controller: ScrollController类,能初始化滚动相关的属性,如位置,也能监听滚动变化 |
| 40 | +primary: 默认true, 当填充数量调试不足以产生滚动条,滚动组件时,不影响最外层滚动条,即界面不随着手势滚动。 |
| 41 | +primary: false, 且controller=null(或者ScrollContorller中的initialScrollOffset属性为0),GridView.count的数量较少不足产生滚动条时,滚动主体为最外层滚动条。 |
| 42 | +physics: ScrollPhysics类,影响视图与用户输入交互。 |
| 43 | +shrinkWrap: 默认false, 滚动视图内容展开和收缩时不重新计算视图大小,例如外层height=200, 滚动的内容可能增加了expendTile,展开后的内容超过了200高,这时候会报错,此时修改shrinkWrap=true,即滚动视图会重新计算。 |
| 44 | +scrollDirection:默认Axis.vertical.,垂直方向,可通过Axis.horizontal修改为水平方向。 |
| 45 | +mainAxisSpacing: 主轴方向间距, 主轴方向由scrollDirection确定 |
| 46 | +crossAxisSpacing: 副轴方向间距, |
| 47 | +childAspectRatio: 子元素中宽高比,宽度由ViewPort/crossAxisCount确定 |
| 48 | + |
| 49 | +``` |
| 50 | +GridView.count( |
| 51 | + crossAxisCount: 3, |
| 52 | + reverse: false, |
| 53 | + scrollDirection: Axis.vertical, |
| 54 | + controller: ScrollController( |
| 55 | + initialScrollOffset: 0.0, |
| 56 | + ), |
| 57 | + crossAxisSpacing: 10.0, |
| 58 | + mainAxisSpacing: 20.0, |
| 59 | + childAspectRatio: 2, |
| 60 | + physics: BouncingScrollPhysics(), |
| 61 | + primary: false, |
| 62 | + children: List.generate(15, (index) { |
| 63 | + return Container( |
| 64 | + decoration: BoxDecoration( |
| 65 | + border: Border.all( |
| 66 | + color: Colors.redAccent, |
| 67 | + ), |
| 68 | + ), |
| 69 | + child: Center( |
| 70 | + child: Text('Item $index', |
| 71 | + style: Theme.of(context).textTheme.headline), |
| 72 | + ), |
44 | 73 | ); |
45 | | - } |
46 | | -} |
47 | | - |
| 74 | + }, growable: false), |
| 75 | + ), |
| 76 | +); |
48 | 77 | ``` |
| 78 | + |
| 79 | +>ScrollPhysics类: |
| 80 | +* BouncingScrollPhysics,ClampingScrollPhysics,AlwaysScrollableScrollPhysics,NeverScrollableScrollPhysics |
0 commit comments