Flutter中組件

1.App結(jié)構(gòu)和導(dǎo)航

Scaffold:Material Design布局結(jié)構(gòu)的基本實(shí)現(xiàn)八毯。此類提供了用于顯示drawer搓侄、snackbar和底部sheetAPI

widget詳解:

在Flutter中话速,我們平時(shí)自定義的widget讶踪,一般都是繼承自StatefulWidget或StatelessWidget(并不是只有這兩種),這兩種widget也是目前最常用的兩種泊交。如果一個(gè)控件自身狀態(tài)不會(huì)去改變乳讥,創(chuàng)建了就直接顯示,不會(huì)有色值廓俭、大小或者其他屬性的變化雏婶,這種widget一般都是繼承自StatelessWidget,常見(jiàn)的有Container白指、ScrollView等留晚。如果一個(gè)控件需要?jiǎng)討B(tài)的去改變或者相應(yīng)一些狀態(tài),例如點(diǎn)擊態(tài)告嘲、色值错维、內(nèi)容區(qū)域等,那么一般都是繼承自StatefulWidget橄唬,常見(jiàn)的有CheckBox赋焕、AppBar、TabBar等仰楚。其實(shí)單純的從名字也可以看出這兩種widget的區(qū)別隆判,這兩種widget都是繼承自Widget類。

State:

在說(shuō)到StatefulWidget之前僧界,先說(shuō)下State侨嘀。State的作用有兩點(diǎn):

在widget構(gòu)建的時(shí)候可以被同步讀取捂襟;

在widget的生命周期中可能會(huì)被改變咬腕。

3.2.1 State生命周期

State的生命周期有四種狀態(tài):

created:當(dāng)State對(duì)象被創(chuàng)建時(shí)候,State.initState方法會(huì)被調(diào)用葬荷;

initialized:當(dāng)State對(duì)象被創(chuàng)建涨共,但還沒(méi)有準(zhǔn)備構(gòu)建時(shí)纽帖,State.didChangeDependencies在這個(gè)時(shí)候會(huì)被調(diào)用;

ready:State對(duì)象已經(jīng)準(zhǔn)備好了構(gòu)建举反,State.dispose沒(méi)有被調(diào)用的時(shí)候懊直;

defunct:State.dispose被調(diào)用后,State對(duì)象不能夠被構(gòu)建

Flutter控件之Scaffold

Scaffold實(shí)現(xiàn)了基本的紙墨設(shè)計(jì)布局結(jié)構(gòu)火鼻。在示例應(yīng)用中吹截,MyHomePage所返回的就是一個(gè)Scaffold。也就是說(shuō)凝危,MaterialApp的child是Scaffold Widget。

在紙墨設(shè)計(jì)中定義的單個(gè)界面上的各種布局元素晨逝,在Scaffold中都有支持蛾默,比如左邊欄(Drawers)snack bars捉貌、以及bottom sheets支鸡。

Scaffold 有下面幾個(gè)主要屬性:

appBar:顯示在界面頂部的一個(gè)AppBar,也就是Android中的ActionBar趁窃、Toolbar

body:當(dāng)前界面所顯示的主要內(nèi)容 Widget

floatingActionButton:紙墨設(shè)計(jì)中所定義的FAB牧挣,界面的主要功能按鈕

persistentFooterButtons:固定在下方顯示的按鈕,比如對(duì)話框下方的確定醒陆、取消按鈕

drawer:側(cè)邊欄控件

backgroundColor:內(nèi)容的背景顏色瀑构,默認(rèn)使用的是ThemeData.scaffoldBackgroundColor的值

bottomNavigationBar:顯示在頁(yè)面底部的導(dǎo)航欄

resizeToAvoidBottomPadding:類似于Android中的android:windowSoftInputMode=”adjustResize”,控制界面內(nèi)容body是否重新布局來(lái)避免底部被覆蓋了刨摩,比如當(dāng)鍵盤顯示的時(shí)候寺晌,重新布局避免被鍵盤蓋住內(nèi)容。默認(rèn)值為true澡刹。

顯示snackbar或者bottom sheet的時(shí)候呻征,需要使用當(dāng)前的BuildContext參數(shù)調(diào)用Scaffold.of函數(shù)來(lái)獲取ScaffoldState對(duì)象,然后使用ScaffoldState.showSnackBar和ScaffoldState.showBottomSheet函數(shù)來(lái)顯示罢浇。

要特別注意Scaffold.of的參數(shù)BuildContext陆赋,如果包含該BuildContext的Widget是Scaffold的父Widget,則Scaffold.of是無(wú)法查找到對(duì)應(yīng)的ScaffoldState對(duì)象的嚷闭,Scaffold.of返回的是父對(duì)象中最近的Scaffold中的ScaffoldState對(duì)象攒岛。比如,如果在Scaffold的build函數(shù)中胞锰,使用build的BuildContext參數(shù)是可以的:

2.各種組件級(jí)屬性

1.SingleChildScrollView組件:

????從屏幕溢出時(shí)自動(dòng)開(kāi)始滾動(dòng)

scrollDirection:滾動(dòng)的方向

3.Flutter TextStyle參數(shù)解析

const TextStyle({?

this.inherit: true,//為false的時(shí)候不顯示?

this.color,//顏色?

this.fontSize,//字號(hào)?

this.fontWeight,//字重阵子,加粗也用這個(gè)字段FontWeight.w700?

this.fontStyle,// FontStyle.normal FontStyle.italic斜體?

this.letterSpacing, // 字符間距 就是單個(gè)字母或者漢字之間的間隔,可以是負(fù)數(shù)

this.wordSpacing,//字間距句字之間的間距?

this.textBaseline,//基線胜蛉,兩個(gè)值挠进,字面意思是一個(gè)用來(lái)排字母的色乾,一人用來(lái)排表意字的(類似中文) this.height,//當(dāng)用來(lái)Text控件上時(shí),行高(會(huì)乘以fontSize,所以不以設(shè)置過(guò)大)?

this.decoration,//添加上劃線领突,下劃線暖璧,刪除線?

this.decorationColor,//劃線的顏色?

this.decorationStyle,//這個(gè)style可能控制畫(huà)實(shí)線,虛線君旦,兩條線澎办,點(diǎn),波浪線等?

this.debugLabel,String fontFamily,//字體String package,?

}): fontFamily = package == null ? fontFamily : 'packages/$package/$fontFamily',assert(inherit != null);

4.md5加密

dart有內(nèi)置的md5加密包,先引入頭文件:

import 'dart:convert';

import 'package:convert/convert.dart';

import 'package:crypto/crypto.dart';

md5加密方法

// md5加密

String generateMd5(String data){

? var content = new Utf8Encoder().convert(data);

? var digest = md5.convert(content);

? //這里其實(shí)就是digest.toString()

? return hex.encode(digest.bytes);

}

5.Image屬性

BoxFit.noneBoxFit.fill 全圖顯示金砍,顯示可能拉伸局蚀,充滿

BoxFit.contain 全圖顯示,顯示原比例恕稠,不需充滿

BoxFit.cover 顯示可能拉伸琅绅,可能裁剪,充滿

BoxFit.fitWidth 顯示可能拉伸鹅巍,可能裁剪千扶,寬度充滿

BoxFit.fitHeight 顯示可能拉伸,可能裁剪骆捧,高度充滿

BoxFit.none

BoxFit.scaleDown 效果和contain差不多,但是此屬性不允許顯示超過(guò)源圖片大小澎羞,可小不可大

6.TextField組件

const TextField({

? ? Key key,

? ? this.controller,? ? ? ? ? ? //控制器,控制TextField文字

? ? this.focusNode,

? ? this.decoration: const InputDecoration(),? ? ? //輸入器裝飾

? ? TextInputType keyboardType: TextInputType.text, //輸入的類型

? ? this.style,

? ? this.textAlign: TextAlign.start,

? ? this.autofocus: false,

? ? this.obscureText: false,? //是否隱藏輸入

? ? this.autocorrect: true,

? ? this.maxLines: 1,

? ? this.maxLength,

? ? this.maxLengthEnforced: true,

? ? this.onChanged,? ? ? ? ? ? //文字改變觸發(fā)

? ? this.onSubmitted,? ? ? ? ? //文字提交觸發(fā)(鍵盤按鍵)

? ? this.inputFormatters,

? ? this.enabled,

? })

7. DrawerHeaderUserAccountsDrawerHeader組件

DrawerHeader

通常用于在抽屜中在頂部展示一些基本信息敛苇;其包含如下屬性:

decoration:header區(qū)域的decoration妆绞,通常用來(lái)設(shè)置背景顏色或者背景圖片

duration和curve:如果decoration發(fā)生了變化,則會(huì)使用curve設(shè)置的變化曲線和duration設(shè)置的動(dòng)畫(huà)時(shí)間來(lái)做一個(gè)切換動(dòng)畫(huà)

child: Header里面所顯示的內(nèi)容控件

padding: Header里面內(nèi)容控件的padding值枫攀,如果child為null摆碉,則這個(gè)值無(wú)效

margin:Header四周的間隙

如果想在DrawerHeader中顯示用戶賬戶信息,比如類似于Gmail的聯(lián)系人頭像脓豪、用戶名巷帝、Email等信息,則可以使用UserAccountsDrawerHeader這個(gè)特殊的DrawerHeader扫夜。

UserAccountsDrawerHeader

UserAccountsDrawerHeader可以設(shè)置用戶頭像楞泼、用戶名、Email等信息笤闯,顯示一個(gè)符合MD規(guī)范的drawer header堕阔。其常用屬性如下:

margin:Header四周的間隙

decoration:header區(qū)域的decoration,通常用來(lái)設(shè)置背景顏色或者背景圖片

currentAccountPicture:用來(lái)設(shè)置當(dāng)前用戶的頭像

otherAccountsPictures:用來(lái)設(shè)置當(dāng)前用戶的其他賬號(hào)的頭像(做多顯示三個(gè))

accountName:當(dāng)前用戶的名字

accountEmail:當(dāng)前用戶的Email

onDetailsPressed:當(dāng)accountName或者accountEmail被點(diǎn)擊的時(shí)候所觸發(fā)的回調(diào)函數(shù)颗味,可以用來(lái)顯示其他額外的信息

8.Flutter 控件之 AppBar SliverAppBar

leading:在標(biāo)題前面顯示的一個(gè)控件超陆,在首頁(yè)通常顯示應(yīng)用的 logo;在其他界面通常顯示為返回按鈕

title: Toolbar 中主要內(nèi)容,通常顯示為當(dāng)前界面的標(biāo)題文字

actions:一個(gè) Widget 列表时呀,代表 Toolbar 中所顯示的菜單张漂,對(duì)于常用的菜單,通常使用 IconButton 來(lái)表示谨娜;對(duì)于不常用的菜單通常使用 PopupMenuButton 來(lái)顯示為三個(gè)點(diǎn)航攒,點(diǎn)擊后彈出二級(jí)菜單

bottom:一個(gè)AppBarBottomWidget對(duì)象,通常是TabBar趴梢。用來(lái)在Toolbar標(biāo)題下面顯示一個(gè)Tab導(dǎo)航欄

elevation:紙墨設(shè)計(jì)中控件的z坐標(biāo)順序漠畜,默認(rèn)值為4,對(duì)于可滾動(dòng)的SliverAppBar坞靶,當(dāng)SliverAppBar和內(nèi)容同級(jí)的時(shí)候憔狞,該值為0,當(dāng)內(nèi)容滾動(dòng)SliverAppBar變?yōu)門oolbar的時(shí)候彰阴,修改elevation的值

flexibleSpace:一個(gè)顯示在AppBar下方的控件瘾敢,高度和AppBar高度一樣,可以實(shí)現(xiàn)一些特殊的效果硝枉,該屬性通常在SliverAppBar中使用

