【Flutter】常用布局容器二

2019-03-20  本文已影响0人  diva_dance

Row and Column

Row 水平布局
Column 垂直布局
基本属性:

image
image

GridView

return GridView.count(
  scrollDirection: Axis.vertical,
  crossAxisCount: 3,
  mainAxisSpacing: 5,
  crossAxisSpacing: 5,
  childAspectRatio: 1,
  children: <Widget>[
  ],
);

通过这个组件可以很方便写九宫格布局等,但是这么设置子组件的宽高设置会不生效。


image

属性

ListView

常规写法

return ListView(
  reverse: false,
  padding: const EdgeInsets.all(30.0),
  scrollDirection: Axis.vertical,
  children: <Widget>[
    Container(
      width: 100,
      height: 100,
      child: Text('text-1'),
    ),
  ],
);

这种写法会一次性加载列表 ,没有懒加载,可以使用 ListView.builder 只渲染显示部分。

return ListView.builder(
  itemExtent: 80, // 预置高度,如果不设置依赖子控件的高
  itemCount: 10, // 如果小于 itemBuilder  出来的 items 数量,则不展示多余部分。
  itemBuilder: (context, index) {
    return Container(
      alignment: Alignment.center,
      color: index % 2 == 0 ? Colors.red : Colors.blue,
      child: Text(index.toString()),
    );
  }
);

Expanded

return new Expanded(); // 会报错,必须作用在 Row, Column,flex 中。

return Row(
  children: <Widget>[
    Text('text-1'),
    new Expanded(child: Text('expaned')),
    Text('text-2')
  ],
);

效果如下:

image

撑开剩余的空间。

ExpansionTile 手风琴

return ExpansionTile(
  leading: CircleAvatar(
    backgroundColor: Colors.blue,
    radius: 20,
  ),
  title: Text('select'),
  children: <Widget>[
    GestureDetector(
      onTap: _controller,
      child: Container(
        height: 44,
        child: Text('click'),
      ),
    ),
  ],
);
上一篇 下一篇

猜你喜欢

热点阅读