Flutter 2. 常用组件

Flutter中一切皆组件(Widget),一个Flutter项目可以看作是大量的Widget堆砌而成,类似于堆乐高积木。

因为网上已经有很多Flutter各组件的详细使用已,所以此篇只罗列常用组件,以查漏补缺使用。

Flutter中的组件可以分为两大类,一个是谷歌Material风格的设计组件,另一个是iOS风格的组件。


一. Material风格的组件

1. 容器组件 Container

容器组件会包含一个child组件,自身可以设置对齐方式、padding、margin和背景颜色等。

2. 图片组件 Image

Image组件有多种构造函数,可以用不同方式加载图片:

  • Image : 从ImageProvider获取图像
  • Image.asset: 加载资源图片
  • Image.file: 加载本地图片文件
  • Image.network: 加载网络图片
  • Image.memory: 加载Uint8List资源图片

Image组件加载显示图片后,可以设置fit属性来控制图片的显示方式:

  • BoxFit.fill 全图充满显示,图片可能拉伸
  • BoxFit.contain 全图显示,按照原比例,不需要充满
  • BoxFit.cover 显示可能拉伸,可能裁剪,充满
  • BoxFit.fitWidth 宽度充满,图片可能会被拉伸或者裁剪
  • BoxFit.fitHeight 高度充满,图片可能会被拉伸或者裁剪
  • BoxFit.none 原始大小
  • BoxFit.scaleDown 类似于contain方式,但是不允许显示超过原始图片大小,即可小不可大

3. 文本组件 Text

显示文字的组件...

4. 图标及按钮组件

图标组件Icon为展示图标的组件,常用的有:

  • IconButton:可点击的图标按钮组件
  • Icons:Flutter自带的图标集合
  • IconTheme: Icon主题
  • ImageIcon: 通过AssetImages或者其他图片显示图标

按钮组件为可点击响应的组件,类似于Icon组件:

  • IconButton: 可点击的图标按钮组件
  • RaisedButton: 凸起按钮组件
  • FloatingActionButton悬停按钮组件,Scaffold组件中设置
  • FlatButton扁平按钮组件,点击时候会有阴影效果

5. 列表组件

基础列表组件为ListView,可以设置水平或者垂直方向滚动。
水平布局组件可以使用Row组件
垂直布局组件可以使用Column组件

当数据过多,比如通讯录这种长列表的时候,可以使用ListViewbuilder命名构造方法,来构造长列表。

当数据过多,要用网格布局的时候,可以使用GridView组件。GridView创建方式有两种:

  • 使用GridView.count通过单行展示个数来创建
  • 使用GridView.extent通过最大宽度来创建

6. 表单组件

表单里有两个重要的组件,一个是Form用来提交表单,另一个是TextFormField组件用来输入内容的。

Form组件的常用属性:

  • key 该组件在整个组件树中的key值
  • autovalidate 是否自动提交表单
  • onChanged 当FormField值改变时的回调函数

TextFormField组件的常用属性:

  • autovalidate自动验证值
  • initialValue表单字段初始值
  • onSave 当Form表单调用保存方法save时的回调函数
  • validatorForm表单验证器

对于输入,我们最关心的是验证输入内容是否合法。为了获取表单实例,我们需要设置一个全局key:

GlobalKey<FormState> key = GlobalKey<FormState>();

并把该key值赋值给Form组件的key属性。

7. 装饰类组件:

  • Opacity:透明度处理
  • DecoratedBox 装饰盒子,设置颜色、阴影、形状、渐变和背景图片等
  • RotatedBox 旋转盒子
  • ClipOval: 圆形裁剪
  • ClipRRect: 圆角矩形裁剪
  • ClipRect: 矩形裁剪
  • ClipPath: 按照设置的路径自定义裁剪,需要继承自CustomerClipper类,并且重写getClip方法返回裁剪路径,和重写ShouldReclip方法返回true:
// 自定义裁剪
class MyClip extends CustomClipper {
  
  @override
  getClip(Size size) {
    
    Path path = Path();
    path.moveTo(10, 10);
    path.lineTo(10, 101);
    path.close();
    
    return path;
  }
  
  @override
  bool shouldReclip(CustomClipper oldClipper) {
    return true;
  }
}

