FlutterComponent最佳實踐之Shadow怎么就這么簡單

設(shè)計三件寶褪储,模糊陰影和圓角寝蹈。這些在原生開發(fā)中被設(shè)計摧殘N年的東西,在Flutter中侄非,居然是輕而易舉的實現(xiàn)蕉汪。

添加Shadow

在Flutter中,Container可以使用BoxDecoration來添加Shadow逞怨,如果是單獨的Widget者疤,可以通過DecoratedBox來添加陰影。

下面我們以Container為例叠赦,演示Flutter的Shadow實現(xiàn)驹马。原始效果如圖所示。

child: Container(
  height: 100,
  width: 100,
  decoration: BoxDecoration(
    color: Colors.white,
    borderRadius: BorderRadius.circular(8),
    shape: BoxShape.rectangle,
    boxShadow: const [
      BoxShadow(),
    ],
  ),
)

在Flutter中除秀,陰影本身并不模糊糯累,其大小也足以使其可見。BoxShadow有幾個屬性可以讓我們對它進行配置鳞仙,我們將使用這三個屬性寇蚊。

  • Offset
  • Blur radius
  • Spread radius

由此可見,F(xiàn)lutter不愧是Chrome團隊的產(chǎn)物棍好,這些參數(shù)和CSS中的Shadow參數(shù)是一致的仗岸,當然這也方便了開發(fā)者和設(shè)計師的溝通允耿。

首先,我們來看一下Offset扒怖。它代表陰影相對于當前Widget的偏移量较锡,它的效果就好比我們將光源放置在物體的左上角,那么陰影將偏移至右下角這樣的效果盗痒。

我們設(shè)置Offset(4, 4)蚂蕴,效果如上所示。

你可以發(fā)現(xiàn)俯邓,陰影不會被Blur骡楼,所以,我們使用blurRadius這個參數(shù)稽鞭,來控制陰影被Blur的程度鸟整,通過spreadRadius來控制陰影向外擴散的程度,當你不設(shè)置它時朦蕴,陰影與原始Widget是同樣的大小篮条。

了解了這些參數(shù)之后,我們找到設(shè)計稿吩抓,找到相應(yīng)的參數(shù)配置涉茧,就得到了下面這個陰影。

child: Container(
  height: 100,
  width: 100,
  decoration: BoxDecoration(
    color: Colors.white,
    borderRadius: BorderRadius.circular(8),
    shape: BoxShape.rectangle,
    boxShadow: [
      BoxShadow(
        color: Colors.black.withAlpha(25),
        offset: const Offset(0, 14),
        blurRadius: 24,
        spreadRadius: 0,
      ),
    ],
  ),
)

這可能就是國內(nèi)設(shè)計師夢寐以求的陰影吧疹娶。

PhysicalModel & PhysicalShape

Flutter的組件茫茫多伴栓,PhysicalModel和PhysicalShape這兩個組件,也同樣能模擬陰影的實現(xiàn)蚓胸,但它的實現(xiàn)實際上是Material Design中的elevation的實現(xiàn)效果挣饥,代碼如下所示除师。

return Center(
  child: PhysicalModel(
    borderRadius: BorderRadius.circular(20),
    color: Colors.white,
    elevation: 16,
    shadowColor: Colors.black.withAlpha(25),
    child: const SizedBox(
      height: 100,
      width: 100,
    ),
  ),
);

Text Shadow

在TextStyle中沛膳,同樣支持Shadows參數(shù)。

child: Text(
  "中華人民共和國",
  style: TextStyle(
    fontSize: 32,
    fontWeight: FontWeight.w700,
    shadows: [
      Shadow(
        color: Colors.red.shade300,
        blurRadius: 8,
        offset: const Offset(2, 2),
      )
    ],
  ),
)

除此之外汛聚,文字陰影還有一種實現(xiàn)锹安,那就是通過BackdropFilter來進行模擬,BackdropFilter的作用也是創(chuàng)建Blur效果倚舀,所以叹哭,它也可以用來替代陰影,但是效果沒有Shadow靈活(類似的還有ImageFiltered)痕貌。

var style = const TextStyle(
  fontSize: 32,
  fontWeight: FontWeight.w700,
);
var text = "中華人民共和國";
return Center(
  child: Stack(
    children: [
      Text(
        text,
        style: style,
      ),
      BackdropFilter(
        filter: ui.ImageFilter.blur(
          sigmaX: 2,
          sigmaY: 2,
        ),
        child: Text(
          text,
          style: style,
        ),
      )
    ],
  ),
);

Neumorphism

Neumorphism是一種全新的設(shè)計風格风罩,通常被稱為新的擬物風格,它其實就是通過陰影來實現(xiàn)的舵稠。

擬態(tài)陰影通常都由兩個Shadow組合而成超升,一個Shadow比Widget Color更淺入宦,另一個Shadow更深,我們通過下面這個例子來看下如何實現(xiàn)擬態(tài)陰影室琢。

