flutter widget入门使用之一(基础组件)

前言

学习flutter有几个月的时间了,flutter也已经发布了1.0版本,所以自己也想把这段时间学习的东西做个总结,这里做一个入门的Widgets使用总结。网上的学习资料也有很多,希望我的文章也能对大家有所帮助。
笔者在刚开始学习flutter的时候,看着官网的介绍,却不知道代码怎么写,呈现的效果是怎样的。虽然有官方的Gallery示例代码,但是那些代码写的太复杂,对于初学者来说看的就很懵。所以我计划写这样一个项目(项目github地址),是根据flutter中文网的widgets目录来进行编写的。主要是展示出某个widget的简单使用方法,一些常用属性的介绍,显示在界面上是什么样的效果。并不过于仔细剖析一个widget的方方面面,只是作为入门。
大家在学习的时候,可以对照flutter中文网的widgets目录和运行项目以及项目代码进行学习。本项目不追求界面的美化程度,仅仅是想展现出某个widget的最简单用法。这个项目适用于刚入门想学习flutter的小伙伴。错误之处在所难免,如有发现请大家提出来,我进行修改,谢谢!
PS:flutter安装等前期准备工作在这里就不介绍了,可以直接看官网教程。下面开始第一部分。

基础组件

1. Container

Container是一个拥有绘制、定位、调整大小的widget。类似于html中的div,最简单的一个Container就是Container(),在界面中什么也不会显示。需要给他指定宽、高和颜色等才可以看得出效果,或者在Container中放了其他自身有高度的widget才会显示出来。
示例代码:
显示一个高100,宽100,颜色为Color(0xff63d6fb)的正方形

Container(
  height: 100.0,
  width: 100.0,
  color: Color(0xff63d6fb),
 ),

Container有以下常用属性:
alignment:用于定位子元素(child)的位置。
decoration:装饰,可以为Container添加边框border、边框圆角borderRadius、阴影boxShadow、背景图image、渐变色gradient、形状shape、背景色color等,注意在使用了装饰时,Container的color属性将不可用,取而代之的是装饰内的color属性。
constraints:对Container的约束,可以设置最大宽高、最小宽高。
transform:对Container进行转换。

2. Row

行布局,用于在水平方向上排列元素。如在一行中排放两个Container。
示例代码:

Row(
  mainAxisAlignment: MainAxisAlignment.spaceEvenly, // 主轴方向(横向)对齐方式
  crossAxisAlignment: CrossAxisAlignment.start, // 交叉轴(竖直)对其方式
  children: <Widget>[
    Container(
      height: 100.0,
      width: 100.0,
      color: Colors.red,
     ),
    Container(
      height: 100.0,
      width: 100.0,
      color: Colors.black,
     ),
  ],
),

Row中排列的widget不会滚动,超出一行的范围时会有溢出。如果你希望它具有滚动效果,可以考虑使用ListView,同理Column也是一样,只需要设置ListView的方向即可。

3. Column

列布局,用于在竖直方向上排列元素,如在一列中排放两个Container。
示例代码:

Column(
  mainAxisAlignment: MainAxisAlignment.spaceEvenly, // 主轴方向(竖直)对齐方式
  crossAxisAlignment: CrossAxisAlignment.start, // 交叉轴(横向)对其方式
  children: <Widget>[
    Container(
      height: 100.0,
      width: 100.0,
      color: Colors.red,
     ),
    Container(
      height: 100.0,
      width: 100.0,
      color: Colors.black,
     ),
  ],
),
4. Image

显示图片的Widget,Image能够从ImageProvider、项目资源、储存卡文件、网络和Uint8List中获取图像。这里介绍2种比较常用的方式。
示例代码:

// 加载项目资源图片
Image.asset('assets/images/1.jpg',),
// 加载网络资源图片
Image.network(
  'https://avatars2.githubusercontent.com/u/37101820?s=400&u=4c6356d8d94322a7684909af9594149d3c83d433&v=4',
  width: 200.0,
),
5. Text

显示单一格式的文本Widget,该小部件显示单个样式的文本字符串,最简单的使用是

Text('这是一行文本内容!')

下面来看一下Text的一些常用属性:
style:样式,他是一个TextStyle,里面能够设置文本内容的颜色color、文字大小fontSize、字重fontWeight、文字样式fontStyle、字体fontFamily、文字装饰decoration、文本对其方式textAlign、最大行数maxLines、单词间距wordSpacing、字符间距letterSpacing等。
示例代码:

Text(
  '更改字体颜色',
  style: TextStyle(color: Colors.red),
),
Text(
  '更改字体大小、加粗、斜体',
  style: TextStyle(
    fontSize: 26.0,
    fontWeight: FontWeight.bold,
    fontStyle: FontStyle.italic,
    ),
),
Text(
  '使用字体资源',
  style: TextStyle(fontSize: 20.0, fontFamily: 'pmzd'),
),

效果的展示及更多代码,请查看项目源码。

6. Icon

一个Material Design风格的小图标。这是flutter内置的图表库,里面包含了很多图标资源。
示例代码:

Icon(
  Icons.ac_unit,
  size: 60.0,
  color: Colors.lightBlueAccent,
),

示例代码显示了一个大小为60的雪花图标,并设置了颜色。如果想让小图标可以相应点击事件,可以使用IconButton

7. RaisedButton

Material Design风格的按钮,点击有水波纹的效果。
示例代码:

RaisedButton(
  textColor: Colors.white,
  color: Colors.blue,
  child: Text('改变文本、背景颜色'),
  onPressed: () {},
),

常用属性解析:
color:按钮背景颜色
textColor:文本颜色
disabledTextColor:不可点击状态的文本颜色
splashColor:水波纹颜色
highlightColor:按下按钮时高亮的颜色
elevation:阴影
highlightElevation:高亮时的阴影
disabledElevation:不可点击状态的阴影
child:子元素,通常放一个Text
shape:形状,可设置圆角效果
onPressed:点击事件

8. Scaffold

脚手架Widget,是Material Design布局结构的基本实现。可以看到在项目中,每一个页面的build里面都return了一个Scaffold,它包含了应用标题栏appBar、主题部分body、侧滑窗口drawer、浮动按钮floatingActionButton、底部导航栏bottomNavigationBar等,这些事实一个APP页面常用的部分。可以根据需求选择自己需要的部分。

9. Appbar

应用标题栏,由工具栏和其他小部件组成,例如TabBarFlexibleSpaceBar
在标题栏可以显示当前页面的title,前导图标leading,若页面是从其他页面跳转过来的,会默认在该页面添加一个返回上一页的leading
常用属性解析:
title:标题
centerTitle:标题是否居中
elevation:阴影
leading:前导小部件
actions:在title之后的部件,可以显示多个。
bottom:显示在应用栏底部的小部件
backgroundColor:背景颜色

10. FlutterLogo

以Widget的形式显示一个Flutter的Logo,没啥特别的。

11. Placeholder

一个绘制了一个盒子的widget,代表以后有widget将会被添加到该盒子中,就是占一个位置。可能由于个人编程习惯,觉得这个没什么太大用处
部分页面效果如下:


Container
Text
Icon

项目源码在我的GitHub flutter_widgets项目地址

项目与教程有时间会继续更新,直至整个widgets目录完成。喜欢的给个 ★star 支持,谢谢!如有错误之处或问题也可以在这里留言或者提issue给我~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,907评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,546评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,705评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,624评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,940评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,371评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,672评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,396评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,069评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,350评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,876评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,243评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,847评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,004评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,755评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,378评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,266评论 2 259