无障碍 关怀版

FlutterComponent最佳实践之Shadow怎么就这么简单

点击上方 蓝字关注我,知识会给你力量

设计三件宝,模糊阴影和圆角。这些在原生开发中被设计摧残N年的东西,在Flutter中,居然是轻而易举的实现。

添加Shadow

在Flutter中,Container可以使用BoxDecoration来添加Shadow,如果是单独的Widget,可以通过DecoratedBox来添加阴影。

下面我们以Container为例,演示Flutter的Shadow实现。原始效果如图所示。

image-20220224151814634 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

Offset

Blur radius

Spread radius

由此可见,Flutter不愧是Chrome团队的产物,这些参数和CSS中的Shadow参数是一致的,当然这也方便了开发者和设计师的沟通。

由此可见,Flutter不愧是Chrome团队的产物,这些参数和CSS中的Shadow参数是一致的,当然这也方便了开发者和设计师的沟通。

首先,我们来看一下Offset。它代表阴影相对于当前Widget的偏移量,它的效果就好比我们将光源放置在物体的左上角,那么阴影将偏移至右下角这样的效果。

image-20220224151945103

我们设置Offset(4, 4),效果如上所示。

你可以发现,阴影不会被Blur,所以,我们使用blurRadius这个参数,来控制阴影被Blur的程度,通过spreadRadius来控制阴影向外扩散的程度,当你不设置它时,阴影与原始Widget是同样的大小。

了解了这些参数之后,我们找到设计稿,找到相应的参数配置,就得到了下面这个阴影。

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,

),

],

),

)

image-20220224152949751

这可能就是国内设计师梦寐以求的阴影吧。

PhysicalModel & PhysicalShape

Flutter的组件茫茫多,PhysicalModel和PhysicalShape这两个组件,也同样能模拟阴影的实现,但它的实现实际上是Material Design中的elevation的实现效果,代码如下所示。

returnCenter(

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参数。

child: Text(

"中华人民共和国",

style: TextStyle(

fontSize: 32,

fontWeight: FontWeight.w700,

shadows: [

Shadow(

color: Colors.red.shade300,

blurRadius: 8,

offset: const Offset(2, 2),

)

],

),

)

image-20220224153828445

除此之外,文字阴影还有一种实现,那就是通过BackdropFilter来进行模拟,BackdropFilter的作用也是创建Blur效果,所以,它也可以用来替代阴影,但是效果没有Shadow灵活(类似的还有ImageFiltered)。

var style = const TextStyle(

fontSize: 32,

fontWeight: FontWeight.w700,

);

var text = "中华人民共和国";

returnCenter(

child: Stack(

children: [

Text(

text,

style: style,

),

BackdropFilter(

filter: ui.ImageFilter.blur(

sigmaX: 2,

sigmaY: 2,

),

child: Text(

text,

style: style,

),

)

],

),

);

Neumorphism

Neumorphism是一种全新的设计风格,通常被称为新的拟物风格,它其实就是通过阴影来实现的。

拟态阴影通常都由两个Shadow组合而成,一个Shadow比Widget Color更浅,另一个Shadow更深,我们通过下面这个例子来看下如何实现拟态阴影。

returnCenter(

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)

image-20220224173701958

如果是Container的话,类似上面的Shadow实现,代码如下所示。

returnCenter(

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,

),

],

),

),

);

image-20220224174519753

由此可见,拟物阴影的核心,实际上就是两组互补色的阴影叠加,当Widget Color和背景色相同时,在边缘就会产生类似拟物的阴影风格。

通过下面这个工具,你可以方便的设计拟物阴影,找到不同的颜色下的最佳效果。

https://neumorphism.io/#55b9f3

image-20220302215228378

向大家推荐下我的网站 https://xuyisheng.top/点击原文一键直达

专注 Android-Kotlin-Flutter 欢迎大家访问

往期推荐

  • FlutterComponent最佳实践之色彩管理
  • Flutter布局指南之深入理解BoxConstraints
  • Flutter混编工程之轻量化改造
  • 不懂设计的产品不是好开发

本文原创公众号:群英传,授权转载请联系微信(Tomcat_xu),授权后,请在原创发表24小时后转载。

< END >

作者:徐宜生

更文不易,点个“三连”支持一下👇 返回搜狐,查看更多

责任编辑:

平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
阅读 ()

玻璃钢生产厂家西安商场美陈租摆能做吗江门发光景观玻璃钢雕塑内蒙古玻璃钢雕塑哪家好广州玻璃钢人物雕塑菏泽玻璃钢雕塑定制价格无棣玻璃钢花盆花器红色玻璃钢卡通雕塑图片中国玻璃钢雕塑集中地苏州仿石材玻璃钢花盆乐陵玻璃钢雕塑甘南玻璃钢雕塑销售牡丹江玻璃钢雕塑制作湛江动物玻璃钢雕塑商场秋冬美陈布置北海玻璃钢座椅雕塑厂家玻璃钢雕塑属于哪个行业天津玻璃钢雕塑厂招聘玻璃钢雕塑专业朝阳区商场美陈图纸动物玻璃钢雕塑施工哪家好抚州户内玻璃钢雕塑优势韶关玻璃钢酒瓶雕塑顺义玻璃钢海洋雕塑赣州玻璃钢雕塑厂招聘信息主题玻璃钢雕塑生产江苏商场美陈销售厂家广州组合式玻璃钢花盆南京广场玻璃钢花盆商场玻璃钢美陈花盆玻璃钢雕塑金牛香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化