作為開(kāi)發(fā)者我我們第一個(gè)頁(yè)面是什么呢扭弧?不出意外應(yīng)該是登錄頁(yè)面阎姥。那么我們從登錄頁(yè)面的搭建過(guò)程,來(lái)學(xué)些flutter吧鸽捻。下面開(kāi)啟我們的學(xué)習(xí)之旅呼巴。
一個(gè)登錄頁(yè)面需要哪一些控件呢?
- 兩個(gè)輸入框(TextField)
- 一個(gè)Button按鈕(FlatButton)
- 或許還有一些文本Text
- 一個(gè)圖片(Image)
1.Widget簡(jiǎn)介
1.1 概念
在Flutter中幾乎所有的對(duì)象都是一個(gè)Widget御蒲。與原生開(kāi)發(fā)中“控件”不同的是衣赶,F(xiàn)lutter中的Widget的概念更廣泛,它不僅可以表示UI元素厚满,也可以表示一些功能性的組件如:用于手勢(shì)檢測(cè)的 GestureDetector widget府瞄、用于APP主題數(shù)據(jù)傳遞的Theme等等,而原生開(kāi)發(fā)中的控件通常只是指UI元素碘箍。在后面的內(nèi)容中摘能,我們?cè)诿枋鯱I元素時(shí)可能會(huì)用到“控件”续崖、“組件”這樣的概念,讀者心里需要知道他們就是widget团搞,只是在不同場(chǎng)景的不同表述而已严望。由于Flutter主要就是用于構(gòu)建用戶(hù)界面的,所以逻恐,在大多數(shù)時(shí)候像吻,讀者可以認(rèn)為widget就是一個(gè)控件,不必糾結(jié)于概念复隆。
1.2 文本及樣式
1.2 Text
Text用于顯示簡(jiǎn)單樣式文本拨匆,它包含一些控制文本顯示樣式的一些屬性,一個(gè)簡(jiǎn)單的例子如下:
const Text(this.data, {
Key key,
this.style,
this.textAlign,
this.textDirection,
this.locale,
this.softWrap,
this.overflow,
this.textScaleFactor,
this.maxLines,
this.semanticsLabel,
}) : assert(data != null), textSpan = null, super(key: key);
const Text.rich(this.textSpan, {
Key key,
this.style,
this.textAlign,
this.textDirection,
this.locale,
this.softWrap,
this.overflow,
this.textScaleFactor,
this.maxLines,
this.semanticsLabel,
}): assert(textSpan != null), data = null, super(key: key);
const RichText({
Key key,
@required this.text,
this.textAlign = TextAlign.start,
this.textDirection,
this.softWrap = true,
this.overflow = TextOverflow.clip,
this.textScaleFactor = 1.0,
this.maxLines,
this.locale,
}) : assert(text != null) ,assert(textAlign != null), assert(softWrap != null), assert(overflow != null),
assert(textScaleFactor != null), assert(maxLines == null || maxLines > 0), super(key: key);
1.2.1 String data
要顯示的字符串
1.2.2 TextStyle style
文本樣式挽拂,樣式屬性如表:
屬性 | 說(shuō)明 |
---|---|
Color color | 文本顏色惭每。如果指定了foreground,則此值必須為null亏栈。 |
TextDecoration decoration | 繪制文本裝飾:下劃線(xiàn)(TextDecoration.underline)上劃線(xiàn)(TextDecoration.overline)刪除線(xiàn)(TextDecoration.lineThrough)無(wú)(TextDecoration.none) |
Color decorationColor | 繪制文本裝飾的顏色台腥。 |
TextDecorationStyle decorationStyle | 繪制文本裝飾的樣式:畫(huà)一條虛線(xiàn) TextDecorationStyle.dashed畫(huà)一條虛線(xiàn) TextDecorationStyle.dotted畫(huà)兩條線(xiàn) TextDecorationStyle.double畫(huà)一條實(shí)線(xiàn) TextDecorationStyle.solid畫(huà)一條正弦線(xiàn)(波浪線(xiàn)) TextDecorationStyle.wavy |
FontWeight fontWeight | 繪制文本時(shí)使用的字體粗細(xì):FontWeight.bold 常用的字體重量比正常重。即w700FontWeight.normal 默認(rèn)字體粗細(xì)绒北。即w400FontWeight.w100 薄黎侈,最薄FontWeight.w200 特輕FontWeight.w300 輕FontWeight.w400 正常/普通/平原FontWeight.w500 較粗FontWeight.w600 半粗體FontWeight.w700 加粗FontWeight.w800 特粗FontWeight.w900 最粗 |
FontStyle fontStyle | 字體變體:FontStyle.italic 使用斜體FontStyle.normal 使用直立 |
TextBaseline textBaseline | 對(duì)齊文本的水平線(xiàn):TextBaseline.alphabetic:文本基線(xiàn)是標(biāo)準(zhǔn)的字母基線(xiàn)TextBaseline.ideographic:文字基線(xiàn)是表意字基線(xiàn);如果字符本身超出了alphabetic 基線(xiàn)闷游,那么ideograhpic基線(xiàn)位置在字符本身的底部峻汉。 |
String fontFamily | 使用的字體名稱(chēng)(例如,Roboto)脐往。如果字體是在包中定義的休吠,那么它將以'packages / package_name /'為前綴(例如'packages / cool_fonts / Roboto') |
double fontSize | 字體大小(pt、sp)业簿,默認(rèn)為14個(gè)邏輯像素(14pt瘤礁、14sp) |
double letterSpacing | 水平字母之間的空間間隔(邏輯像素為單位)∠皆矗可以使用負(fù)值來(lái)讓字母更接近。 |
double wordSpacing | 單詞之間添加的空間間隔(邏輯像素為單位)希太】巳模可以使用負(fù)值來(lái)使單詞更接近。 |
double height | 文本行與行的高度誊辉,作為字體大小的倍數(shù)(取值1~2矾湃,如1.2) |
Locale locale | 此屬性很少設(shè)置,用于選擇區(qū)域特定字形的語(yǔ)言環(huán)境堕澄。 |
Paint background | 文本背景色 |
Paint foreground | 文本的前景色邀跃,不能與color共同設(shè)置(比文本顏色color區(qū)別在Paint功能多霉咨,后續(xù)會(huì)講解) |
List<Shadow> shadows | 詳解:Flutter Decoration背景設(shè)定(邊框、圓角拍屑、陰影途戒、形狀、漸變僵驰、背景圖像等) |
該 style 參數(shù)可選喷斋。省略時(shí),文本將使用最接近的DefaultTextStyle的樣式蒜茴。如果給定樣式的TextStyle.inherit屬性為true(默認(rèn)值)星爪,則給定樣式將與最接近的DefaultTextStyle合并。例如粉私,這種合并行為很有用顽腾,可以在使用默認(rèn)字體系列和大小時(shí)使文本變?yōu)榇煮w。
1.2.3 TextAlign textAlign
文本應(yīng)如何水平對(duì)齊enum:
屬性 | 說(shuō)明 |
---|---|
TextAlign.center | 將文本對(duì)齊容器的中心诺核。 |
TextAlign.end | 對(duì)齊容器后緣上的文本抄肖。 |
TextAlign.justify | 拉伸以結(jié)束的文本行以填充容器的寬度。即使用了decorationStyle才起效 |
TextAlign.left | 對(duì)齊容器左邊緣的文本猪瞬。 |
TextAlign.right | 對(duì)齊容器右邊緣的文本憎瘸。 |
TextAlign.start | 對(duì)齊容器前緣上的文本。 |
1.2.4 TextDirection textDirection
這個(gè)屬性估計(jì)是給外國(guó)人習(xí)慣使用陈瘦,
相對(duì)TextAlign中的start幌甘、end而言有用(當(dāng)start使用了ltr相當(dāng)于end使用了rtl,也相當(dāng)于TextAlign使用了left)
對(duì)于從左到右的文本(TextDirection.ltr)痊项,文本從左向右流動(dòng)锅风;
對(duì)于從右到左的文本(TextDirection.rtl),文本從右向左流動(dòng)鞍泉。
1.2.5 bool softWrap
某一行中文本過(guò)長(zhǎng)皱埠,是否需要換行。默認(rèn)為true咖驮,如果為false边器,則文本中的字形將被定位為好像存在無(wú)限的水平空間。
1.2.6 TextOverflow overflow
如何處理視覺(jué)溢出:
值 | 說(shuō)明 |
---|---|
TextOverflow.clip | 剪切溢出的文本以修復(fù)其容器托修。 |
TextOverflow.ellipsis | 使用省略號(hào)表示文本已溢出忘巧。 |
TextOverflow.fade | 將溢出的文本淡化為透明。 |
1.2.7 double textScaleFactor
每個(gè)邏輯像素的字體像素?cái)?shù)
作為textScaleFactor賦予構(gòu)造函數(shù)的值睦刃。如果為null砚嘴,將使用從環(huán)境MediaQuery獲取的MediaQueryData.textScaleFactor 即手機(jī)的像素密度(1.0、1.5、2.0际长、3.0)
1.2.8 int maxLines
文本要跨越的可選最大行數(shù),
為1耸采,則文本不會(huì)換行。否則工育,文本將被包裹在框的邊緣虾宇。
1.2.9 String semanticsLabel
圖像的語(yǔ)義描述,用于向Andoid上的TalkBack和iOS上的VoiceOver提供圖像描述
talkback是一款由谷歌官方開(kāi)發(fā)的系統(tǒng)軟件,它的定位是幫助盲人或者視力有障礙的用戶(hù)提供語(yǔ)言輔助
Voiceover功能是APPLE公司在2009年4月新推出的一種語(yǔ)音輔助程序
備注:參考:
https://docs.flutter.io/flutter/widgets/Text-class.html
https://docs.flutter.io/flutter/painting/TextStyle-class.html