我正在尝试复制设计师设计的应用程序登录屏幕。
背景图像使用softLight的blendMode,要注意的是它与之混合的颜色是渐变色。其次,实际上存在两层不同的渐变(一层为紫色渐变,一层为蓝色渐变)
原始图片:
最终渐变图像
现在我已经尝试使用colorBlendMode,例如
Image.asset(
'assets/pioneer-party.jpg',
fit: BoxFit.cover,
color: Color(0xff0d69ff).withOpacity(1.0),
colorBlendMode: BlendMode.softLight,
),
问题在于color属性只能采用一种颜色。
然后我尝试了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',
),
),
),
),
哪个仍然让我遇到同样的问题。然后,我尝试分别堆叠每个图层,然后使用渐变进行播放,以使其看起来更接近设计,例如
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]
),
),
),
这使我在某种程度上接近我想要的东西,但并不能完全满足我的需求。
有人知道实现这一目标的方法吗?
编辑:
我也在考虑将两个图像融合在一起,但是除了使用不透明性之外,没有找到其他方法。理想情况下,它希望本机呈现而不是使用“ hacks”来实现。
答案 0 :(得分:5)
使用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
])),
)
]),
欢呼
答案 1 :(得分:3)
您也可以尝试以下方法:
ColorFiltered(
colorFilter: ColorFilter.mode(Colors.red.withOpacity(0.4), BlendMode.srcOver),
child: YourWidget(),
)