flutter - 如何在颤动中绘制半个图标
问题描述
我需要带有不同颜色的两个部分的圆形图标。
我尝试使用 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);
},
);
}
}
解决方案
作为选项
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]),
),
);
}
}
如何使用:
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),
),
);
}
}
推荐阅读
- jolt - 将 JOLT 转换应用于 JSON 数据
- uniface - 2012 - 表单中的出现与数据库出现不匹配
- python - 在具有重复键的字典(带有值数组)中查找值
- java - rabbitmq的奇怪消息正文字节大小
- sequelize.js - 如何在数据插入期间正确定义 Sequelize 关联
- java - ClusterHealthResponse 未返回 Elastic Search 6.8 中的所有索引
- excel - VBA Excel在循环创建的最后一行之外添加值和公式
- reactjs - AntDesign TimePicker 作为 Material UI 中的输入组件
- shell - jenkins groovy shell curl命令不起作用
- r - 如何用一系列数字替换字符特定部分中的值