bih*_*ris 5 flutter flutter-layout
我需要带有两部分的圆角圆圈图标,具有不同的颜色。
我尝试使用 ShadeMask 我的尝试似乎非常失败。
注意:我不需要渐变,只需一部分是一种颜色,另一部分是另一种颜色
class HalfFilledIcon extends StatelessWidget {
HalfFilledIcon(
this.icon,
this.size,
this.gradient,
);
final IconData icon;
final double size;
final Gradient gradient;
@override
Widget build(BuildContext context) {
return ShaderMask(
child: SizedBox(
width: size,
height: size,
child: Icon(
icon,
size: size,
color: Colors.grey[300],
),
),
shaderCallback: (Rect bounds) {
final Rect rect = Rect.fromLTRB(0, 0, size / 2, 0);
return gradient.createShader(rect);
},
);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
作为一个选项
class HalfFilledIcon extends StatelessWidget {
final IconData icon;
final double size;
final Color color;
HalfFilledIcon({this.icon, this.size, this.color});
@override
Widget build(BuildContext context) {
return ShaderMask(
blendMode: BlendMode.srcATop,
shaderCallback: (Rect rect) {
return LinearGradient(
stops: [0, 0.5, 0.5],
colors: [color, color, color.withOpacity(0)],
).createShader(rect);
},
child: SizedBox(
width: size,
height: size,
child: Icon(icon, size: size, color: Colors.grey[300]),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用:
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(debugShowCheckedModeBanner: false, home: Home()));
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: HalfFilledIcon(icon: Icons.circle, size: 80, color: Colors.green),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1726 次 |
| 最近记录: |