Flutter入門進階之旅(三)Text Widgets

謝棟發表於2019-04-15

Text Widgets是Flutter中一個十分常用的一個Widget,類似於Android平臺下的TextView,幾乎在每個App的UI中都會或多或少的出現它的身影,讓我們去一睹Text的風采吧!

簡單Text使用


import 'package:flutter/material.dart';
 
void main() {
  runApp(new MaterialApp(home: new TextDemo()));
}
 
class TextDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text("Hello Flutter"),
      ),
      body: new Center(
          child: new Text(
        "This is Flutter Widget ---- Text ,is a StatelessWidget",
        style: new TextStyle(
          fontStyle: FontStyle.italic,
          fontSize: 20.0,
          color: Colors.red,
        ),
        textAlign: TextAlign.center,
      )),
    );
  }
}
複製程式碼

效果圖

image

Flutter中的Text Widget跟Android平臺下的TextView十分類似,我們也可以跟在原生Android平臺下一樣的指定Text顯示的樣式,文字大小,顏色等,來一起看一下Flutter中關於Text的構造方法,以及Text裡面有哪些屬性可供開發者自己定製。

const Text(this.data, {  //Text顯示的內容
Key key,
this.style, //Text顯示的樣式
this.textAlign,//文字應該如何水平對齊,TextAlign.start,end 或者center
this.textDirection, //文字方向,TextDirection.ltr\TextDirection.rtl
this.locale,
this.softWrap,  //是否自動換行,若為false,文字將不考慮容器大小,單行顯示,超出螢幕部分將預設截斷處理
this.overflow, //當文字超出螢幕的時候,如何處理,TextOverflow.clip(裁剪)\TextOverflow.fade(漸隱)\TextOverflow.ellipsis(省略號)
this.textScaleFactor, //字型顯示倍率,上面的例子使用的字型大小是20.0,將字型設定成10.0,然後倍率為2
this.maxLines, //最大行數設定
this.semanticsLabel,
})
複製程式碼

上述的屬性中,我們使用的最多的就是TextStyle屬性了,比如我們想自己設定Text顯示的顏色,大小,或者下劃線、刪除線等等各種各樣的奇葩樣式都可以通過TextStyle來指定,看下TextStyle的構造方法說明:

const TextStyle({
    this.inherit: true,         // 為false的時候不顯示
    this.color,                    // 顏色 
    this.fontSize,               // 字號
    this.fontWeight,           // 字重,加粗也用這個欄位  FontWeight.w700
    this.fontStyle,                // FontStyle.normal  FontStyle.italic斜體
    this.letterSpacing,        // 字元間距  就是單個字母或者漢字之間的間隔,可以是負數
    this.wordSpacing,        // 字間距 句字之間的間距
    this.textBaseline,        // 基線,兩個值,字面意思是一個用來排字母的,一人用來排表意字的(類似中文)
    this.height,                // 當用來Text控制元件上時,行高(會乘以fontSize,所以不以設定過大)
    this.decoration,        // 新增上劃線,下劃線,刪除線 
    this.decorationColor,    // 劃線的顏色
    this.decorationStyle,    // 這個style可能控制畫實線,虛線,兩條線,點, 波浪線等
    this.debugLabel,
    String fontFamily,    // 字型
    String package,
  })
複製程式碼

TextStyle裡面的樣式我就不逐個為大家貼效果圖了,讀者可自行模擬測試下期基本使用者,我貼上我的全部樣例程式碼跟統一的效果圖供大家參考。

效果圖

image

上圖的完整示例程式碼

import 'package:flutter/material.dart';
 
void main() {
  runApp(new MaterialApp(home: new TextDemo()));
}
 
class TextDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        appBar: new AppBar(
          title: new Text("Hello Flutter"),
        ),
        body: new Center(
          child: new Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              new Text(
                'inherit: 為 false 的時候不顯示',
                style: new TextStyle(
                  fontSize: 18.0,
                  color: Colors.redAccent,
                  inherit: true,
                ),
              ),
              new Text(
                'color/fontSize: 字型顏色,字號等',
                style: new TextStyle(
                  color: Color.fromARGB(255, 150, 150, 150),
                  fontSize: 22.0,
                ),
              ),
              new Text(
                'fontWeight: 字重',
                style: new TextStyle(
                    fontSize: 18.0,
                    color: Colors.redAccent,
                    fontWeight: FontWeight.w700),
              ),
              new Text(
                'fontStyle: FontStyle.italic 斜體',
                style: new TextStyle(
                  fontStyle: FontStyle.italic,
                ),
              ),
              new Text(
                'letterSpacing: 字元間距',
                style: new TextStyle(
                  letterSpacing: 10.0,
                  // wordSpacing: 15.0
                ),
              ),
              new Text(
                'wordSpacing: 字或單詞間距',
                style: new TextStyle(
                    // letterSpacing: 10.0,
                    wordSpacing: 15.0),
              ),
              new Text(
                'textBaseline:這一行的值為TextBaseline.alphabetic',
                style: new TextStyle(textBaseline: TextBaseline.alphabetic),
              ),
              new Text(
                'textBaseline:這一行的值為TextBaseline.ideographic',
                style: new TextStyle(textBaseline: TextBaseline.ideographic),
              ),
              new Text('height: 用在Text控制元件上的時候,會乘以fontSize做為行高,所以這個值不能設定過大',
                  style: new TextStyle(
                    height: 1.0,
                  )),
              new Text('decoration: TextDecoration.overline 上劃線',
                  style: new TextStyle(
                      fontSize: 18.0,
                      color: Colors.redAccent,
                      decoration: TextDecoration.overline,
                      decorationStyle: TextDecorationStyle.wavy)),
              new Text('decoration: TextDecoration.lineThrough 刪除線',
                  style: new TextStyle(
                      decoration: TextDecoration.lineThrough,
                      decorationStyle: TextDecorationStyle.dashed)),
              new Text('decoration: TextDecoration.underline 下劃線',
                  style: new TextStyle(
                      fontSize: 18.0,
                      color: Colors.redAccent,
                      decoration: TextDecoration.underline,
                      decorationStyle: TextDecorationStyle.dotted)),
            ],
          ),
        ));
  }
}
複製程式碼

相關文章