Flutter基础和实战FlutterFlutter中文社区

第一章●第六节:组件介绍<03>

2019-05-13  本文已影响20人  白晓明

【接上篇:第一章●第五节:组件介绍<02>


包装小组件

默认情况下,行或列沿其主轴占用尽可能多的空间,但如果要将子项紧密组合在一起,我们需要将mainAxisSize属性设置为MainAxisSize.min。

Row(
  children: <Widget>[
    Row(
      mainAxisSize: MainAxisSize.min,
      children: <Widget>[
        Icon(Icons.star, color: Colors.redAccent,),
        Icon(Icons.star, color: Colors.redAccent),
        Icon(Icons.star, color: Colors.redAccent),
        Icon(Icons.star),
        Icon(Icons.star),
      ],
    ),
  ],
),

嵌套行和列

布局框架允许我们根据需要进行行列嵌套。

Container(
  padding: EdgeInsets.all(20),
  child: Row(
    mainAxisAlignment: MainAxisAlignment.spaceEvenly,
    children: <Widget>[
      Row(
        children: <Widget>[
          Row(
            mainAxisSize: MainAxisSize.min,
            children: <Widget>[
              Icon(Icons.star, color: Colors.redAccent,),
              Icon(Icons.star, color: Colors.redAccent),
              Icon(Icons.star, color: Colors.redAccent),
              Icon(Icons.star),
              Icon(Icons.star),
            ],
          ),
        ],
      ),
      Text(
        "评分",
        style: TextStyle(
          color: Colors.black,
          fontWeight: FontWeight.w800,
          fontFamily: 'Roboto',
          letterSpacing: 0.5,
          fontSize: 20
        ),
      )
    ],
  ),
),
Row(
  children: <Widget>[
    Column(
      children: <Widget>[
        Icon(Icons.home),
        Row(
          children: <Widget>[
            Text("首页"),
          ],
        ),
        Row(
          children: <Widget>[
            Text("Home")
          ],
        )
      ],
    ),
    Column(
      children: <Widget>[
        Icon(Icons.account_circle),
        Row(
          children: <Widget>[
            Text("我的"),
          ],
        ),
        Row(
          children: <Widget>[
            Text("Mine")
          ],
        )
      ],
    ),
    Column(
      children: <Widget>[
        Icon(Icons.message),
        Row(
          children: <Widget>[
            Text("消息"),
          ],
        ),
        Row(
          children: <Widget>[
            Text("Message")
          ],
        )
      ],
    ),
  ],
)

从上面示例我们可以看出,五颗星和评分在一行,图标和文本在一行,并分为三列。结构树图如下:


提示:为了使代码更容易阅读,我们在书写时可以将嵌套的各个部分定义成变量或函数,在具体的使用时直接引用变量或函数即可。同时我们还可以对重复出现的代码进行封装,将其封装成一个公用的变量或函数。

常见的布局组件

Flutter拥有丰富的布局组件,以下为常用的组件,其他组件,请阅读API参考文档。
以下组件分为两类:一来自组件库的标准组件,二来自Material库的专用组件。任何应用都可以使用标准组件,但只有Material应用可以使用Material库中的组件。

标准组件
Material 组件

总目录结构

上一篇下一篇

猜你喜欢

热点阅读