8. 动画组件

常用的动画组件有:

  • AnimatedOpacity 实现渐变效果组件
  • Hero 页面切换动画组件

☁️✨☁️☁️☁️☁️☁️☁️☁️ 其他组件 ☁️☁️☁️☁️☁️☁️☁️✨☁️:

MaterailApp组件

代表一种设计风格的组件。里面包含了所需要的各种基本组件。一个完整的Flutter项目就是从MaterailApp组件开始的
MaterailApp包括设置主页,设置路由,自定义主题等。

Scaffold组件

脚手架组件显示了material风格的页面布局,单个页面的布局都可以使用该组件。
脚手架组件可以设置显示 顶部导航栏底部导航栏侧拉抽屉

应用按钮组件(顶部导航栏组件)

应用按钮组件有AppBarSliverAppBar两种。区别是AppBar是固定不动的,SliverAppBar可以随着内容滚动而变化。
应用按钮组件中可以设置TabBar顶部导航栏。

底部导航组件

BottomNavigationBar组件是底部导航条,可以浏览切换顶级视图。

水平选项卡组件(TabBar)

水平选项卡组件类似于网易新闻主页的各个新闻种类组件。
TabBar组件的使用,需要用到DefaultTabController组件,他是关联TabBarView组件和TabBar组件的桥梁。
实例代码如下:

main () => runApp(MaterialApp(home: MyApp(),));

class MyApp extends StatelessWidget {

  final myTabs = [Tab(text: "体育",), Tab(text: "财经",)];
  
  @override
  Widget build(BuildContext context) {

    return DefaultTabController(
      length: myTabs.length,
      child: Scaffold(
        appBar: AppBar(
          bottom: TabBar(tabs: myTabs),
        ),
        body: TabBarView(
            children: myTabs.map((Tab tab){
              return Text(tab.text);
        }).toList(),
        ),
      ),
    );
  }
}

抽屉组件Drawer

抽屉组件Drawer通常跟ListView组件配合使用

弹出菜单组件

PopupMenuButton为弹出菜单组件,通常放于页面右上角,表示更多的操作。

简单对话框组件

SimpleDialog为简单对话框组件,于屏幕中弹出一个选择或者展示列表,用来显示附加的提示或者操作。
注意这个过程是异步的,需要加入async/await处理。

提示对话框组件

AlertDialog组件为提示对话框组件,不仅有弹出提示,还有操作按钮,比如确定、取消。

轻量提示组件

SnakBar为轻量提示组件,于屏幕下方显示,常用于请求后的状态提示等。

文本框组件

TextField为文本框组件,常用于做文本输入。
如果想要获取到文本的输入内容,需要绑定controller到TextField,用来监听文本输入内容。

final TextEditingController controller = TextEditingController();

卡片组件

Card卡片组件常与ListTile组件一起使用。



二. Cupertino风格的组件

Cupertino风格主要是用来开发iOS时候使用。

1. CupertinoActivityIndicator

一个iOS风格的loading指示器,通常用来加载等待。

2. CupertinoAlertDialog

AlertView的组件
使用的时候,内容部分可以用SingleChidlScrollView组件进行包裹。操作按钮可以用CupertinoDialogAction组件。

3. CupertinoButton

4.导航组件

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

推荐阅读更多精彩内容

  • 国庆后面两天在家学习整理了一波flutter,基本把能撸过能看到的代码都过了一遍,此文篇幅较长,建议保存(star...
    Nealyang阅读 4,329评论 1 17
  • 以下内容基本翻译自A Tour of the Flutter Widget Framework,翻译的可能并不完全...
    INeil阅读 10,253评论 0 4
  • 1.Widge组件分类 在flutter中,所有UI元素都是widget组件,除了我们常见的button,Imag...
    zzzworm阅读 5,607评论 1 2
  • 本文主要大致介绍Flutter 整体框架,简单粗略的使用,深度暂且还没有。用Dart,写了个计算器的demo和列表...
    空而小sao阅读 1,945评论 0 0
  • 10职场小白成长记 电话接通的刹那,虎妞大脑一片空白,她给客户打电话的目的是什么来着?要说什么?在对方“喂”了两声...
    哚吖阅读 268评论 0 0