Rob*_*ens 13 gradient dart flutter blend-mode
我试图复制我的设计师为应用程序所做的登录屏幕设计.
背景图像使用了softLight的blendMode,其结果是它与之混合的颜色是渐变颜色.其次,实际上有两层不同的渐变(一个紫色渐变,一个蓝色渐变)
原始图片:
最终的渐变图像
现在我尝试使用colorBlendMode,例如
Image.asset(
'assets/pioneer-party.jpg',
fit: BoxFit.cover,
color: Color(0xff0d69ff).withOpacity(1.0),
colorBlendMode: BlendMode.softLight,
),
Run Code Online (Sandbox Code Playgroud)
问题是颜色属性只需要一种颜色.
然后我尝试了BoxDecoration,例如
DecoratedBox(
decoration: new BoxDecoration(
color: const Color(0xff7c94b6),
image: new DecorationImage(
fit: BoxFit.cover,
colorFilter: new ColorFilter.mode(Colors.purple.withOpacity(1.0), BlendMode.softLight),
image: new NetworkImage(
'http://www.allwhitebackground.com/images/2/2582-190x190.jpg',
),
),
),
),
Run Code Online (Sandbox Code Playgroud)
这仍然让我遇到同样的问题.然后,我尝试单独堆叠每个图层,然后使用渐变来使其看起来接近设计,例如
Image.asset(
'assets/pioneer-party.jpg',
fit: BoxFit.cover,
color: Color(0xff0d69ff).withOpacity(1.0),
colorBlendMode: BlendMode.softLight,
),
DecoratedBox(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: FractionalOffset.topCenter,
end: FractionalOffset.bottomCenter,
colors: [
Color(0xff0d69ff).withOpacity(0.0),
Color(0xff0069ff).withOpacity(0.8),
],
),
),
),
DecoratedBox(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: FractionalOffset.topLeft,
end: FractionalOffset.bottomRight,
colors: [
Color(0xff692eff).withOpacity(0.8),
Color(0xff642cf4).withOpacity(0.8),
Color(0xff602ae9).withOpacity(0.8),
Color(0xff5224c8).withOpacity(0.8),
Color(0xff5e29e5).withOpacity(0.8),
],
stops: [0.0,0.25,0.5,0.75,1.0]
),
),
),
Run Code Online (Sandbox Code Playgroud)
这让我有点接近我想要的,但不完全是我需要的.
有谁知道实现这一目标的方法?
编辑:
我也在考虑将两个图像混合在一起,但除了使用不透明度之外,还没有找到一种方法.理想情况下,它希望它本地呈现而不是使用"hacks"来实现它.
小智 22
使用Stack可以轻松实现此效果。
Stack(children: <Widget>[
Container(
decoration: BoxDecoration(
color: Colors.transparent,
image: DecorationImage(
fit: BoxFit.fill,
image: AssetImage(
'images/bg.jpg',
),
),
),
height: 350.0,
),
Container(
height: 350.0,
decoration: BoxDecoration(
color: Colors.white,
gradient: LinearGradient(
begin: FractionalOffset.topCenter,
end: FractionalOffset.bottomCenter,
colors: [
Colors.grey.withOpacity(0.0),
Colors.black,
],
stops: [
0.0,
1.0
])),
)
]),
Run Code Online (Sandbox Code Playgroud)
干杯
小智 17
我的解决方案是用shaderMask包装我的图像,这是一个对我有用的例子
ShaderMask(
shaderCallback: (bounds) {
return LinearGradient(
colors: node.badge!.colorsArray,
).createShader(bounds);
},
child: Image.asset(
Assets.main_logo,
height: 27.0,
fit: BoxFit.cover,
),
blendMode: BlendMode.srcATop,
),
Run Code Online (Sandbox Code Playgroud)
如果您参考 BlendMode 文档https://docs.flutter.io/flutter/dart-ui/BlendMode-class.html,您实际上可以找到您需要的内容

Cop*_*oad 15
你也可以试试这个:
ColorFiltered(
colorFilter: ColorFilter.mode(Colors.red.withOpacity(0.4), BlendMode.srcOver),
child: YourWidget(),
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9410 次 |
| 最近记录: |