По сути, вы все сделали правильно.
Что вам не хватало (и это не совсем хорошо объясняется в документации), так это то, что вам нужно установить TileMode
на вашем SweepGradient
, чтобы получить ожидаемый результат.
Вот рабочий пример:
class Delete extends StatefulWidget {
Delete({Key key}) : super(key: key);
@override
_DeleteState createState() => _DeleteState();
}
class _DeleteState extends State<Delete> with SingleTickerProviderStateMixin {
Animation<double> _animation;
AnimationController _controller;
@override
void initState() {
super.initState();
_controller = AnimationController(vsync: this, duration: Duration(seconds: 5));
_animation = Tween<double>(begin: 0, end: 2 * math.pi).animate(_controller)
..addListener(() {
setState(() {});
});
_controller.repeat();
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('hello'),
),
body: Container(
width: 180,
height: 180,
padding: EdgeInsets.all(20.0),
decoration: BoxDecoration(
shape: BoxShape.circle,
gradient: SweepGradient(
colors: [Colors.blue, Colors.green, Colors.yellow, Colors.red, Colors.blue],
// stops: [0.0, 0.25, 0.5, 0.75, 1],
center: Alignment(-0.35, -0.35),
startAngle: _animation.value,
endAngle: _animation.value + (2 * math.pi),
tileMode: TileMode.repeated,
),
),
),
);
}
}
Здесь вы можете найти документы для TileMode
.