跳转至

布局组件


Container

背景,边框,或阴影,外边距、内边距,尺寸等

参数 描述
padding 内边距
margin 外边距
child 组件
color 颜色
width 宽度
height 高度
decoration 样式
alignment 对齐方式
宽度高度无限

width: double.infinity

height: double.infinity

constraints: BoxConstraints(
    minWidth: 200, // 最小宽度
    minHeight:200,
    maxWidth: 500, // 最大宽度
    maxHeight:500,
),
BoxDecoration(
  color: Colors.red,  // 颜色

  // 图片
  image: DecorationImage(
    image: AssetImage('assets/image/02.jpeg'),
    fit: BoxFit.cover, // 填充方式
  ),

  // 边框
  border: Border.all(  
    width: 3,
    color: Colors.red,
  ),

  borderRadius: BorderRadius.all(Radius.circular(12))  // 圆角

  // 渐变
  gradient: LinearGradient(  
    colors: [
        Colors.red,
        Colors.blue,
    ],
  ),

  // 阴影
  boxShadow: [
    BoxShadow(color: Color(0xffcfd2d5), blurRadius: 15)
  ],
)

水平 与 垂直

主轴

mainAxisAlignment // 主轴

mainAxisAlignment: MainAxisAlignment.spaceEvenly // 主轴 空间均匀

mainAxisAlignment: MainAxisAlignment.center // 剧中

交叉轴

crossAxisAlignment // 交叉轴

Column

垂直

Row

水平


Center

剧中

Center(
  child: ,
)

ListTile

参数 描述
onLongPress 点击事件
演示
ListTile(
  leading: CircleAvatar(
    backgroundImage: NetworkImage(imageUrl),  // 将图像或图标添加到列表的开
  ),
  title: Text('Horse'),  // 标题
  trailing: Icon(Icons.keyboard_arrow_right),  // 列表的末尾放置一个图像
  subtitle: Text('A strong animal'),  副标题是标题下面较小的文本
)

Expanded

填满整个区域, 如果多个 Expanded 会让子组件填满区域

参数 描述
child 组件
flex 大小占比

GridView

网格, 自动支持滚动.


ListView

支持滚动

参数 备注
children 组件
physics 滚动效果

ListView.builder

参数 备注
padding 内边距
itemBuilder 组件
itemCount 放入组件的数量
physics 滚动效果
代码
ListView.builder(
  padding: const EdgeInsets.all(16.0),
  itemBuilder: /*1*/ (context, i) {
    if (i >= _suggestions.length) {
      // 滑动到底时执行
    }

    // 返回的组件
    return Text(
        _suggestions[i].asPascalCase,
      );
  },
)

Stack

层叠布局

参数 备注
child 组件
// 子组件剧中
alignment:Alignment.center

// 未定位widget占满Stack整个空间
fit: StackFit.expand

Align

布局 可以指定放置方向

参数 备注
child 组件
alignment Alignment
Alignment

Alignment.topCenter 上方剧中

Alignment.bottomCenter 下方剧中


Positioned

绝对定位

参数 备注
child 组件
left
top
right
bottom
width 高度
height 宽度

Card

参数 备注
child 组件
color 颜色
shadowColor 阴影颜色
elevation 阴影高度
margin 外边距
shape 边框样式 RoundedRectangleBorder()

SingleChildScrollView

滚动布局

参数 备注
child 组件
padding 内边距
reverse 初始滚动位置 false 头 true 尾
physics 滚动效果
scrollDirection 水平滚动 或 垂直滚动
scrollDirection

Axis.horizontal 水平滚动

Axis.vertical 垂直滚动


SafeArea

解决异形屏幕 适应屏幕

参数 备注
child 组件

Padding

内边距

参数 备注
child 组件
padding 内边距

SizedBox

盒子

参数 备注
child 组件
width 宽度
height 高度

Flex


Wrap

流式布局


GridView


LayoutBuilder

相应试布局

LayoutBuilder(
  builder: (context, constraints) {
    if (constraints.maxWidth > 700) {
      return tRow;  // 返回组件
    } else {
      return tRow2;  // 返回组件
    }
  },
)
备注

constraints.maxWidth 获取到屏幕宽度


Slivers

CustomScrollView

一个列表

参数 描述
slivers Slivers组件 存放

SliverToBoxAdapter

可以将普通组件转成 Slivers 组件

参数 描述
child 组件

SliverList

列表

SliverChildBuilderDelegate

可以动态加载

SliverList(
    delegate: SliverChildBuilderDelegate((context, index) {
        return Container(
            height: 200,
            color: Colors.primaries[index % 18],
        );
    },
    childCount: 50,  // 显示多少个
    ),
),

SliverChildListDelegate

无法动态加载

SliverList(
  delegate: SliverChildListDelegate(
      [
        Text('111'),
        Text('111'),
        Text('111'),
        Text('111'),
      ]
  ),
),

SliverFixedExtentList

未学习

SliverGrid

网格

SliverGrid(
    gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
        crossAxisCount: 3  // 每行显示几个
    ),
    delegate: SliverChildBuilderDelegate((context, index) {
        return Container(
            height: 400,
            color: Colors.primaries[index % 18],
        );
    },
    childCount: 50,  // 显示多少个
    ),
)

SliverAppBar

顶部 向下滑动有隐藏效果

SliverAppBar(
  title: Text('测试'),
  floating: true,  // 漂浮
  pinned: true,  // 固定
),

SliverFillRemaining

填满视窗剩余部分

参数 描述
child 组件

Spacer

显示空间大小

参数 描述
flex 占据空间比例 int