我想知道是否可以在文本上创建渐变 扑。使用Dart的ui有gist的文本渐变,但是它有点长,我希望能更简单。
答案 0 :(得分:6)
从here开始,您可以使用Text的样式绘制器。
创建着色器,
final Shader linearGradient = LinearGradient(
colors: <Color>[Color(0xffDA44bb), Color(0xff8921aa)],
).createShader(Rect.fromLTWH(0.0, 0.0, 200.0, 70.0));
然后在TextStyle的前景中使用它
Text(
'Hello Gradients!',
style: new TextStyle(
fontSize: 60.0,
fontWeight: FontWeight.bold,
foreground: Paint()..shader = linearGradient),
)
答案 1 :(得分:2)
您可以使用ShaderMask
。记住将Text
的颜色设置为白色,就可以了
class GradientText extends StatelessWidget {
GradientText(
this.text, {
@required this.gradient,
});
final String text;
final Gradient gradient;
@override
Widget build(BuildContext context) {
return ShaderMask(
shaderCallback: (bounds) => gradient.createShader(
Rect.fromLTWH(0, 0, bounds.width, bounds.height),
),
child: Text(
text,
style: TextStyle(
// The color must be set to white for this to work
color: Colors.white,
fontSize: 40,
),
),
);
}
}
class GradientTextWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: SizedBox.expand(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
GradientText(
'Hello Flutter',
gradient: LinearGradient(colors: [
Colors.blue.shade400,
Colors.blue.shade900,
]),
),
GradientText(
'Rainbow',
gradient: LinearGradient(colors: [
Colors.red,
Colors.pink,
Colors.purple,
Colors.deepPurple,
Colors.deepPurple,
Colors.indigo,
Colors.blue,
Colors.lightBlue,
Colors.cyan,
Colors.teal,
Colors.green,
Colors.lightGreen,
Colors.lime,
Colors.yellow,
Colors.amber,
Colors.orange,
Colors.deepOrange,
]),
),
GradientText(
'Fade out',
gradient: LinearGradient(
colors: [
Colors.black,
Colors.white,
],
begin: Alignment.topLeft,
end: Alignment.bottomRight,
),
),
],
),
),
);
}
}
答案 2 :(得分:0)
看看ShaderMask。可能是最简单的解决方案 https://api.flutter.dev/flutter/widgets/ShaderMask-class.html
答案 3 :(得分:0)
See this article上面有一个很好的解释
答案 4 :(得分:0)
使用 simple_gradient_text 包并创建 GradienText
GradientText(
'Gradient Text Example',
style: TextStyle(
fontSize: 40.0,
),
colors: [
Colors.blue,
Colors.red,
Colors.teal,
],
),