return Center(
  child: Text(
    '中華人民共和國',
    style: TextStyle(
      fontWeight: FontWeight.bold,
      fontSize: 40,
      shadows: [
        const Shadow(
          offset: Offset(3, 3),
          color: Colors.black38,
          blurRadius: 10,
        ),
        Shadow(
          offset: const Offset(-3, -3),
          color: Colors.white.withOpacity(0.85),
          blurRadius: 10,
        ),
      ],
      color: Colors.grey.shade300,
    ),
  ),
);

在shadows中配置兩個相對于中心互相偏離的Shadow乾闰,并使得它們的顏色是互補的,例如黑和白盈滴,而Widget Color通常和背景色相同涯肩。

例如下面這樣的配置:

light mode:
Background color: Color(0xFFEFEEEE)
Light shadow: Colors.white.withOpacity(0.8),
Dark shadow: Colors.black.withOpacity(0.1)

dark mode:
Background color: Color(0xFF292D32)
Light shadow: Colors.white.withOpacity(0.1),
Dark shadow: Colors.black.withOpacity(0.4)

如果是Container的話,類似上面的Shadow實現(xiàn)巢钓,代碼如下所示病苗。

return Center(
  child: Container(
    height: 200,
    width: 200,
    decoration: BoxDecoration(
      borderRadius: BorderRadius.circular(16),
      color: Colors.grey.shade300,
      boxShadow: [
        const BoxShadow(
          offset: Offset(10, 10),
          color: Colors.black38,
          blurRadius: 20,
        ),
        BoxShadow(
          offset: const Offset(-10, -10),
          color: Colors.white.withOpacity(0.85),
          blurRadius: 20,
        ),
      ],
    ),
  ),
);

由此可見,擬物陰影的核心症汹,實際上就是兩組互補色的陰影疊加铅乡,當Widget Color和背景色相同時,在邊緣就會產(chǎn)生類似擬物的陰影風格烈菌。

通過下面這個工具阵幸,你可以方便的設(shè)計擬物陰影,找到不同的顏色下的最佳效果芽世。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挚赊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子济瓢,更是在濱河造成了極大的恐慌荠割,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旺矾,死亡現(xiàn)場離奇詭異蔑鹦,居然都是意外死亡,警方通過查閱死者的電腦和手機箕宙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門嚎朽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人柬帕,你說我怎么就攤上這事哟忍。” “怎么了陷寝?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵锅很,是天一觀的道長。 經(jīng)常有香客問我凤跑,道長爆安,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任仔引,我火速辦了婚禮扔仓,結(jié)果婚禮上致扯,老公的妹妹穿的比我還像新娘。我一直安慰自己当辐,他們只是感情好抖僵,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著缘揪,像睡著了一般耍群。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上找筝,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天蹈垢,我揣著相機與錄音,去河邊找鬼袖裕。 笑死曹抬,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的急鳄。 我是一名探鬼主播谤民,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼疾宏!你這毒婦竟也來了张足?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤坎藐,失蹤者是張志新(化名)和其女友劉穎为牍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體岩馍,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡碉咆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛀恩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疫铜。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赦肋,靈堂內(nèi)的尸體忽然破棺而出块攒,到底是詐尸還是另有隱情励稳,我是刑警寧澤佃乘,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站驹尼,受9級特大地震影響趣避,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜新翎,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一程帕、第九天 我趴在偏房一處隱蔽的房頂上張望住练。 院中可真熱鬧,春花似錦愁拭、人聲如沸讲逛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盏混。三九已至,卻和暖如春惜论,著一層夾襖步出監(jiān)牢的瞬間许赃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工馆类, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留混聊,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓乾巧,卻偏偏與公主長得像句喜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子沟于,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

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

  • 對頁面來說文字就是靈魂藤滥,因此美化文字的工作必不可少。除了加載漂亮的字體外社裆,還可以用text-shadow文本陰影給...
    張歆琳閱讀 1,400評論 0 12
  • github地址 系統(tǒng)控件 TextView一個功能強大的TextView拙绊,可以滿足日常大部分布局方式Facebo...
    哇哇_劉閱讀 767評論 0 5
  • 設(shè)計圖如上,關(guān)于那個陰影漸變的實現(xiàn)泳秀。最初的時候标沪,我是采用漸變實現(xiàn),結(jié)果發(fā)現(xiàn)在手機上測試的時候嗜傅,變成了一個灰色的條金句,...
    EJRoxy閱讀 641評論 0 0
  • Dart 控件 https://api.flutter.dev/flutter/widgets/widgets-l...
    CodingTom閱讀 1,656評論 0 3
  • 我對任何美的東西都會本能地生出一種愛,在CSS的世界里吕嘀,凡和色彩漸變等沾邊的屬性都是我的菜违寞。因此box-shado...
    張歆琳閱讀 6,615評論 6 33