backgroundColor:APP bar的顏色,默認(rèn)值為ThemeData.primaryColor倦微。改值通常和下面的三個(gè)屬性一起使用

brightness:App bar的亮度妻味,有白色和黑色兩種主題,默認(rèn)值為ThemeData.primaryColorBrightness

iconTheme:App bar上圖標(biāo)的顏色欣福、透明度责球、和尺寸信息。默認(rèn)值為ThemeData.primaryIconTheme

textTheme:App bar上的文字樣式拓劝。默認(rèn)值為ThemeData.primaryTextTheme

centerTitle: 標(biāo)題是否居中顯示雏逾,默認(rèn)值根據(jù)不同的操作系統(tǒng),顯示方式不一樣

decoration:屬性

—-陰影效果

decoration:new BoxDecoration(

? ? ? color: Colors.white,

? ? ? boxShadow:[

? ? ? ? BoxShadow(

? ? ? ? ? ? offset: Offset(0.0,0.0),

? ? ? ? ? ? //color: Color.fromRGBO(16, 20, 188, 1.0),

? ? ? ? ? ? blurRadius: 20.0,

? ? ? ? ? ? spreadRadius: -16.0)

? ? ? ],

? ? ? border:new Border(top:new BorderSide(color: Colors.white12))),

);

—透明

const Color(0x000099ff), //0x 后面開(kāi)始 兩位FF表示透明度16進(jìn)制郑临,

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末栖博,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子厢洞,更是在濱河造成了極大的恐慌仇让,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躺翻,死亡現(xiàn)場(chǎng)離奇詭異丧叽,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)公你,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門踊淳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人陕靠,你說(shuō)我怎么就攤上這事迂尝⊥衍裕” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵雹舀,是天一觀的道長(zhǎng)芦劣。 經(jīng)常有香客問(wèn)我,道長(zhǎng)说榆,這世上最難降的妖魔是什么虚吟? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮签财,結(jié)果婚禮上串慰,老公的妹妹穿的比我還像新娘。我一直安慰自己唱蒸,他們只是感情好邦鲫,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著神汹,像睡著了一般庆捺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上屁魏,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天滔以,我揣著相機(jī)與錄音,去河邊找鬼氓拼。 笑死你画,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的桃漾。 我是一名探鬼主播坏匪,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼撬统!你這毒婦竟也來(lái)了适滓?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤恋追,失蹤者是張志新(化名)和其女友劉穎粒竖,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體几于,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蕊苗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沿彭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朽砰。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瞧柔,到底是詐尸還是另有隱情漆弄,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布造锅,位于F島的核電站撼唾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏哥蔚。R本人自食惡果不足惜倒谷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望糙箍。 院中可真熱鬧渤愁,春花似錦、人聲如沸深夯。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)咕晋。三九已至雹拄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掌呜,已是汗流浹背滓玖。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留站辉,地道東北人呢撞。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓损姜,卻偏偏與公主長(zhǎng)得像饰剥,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子摧阅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 本文介紹了Flutter應(yīng)用程序中Widget汰蓉,State,BuildContext和InheritedWidge...
    __white閱讀 2,885評(píng)論 1 6
  • 本文主要介紹了Flutter布局相關(guān)的內(nèi)容棒卷,對(duì)相關(guān)知識(shí)點(diǎn)進(jìn)行了梳理顾孽,并從實(shí)際例子觸發(fā),進(jìn)一步講解該如何去進(jìn)行布局比规。...
    Q吹個(gè)大氣球Q閱讀 9,714評(píng)論 6 51
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,506評(píng)論 25 707
  • 1. 2015年11月1日 日棲西山渡輪輝若厚, 還得相思幾時(shí)回。 汩汩逝水入大海蜒什, 孤樽獨(dú)對(duì)冷月魂测秸。
    桓舟子閱讀 280評(píng)論 0 2
  • 工具方面:1. 功能測(cè)試需要 a) 前臺(tái)相關(guān) Httpwatch、fi...
    古佛青燈度流年閱讀 2,920評(píng)論 0 4