多子元素组件有很多,其中常用的有Scaffold、AppBar、Row、Column、ListView、GridView、CustomScrollView、Flex、Wrap、Flow等。

1.Scaffold

Scaffold是基于Material Design可视化布局的结构,也是Flutter提供的标准化布局容器。其结构体如下:

Scaffold(appBar: //顶部导航栏body: //界面内容floatingActionButton: //右下角按钮bottomNavigationBar://底部菜单drawer://侧滑菜单)

2.AppBar

AppBar是顶部导航栏,有leading、actions、title属性。其结构体如下:

AppBar(leading: //左边区域,一般作为返回按钮、侧滑菜单按钮和图标等title: //中间区域,如果appbar展示不下,会优先挤压title,一般用于界面标题actions: //右边区域,一般用作搜索按钮)

3.Row和Column

Row和Column属性线性布局,Row是行多子元素组件,Column是列多子元素组件。它们有如下属性:

属性 说明
crossAxisAlignment 与组件方向垂直轴的对齐方式
mainAxisAlignment 主轴方向对齐方式
textDirection 布局的顺序默认是从左到右(从上到下)
mainAxisSize max表示尽可能多的占用水平方向位置,min相反
children 子组件数组
     Row(// mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.end,mainAxisSize: MainAxisSize.max,textDirection: TextDirection.ltr,children: <Widget>[Container(width: 100,height: 100,color: Colors.yellow,alignment: Alignment.center,child: ListView(itemExtent: 30,scrollDirection: Axis.vertical,children: const [Text('text1'),Text('text2'),Text('text3'),Text('text4'),Text('text5'),],),),Container(width: 100,height: 80,color: Colors.blue,alignment: Alignment.center,child: ListView.builder(itemExtent: 30,itemCount: 20,itemBuilder: (context, position) {if (position == 2) {return const Text('我是二货');}return Text('我有$position 个冰棍');}),),Container(width: 100,height: 100,color: Colors.green,alignment: Alignment.center,child: ListView.separated(itemBuilder: (context, position) {if (position == 2) {return const Text('我是二货');}return Text('我有$position 个冰棍');},separatorBuilder: (context, position) {return const Divider(height: 1.0, color: Colors.grey);},itemCount: 20),),Container(width: 100,height: 100,color: Colors.white,alignment: Alignment.center,child: ListView.custom(scrollDirection: Axis.vertical,childrenDelegate: SliverChildBuilderDelegate((BuildContext context, int position) {return Container(height: 20.0,alignment: Alignment.center,color: position % 2 == 1 ? Colors.green : Colors.yellow,child: Text('$position'),);}, childCount: 50),),)])

4.ListView

Flutter中的ListView与Android中ListView类似,都是线性列表组件。ListView常用的创建方式有3种,如下:
(1)ListView

ListView(itemExtent:20,//子组件的高度children:<widget>[Text('item0'),Text('item1'),Text('item2'),Text('item3'),....]
)

(2)ListView.builder

ListView.builder(itemExtent:20,itemCount:5,itemBuilder:(context,position){return Text('第$position个条目’);}
)

(3)ListView.separated

ListView.separated(itemBuilder: (context, position) {if (position == 2) {return const Text('我是二货');}return Text('我有$position 个冰棍');},separatorBuilder: (context, position) {return const Divider(height: 1.0, color: Colors.grey);},itemCount: 20)

5.CustomMultiChildLayout

CustomMultiChildLayout是一个多节点、自定义布局组件,通过提供的delegate可以实现控制节点的位置以及尺寸。代码如下:

class _MyLayoutDelegate extends MultiChildLayoutDelegate {static const String layoutTitle='layout_bar';static const String body = 'body';@overridevoid performLayout(Size size) {Size layoutSize = layoutChild(layoutTitle,BoxConstraints(maxHeight: size.height, maxWidth: size.width));positionChild(layoutTitle, const Offset(0, 0));layoutChild(body, BoxConstraints.tight(Size(size.width, size.height)));positionChild(body, Offset(layoutSize.width, layoutSize.height));}@overridebool shouldRelayout(covariant MultiChildLayoutDelegate oldDelegate) {return false;}
}
 Scaffold(appBar: AppBar(title: const Text("ListWheelScrollView Example"),leading: const Text('leading'),actions: [IconButton(onPressed: () => {print('add'),},icon: const Icon(Icons.add)),IconButton(onPressed: () => {print('delete'),},icon: const Icon(Icons.delete)),],),body: CustomMultiChildLayout(delegate: _MyLayoutDelegate(),children: [LayoutId(id: _MyLayoutDelegate.layoutTitle, child: Text('这是title')),LayoutId(id: _MyLayoutDelegate.body, child: Text('是body'))],),)

6.IndexedStack

IndexedStack继承Stack,通过index属性可以直接切换它的子组件。开发中,我们可以用IndexedStack切换界面,但是IndexedStack切换是没有任何动画的。

IndexedStack(index: 1,alignment: Alignment.center,children: const [Text('第一个Text'),Text('第二个Text'),Text('第三个Text'),],)

7.Wrap

Wrap是自适应布局组件,Wrap组件可以替代Row组件,当一行显示不全时,会自动进行换行处理。

 Wrap(spacing: 10,runSpacing: 5,children: const [Text('苹果',style: TextStyle(fontSize: 50,color: Colors.blue),),Text('西瓜',style: TextStyle(fontSize: 50,color: Colors.green),),Text('香蕉',style: TextStyle(fontSize: 50,color: Colors.red),),Text('荔枝',style: TextStyle(fontSize: 50,color: Colors.yellow),),Text('葡萄',style: TextStyle(fontSize: 50,color: Colors.orange),),Text('哈密瓜',style: TextStyle(fontSize: 50,color: Colors.purpleAccent),),],)

Flutter学习笔记 --多子元素组件相关推荐

  1. Flutter学习笔记--Gridview网格组件制作相册

    Flutter学习笔记–Gridview网格组件制作相册 效果: GridView可以构建一个二维网格列表,其官方定义参考: https://book.flutterchina.club/chapte ...

  2. Flutter学习笔记(10)--容器组件、图片组件

    如需转载,请注明出处:Flutter学习笔记(10)--容器组件.图片组件 上一篇Flutter学习笔记(9)--组件Widget我们说到了在Flutter中一个非常重要的理念"一切皆为组件 ...

  3. Flutter学习笔记(18)--Drawer抽屉组件

    如需转载,请注明出处:Flutter学习笔记(18)--Drawer抽屉组件 Drawer(抽屉组件)可以实现类似抽屉拉出和推入的效果,可以从侧边栏拉出导航面板.通常Drawer是和ListView组 ...

  4. Flutter学习笔记 —— 完成一个简单的新闻展示页

    Flutter学习笔记 -- 完成一个简单的新闻展示页 前言 思路分析 案例代码 结束语 上图 前言 刚学Flutter不久,今天我们来看看如何使用 Container & ListView实 ...

  5. CSS学习笔记--浮动元素由于浏览器页面缩小而被挤到下面的解决方法

    CSS学习笔记--浮动元素由于浏览器页面缩小而被挤到下面的解决方法 参考文章: (1)CSS学习笔记--浮动元素由于浏览器页面缩小而被挤到下面的解决方法 (2)https://www.cnblogs. ...

  6. vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值?

    vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值? 文章目录 vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值? 什么是组件? 为什么要使用组件? 如何使用 ...

  7. selenium学习笔记之元素定位

    selenium学习笔记之元素定位 Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样. 首先需要创建浏览器驱动: from sele ...

  8. Flutter学习笔记(一)

    Flutter学习笔记(一) 学习前言 dart安装 vscode配置 持续更新中 学习前言 最近准备学习Flutter,参考B站 Dart Flutter教程_2022精讲Dart Flutter3 ...

  9. Flutter学习笔记(二)登陆注册界面的实现

    Flutter学习笔记(二)登陆注册界面的实现 简单的登录和注册界面的布局 SharedPreferences存储数据 页面路由和参数传递的心得 这几天按照顺序先完成了登录和注册的页面,没有什么特别的 ...

最新文章

  1. oracle第二章数据的运用,第二章:oracle_sql语句之限制(where子句)和排列数据(order by子句)...
  2. 实验0 了解和熟悉操作系统
  3. pacman安装ubuntu_Ubuntu如何安装pacman
  4. parcelable 缺点_成都金牛区茶道炭优缺点-兴木华木炭
  5. 小功能 获取一段汉字的拼音首字母
  6. php对象里面存对象,PHP:在$ _SESSION中存储'对象'
  7. ES6第一节:开发环境的搭建
  8. 一文解读光纤收发器单模和多模的区别!
  9. 蓝桥杯评分标准_新闻 | 人工智能学院创新创业实践中心开展蓝桥杯国赛经验分享会...
  10. 用html编写勾股定理,一种勾股定理演示器的制作方法
  11. LA2218半平面交
  12. 软件测试必读的经典书籍
  13. 综合项目之闪讯破解(二)之 如何用C++建立PPPOE连接
  14. Hi3519V101开发(二)
  15. 如何将网易云音乐的歌单同步到spotify
  16. android界面UI美化:沉浸模式、全透明或半透明状态栏及导航栏的实现
  17. Node.js 学习之数据库与身份认证
  18. 源代码安全检测工具PC_Lint与ITS4实例 zz
  19. cout 和cerr的区别
  20. Red Hat 认证工程师(RHCE)

热门文章

  1. 【diannaoxitong】支付宝余额宝是什么?阿里巴巴余额宝功能介绍
  2. 雅百特拟对外投资加码光伏主业
  3. LED大屏千兆光纤收发器利亚德洲明LED显示屏诺瓦灵星雨卡莱特凯视达光电转换器
  4. 简单提升微信打开浏览器速度(启用原生 WebView 支持)
  5. 2020京东校园招聘笔试编码题小分享--队列分组排序
  6. java语音验证码_Java实现发送手机短信语音验证功能代码实例
  7. http://www.discuz.net/forum.php?mod=viewthreadtid=611716page=1authorid=13759
  8. openGL之API学习(一三九)求垂直向量
  9. 周小四:秉持技术匠心走向世界舞台
  10. 你以为有钱人不快乐?他们都是在骗你的