Flutter實戰】文字元件及五大案例
阿新 • • 發佈:2020-06-11
![](https://img2020.cnblogs.com/other/467322/202006/467322-20200611072132652-387682408.png)
> 老孟導讀:大家好,這是【Flutter實戰】系列文章的第二篇,這一篇講解文字元件,文字元件包括文字展示元件(Text和RichText)和文字輸入元件(TextField),基礎用法和五個案例助你快速掌握。
> 第一篇連結:[【Flutter實戰】移動技術發展史](https://juejin.im/post/5edec7c7f265da771b2fee5b)
### Text
Text是顯示文字的元件,最常用的元件,沒有之一。基本用法如下:
```dart
Text('老孟')
```
![](https://img2020.cnblogs.com/other/467322/202006/467322-20200611072133101-1559860358.png)
**注意:Text元件一定要包裹在Scaffold元件下,否則效果如下:**
![](https://img2020.cnblogs.com/other/467322/202006/467322-20200611072133317-1012650688.png)
文字的樣式在`style`中設定,型別為`TextStyle`,`TextStyle`中包含很多文字樣式屬性,下面介紹一些常用的。
設定文字大小和顏色:
```dart
Text('老孟',style: TextStyle(color: Colors.red,fontSize: 20),),
```
![](https://img2020.cnblogs.com/other/467322/202006/467322-20200611072133618-1971700812.png)
上面黑色的字型為沒有設定的效果,作為對比。
設定字型粗細:
```dart
Text('老孟',style: TextStyle(fontWeight: FontWeight.bold))
```
![](https://img2020.cnblogs.com/other/467322/202006/467322-20200611072133855-943356364.png)
字型粗細共有9個級別,為`w100`至`w900`,**FontWeight.bold**是`w700`。
設定斜體:
```dart
Text('老孟',style: TextStyle(fontStyle: FontStyle.italic,))
```
![](https://img2020.cnblogs.com/other/467322/202006/467322-20200611072134115-11052481.png)
設定自定義的字型:
1. 首先下載字型庫(比如中華字型庫)
2. 將字型檔案拷貝的專案中,一般目錄是:assets/fonts/,assets和fonts都需要手動建立,此目錄不是必須的,而是約定俗成,資源一般都放在assets目錄下。
3. 配置`pubspec.yaml`:
```dart
fonts:
- family: maobi
fonts:
- asset: assets/fonts/maobi.ttf
```
maobi:是自己對當前字型的命名,有意義即可。
asset:字型檔案的目錄。
使用:
```dart
Text('老孟', style: TextStyle(fontFamily: 'maobi',)),
```
![](https://img2020.cnblogs.com/other/467322/202006/467322-20200611072134448-1950776673.png)
設定對齊方式:
```dart
Container(
height: 100,
width: 200,
color: Colors.blue.withOpacity(.4),
child: Text('老孟', textAlign: TextAlign.center),
),
```
![](https://img2020.cnblogs.com/other/467322/202006/467322-20200611072134900-1953534415.png)
`textAlign`只是控制水平方向的對齊方式,值說明如下:
- left:左對齊
- right:右對齊
- center:居中
- justify:兩端對齊,此屬性中文存在bug(Flutter版本:1.17.3)也可以在[官方issue中關注此問題](https://github.com/flutter/flutter/issues/35734)
- start:前端對齊,和`TextDirection`屬性有關,如果設定`TextDirection.ltr`,則左對齊,設定`TextDirection.rtl`則右對齊。
- end:末端對齊,和`TextDirection`屬性有關,如果設定`TextDirection.ltr`,則右對齊,設定`TextDirection.rtl`則左對齊。
設定文字自動換行:
```dart
Container(
height: 100,
width: 200,
color: Colors.blue.withOpacity(.4),
child: Text('老孟,專注分享Flutter技術和應用實戰',softWrap: true,),
)
```
![](https://img2020.cnblogs.com/other/467322/202006/467322-20200611072135174-387147946.png)
文字超出範圍時的處理:
```dart
Container(
height: 100,
width: 200,
color: Colors.blue.withOpacity(.4),
child: Text('老孟,專注分享Flutter技術和應用實戰',overflow: TextOverflow.ellipsis,),
)
```
![](https://img2020.cnblogs.com/other/467322/202006/467322-20200611072136025-391512219.png)
溢位的處理方式:
- clip:直接裁剪。
- fade:越來越透明。
- ellipsis:省略號結尾。
- visible:依然顯示,此時將會溢位父元件。
設定全域性字型樣式:
在`MaterialApp`的`theme`中設定如下
```dart
MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
...
textTheme: TextTheme(
bodyText2: TextStyle(color: Colors.red,fontSize: 24),
)
),
home: Scaffold(
body: TextDemo(),
),
)
```
Text元件預設為紅色,
```dart
Text('老孟'),
Text('老孟',style: TextStyle(color: Colors.blue,fontSize: 20),),
```
![](https://img2020.cnblogs.com/other/467322/202006/467322-20200611072136204-1897157196.png)
### RichText
RichText的屬性和Text基本一樣,使用如下:
```dart
RichText(
text: TextSpan(
style: DefaultTextStyle.of(context).style,
children: