Flutter實(shí)戰(zhàn) 裝飾容器DecoratedBox

2021-03-08 10:31 更新

DecoratedBox可以在其子組件繪制前(或后)繪制一些裝飾(Decoration),如背景、邊框、漸變等。DecoratedBox定義如下:

  1. const DecoratedBox({
  2. Decoration decoration,
  3. DecorationPosition position = DecorationPosition.background,
  4. Widget child
  5. })

  • decoration:代表將要繪制的裝飾,它的類型為Decoration。Decoration是一個(gè)抽象類,它定義了一個(gè)接口 createBoxPainter(),子類的主要職責(zé)是需要通過實(shí)現(xiàn)它來創(chuàng)建一個(gè)畫筆,該畫筆用于繪制裝飾。

  • position:此屬性決定在哪里繪制Decoration,它接收DecorationPosition 的枚舉類型,該枚舉類有兩個(gè)值:

  • background:在子組件之后繪制,即背景裝飾。
  • foreground:在子組件之上繪制,即前景。

#BoxDecoration

我們通常會(huì)直接使用BoxDecoration類,它是一個(gè) Decoration 的子類,實(shí)現(xiàn)了常用的裝飾元素的繪制。

  1. BoxDecoration({
  2. Color color, //顏色
  3. DecorationImage image,//圖片
  4. BoxBorder border, //邊框
  5. BorderRadiusGeometry borderRadius, //圓角
  6. List<BoxShadow> boxShadow, //陰影,可以指定多個(gè)
  7. Gradient gradient, //漸變
  8. BlendMode backgroundBlendMode, //背景混合模式
  9. BoxShape shape = BoxShape.rectangle, //形狀
  10. })

各個(gè)屬性名都是自解釋的,詳情讀者可以查看 API 文檔。下面我們實(shí)現(xiàn)一個(gè)帶陰影的背景色漸變的按鈕:

  1. DecoratedBox(
  2. decoration: BoxDecoration(
  3. gradient: LinearGradient(colors:[Colors.red,Colors.orange[700]]), //背景漸變
  4. borderRadius: BorderRadius.circular(3.0), //3像素圓角
  5. boxShadow: [ //陰影
  6. BoxShadow(
  7. color:Colors.black54,
  8. offset: Offset(2.0,2.0),
  9. blurRadius: 4.0
  10. )
  11. ]
  12. ),
  13. child: Padding(padding: EdgeInsets.symmetric(horizontal: 80.0, vertical: 18.0),
  14. child: Text("Login", style: TextStyle(color: Colors.white),),
  15. )
  16. )

運(yùn)行后效果如圖5-9所示:

圖5-9

怎么樣,通過BoxDecoration我們實(shí)現(xiàn)了一個(gè)漸變按鈕的外觀,但此示例還不是一個(gè)標(biāo)準(zhǔn)的按鈕,因?yàn)樗€不能響應(yīng)點(diǎn)擊事件,我們將在后面“自定義組件”一章中實(shí)現(xiàn)一個(gè)完整功能的GradientButton。另外,上面的例子中使用了LinearGradient類,它用于定義線性漸變的類,F(xiàn)lutter 中還提供了其它漸變配置類,如RadialGradient、SweepGradient,讀者若有需要可以自行查看 API 文檔。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號