Flutter基礎(chǔ)控件--Text/RichText

??從本篇開始堆生,將對(duì)Flutter的基礎(chǔ)控件進(jìn)行講解专缠。
??Flutter中的Text相當(dāng)于Android中的TextView,屬于最常用的Widget之一了淑仆。
??Text構(gòu)造函數(shù)如下


  const Text(this.data, {
    Key key, // 選填參數(shù)涝婉,Key類型,Widget的標(biāo)識(shí)蔗怠,
    this.style, // 選填參數(shù)墩弯,TextStyle類型,文本樣式
    this.strutStyle, // 選填參數(shù)寞射,StrutStyle類型渔工,設(shè)置每行的最小行高
    this.textAlign, // 選填參數(shù),TextAlign類型桥温,文本的對(duì)齊方式
    this.textDirection, // 選填參數(shù)涨缚,TextDirection類型,文字方向
    this.locale, // 選填參數(shù)策治,Local類型脓魏,用于選擇用戶語言和格式設(shè)置首選項(xiàng)的標(biāo)識(shí)符
    this.softWrap, // 選填參數(shù),bool類型通惫,是否支持軟換行符茂翔,如果是 false 的話,這個(gè)文本只有一行履腋,水平方向是無限的
    this.overflow, // 選填參數(shù)珊燎,TextOverflow類型,文本的截?cái)喾绞?    this.textScaleFactor, // 選填參數(shù)遵湖,double類型悔政,代表文本相對(duì)于當(dāng)前字體大小的縮放因子,默認(rèn)值為1.0
    this.maxLines, // 選填參數(shù)延旧,int類型谋国,顯示的最大行數(shù)
    this.semanticsLabel, // 選填參數(shù),String類型迁沫,給文本加上一個(gè)語義標(biāo)簽(用不到)
  }) : assert(data != null),
       textSpan = null,
       super(key: key);
    
    ...
}

??常用屬性如下:

屬性 說明
textAlign 文本位置(TextAlign.left芦瘾,TextAlign.right捌蚊,TextAlign.center)
overflow 超出文本顯示樣式(TextOverflow.ellipsis,TextOverflow.clip,TextOverflow.fade)
maxLines 最大行數(shù)
softWrap 是否換行
style TextStyle文本樣式

TextStyle構(gòu)造函數(shù)如下:


class TextStyle extends Diagnosticable {

  const TextStyle({
    this.inherit = true, // 可選,類型 bool近弟,是否繼承父 Text 的樣式缅糟,默認(rèn)為 true,如果為 false祷愉,且樣式?jīng)]有設(shè)置具體的值窗宦,則采用默認(rèn)值:白色、大小 10px二鳄、sans-serif 字體
    this.color, // 可選赴涵,類型 Color,文字的顏色
    this.fontSize, // 可選泥从,類型 Color,文字的大小
    this.fontWeight, // 可選沪摄,類型 FontWeight躯嫉,字體粗細(xì)
    this.fontStyle, // 可選,類型 FontStyle杨拐,是否在字體中傾斜字形
    this.letterSpacing, // 可選祈餐,類型 double,字母之間的間隔
    this.wordSpacing, // 可選哄陶,類型 double帆阳,字母之間的間隔
    this.textBaseline, // 可選,類型 TextBaseLine屋吨,用于對(duì)齊文本的水平線
    this.height, // 可選蜒谤,類型 double,文本的高度至扰,但它并不是一個(gè)絕對(duì)值鳍徽,而是一個(gè)因子,具體的行高等于 fontSize * height
    this.locale, // 可選敢课,類型 Locale阶祭,用于選擇用戶語言和格式設(shè)置首選項(xiàng)的標(biāo)識(shí)符
    this.foreground, // 可選,類型 Paint直秆,文本的前景色
    this.background, // 可選濒募,類型 Paint,文本的背景色
    this.shadows, // 可選圾结,類型 List<ui.Shadow>瑰剃,在文本下方繪制陰影
    this.decoration, // 可選,類型 TextDecoration筝野,文本的線條
    this.decorationColor, // 可選培他,類型 Color鹃两,TextDecoration 線條的顏色
    this.decorationStyle, // 可選,類型 TextDecorationStyle舀凛,TextDecoration 線條的樣式
    this.debugLabel, // 可選俊扳,類型 String,文本樣式的描述
    String fontFamily, // 可選猛遍,類型 String馋记,用于設(shè)置使用那種自定義字體
    List<String> fontFamilyFallback, // 可選,類型 String懊烤,字體列表梯醒,當(dāng)前面的字體找不到時(shí),會(huì)在這個(gè)列表里依次查找
    String package, // 可選腌紧,類型 String
  }) : fontFamily = package == null ? fontFamily : 'packages/$package/$fontFamily',
       _fontFamilyFallback = fontFamilyFallback,
       _package = package,
       assert(inherit != null),
       assert(color == null || foreground == null, _kColorForegroundWarning);
       
    ...
}

??常用屬性如下:

屬性 說明
color 文本顏色
fontSize 文本大腥紫啊(默認(rèn)14)
fontStyle 字體樣式(FontStyle.italic 使用斜體,F(xiàn)ontStyle.normal 使用直立)
textBaseline 對(duì)齊文本的水平線:
fontFamily 文本字體
letterSpacing 水平字母之間的空間間隔(邏輯像素為單位)壁肋『排撸可以使用負(fù)值來讓字母更接近
wordSpacing 單詞之間添加的空間間隔(邏輯像素為單位)〗牛可以使用負(fù)值來使單詞更接近猫胁。
height 文本行與行的高度,作為字體大小的倍數(shù)(取值1~2跛锌,如1.2)
background 文本背景色
foreground 文本的前景色弃秆,不能與color共同設(shè)置
fontWeight 繪制文本時(shí)使用的字體粗細(xì):FontWeight.bold 常用的字體重量比正常重。FontWeight.normal 默認(rèn)字體粗細(xì)
decorationStyle 繪制文本裝飾的樣式(畫一條虛線 TextDecorationStyle.dashed髓帽,畫兩條線 TextDecorationStyle.double菠赚,畫一條實(shí)線 TextDecorationStyle.solid,畫一條實(shí)線 TextDecorationStyle.solid)
shadows 背景設(shè)定(邊框郑藏、圓角锈至、陰影、形狀译秦、漸變峡捡、背景圖像等)詳見Decoration用法

??RichText
RichText富文本就是使文本呈現(xiàn)各式各樣的樣式,在Android中通過SpannableString/SpannableStringBuilder來實(shí)現(xiàn)富文本
RichText構(gòu)造函數(shù)

  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,
    this.strutStyle,
  }) : assert(text != null),
       assert(textAlign != null),
       assert(softWrap != null),
       assert(overflow != null),
       assert(textScaleFactor != null),
       assert(maxLines == null || maxLines > 0),
       super(key: key);

其常用屬性和Text差不多
常用屬性

屬性 說明
textAligen 文本位置
textDirection 文本方向
softWrap 自動(dòng)換行
overflow 文本超出部分顯示樣式
maxLines 最大行數(shù)

與Text不同筑悴,RichText的text屬性不是String類型们拙,而是TextSpan,這個(gè)TextSpan有點(diǎn)像Android富文本里面的ClickableSpan阁吝、ForegroundColorSpan等砚婆,TextSpan構(gòu)造函數(shù)如下:

TextSpan({
    this.style,
    this.text,
    this.children,
    this.recognizer,
    this.semanticsLabel,
  })

常用屬性

屬性 說明
text 文本內(nèi)容
style TextStyle,文本風(fēng)格
children TextPan列表,實(shí)現(xiàn)多個(gè)富文本
recognizer 文本片段的手勢(shì)交互装盯,如點(diǎn)擊坷虑、長按事件

完整代碼

    children: <Widget>[
            Text(
              'You have pushed the button this many times:You have pushed the button this many times:You have pushed the button this many times:',
              textAlign: TextAlign.left,
              style: TextStyle(color: Color(0xffffc811), fontSize: 20),
            ),
            RichText(
              text: TextSpan(
                  text: 'RichText',
                  style: TextStyle(
                      color: Color(0xffffc811), fontStyle: FontStyle.normal),
                  children: [
                    TextSpan(
                        text: 'hello',
                        style: TextStyle(
                            color: Color(0xfff03f59),
                            fontStyle: FontStyle.italic),
                        recognizer: TapGestureRecognizer()
                          ..onTap = () {
                            print("click");
                          }),
                    TextSpan(
                        text: 'world',
                        style: TextStyle(
                            color: Color(0xffffc811),
                            fontStyle: FontStyle.italic))
                  ]),
            ),

Text有一個(gè)靜態(tài)方法rich,可以達(dá)到RichText的效果埂奈。其實(shí)迄损,看一下Text的build方法可以知道,Text實(shí)際上是對(duì)RichText的包裝账磺。

  @override
  Widget build(BuildContext context) {
    ...
    Widget result = RichText(
      ...
      text: TextSpan(
        ...
        text: data,
        children: textSpan != null ? <TextSpan>[textSpan] : null,
      ),
    );
    ...
    return result;
  }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末芹敌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子垮抗,更是在濱河造成了極大的恐慌氏捞,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冒版,死亡現(xiàn)場(chǎng)離奇詭異液茎,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)辞嗡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門捆等,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人欲间,你說我怎么就攤上這事楚里《喜浚” “怎么了猎贴?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蝴光。 經(jīng)常有香客問我她渴,道長,這世上最難降的妖魔是什么蔑祟? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任趁耗,我火速辦了婚禮,結(jié)果婚禮上疆虚,老公的妹妹穿的比我還像新娘苛败。我一直安慰自己,他們只是感情好径簿,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布罢屈。 她就那樣靜靜地躺著,像睡著了一般篇亭。 火紅的嫁衣襯著肌膚如雪缠捌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天译蒂,我揣著相機(jī)與錄音曼月,去河邊找鬼谊却。 笑死,一個(gè)胖子當(dāng)著我的面吹牛哑芹,可吹牛的內(nèi)容都是我干的炎辨。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼绩衷,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蹦魔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起咳燕,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤勿决,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后招盲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體低缩,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年曹货,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咆繁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡顶籽,死狀恐怖玩般,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情礼饱,我是刑警寧澤坏为,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站镊绪,受9級(jí)特大地震影響匀伏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蝴韭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一够颠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧榄鉴,春花似錦履磨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至减余,卻和暖如春综苔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來泰國打工如筛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留堡牡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓杨刨,卻偏偏與公主長得像晤柄,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子妖胀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

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