Flutter 带有里程碑/步骤分隔符的循环式进度指示器(例如1/3、2/3、3/3)
你好,弗利特社区 我要创建此自定义CircularProgressIndicator: 对于文本,我构建了一个堆栈:Flutter 带有里程碑/步骤分隔符的循环式进度指示器(例如1/3、2/3、3/3),flutter,dart,Flutter,Dart,你好,弗利特社区 我要创建此自定义CircularProgressIndicator: 对于文本,我构建了一个堆栈: 堆栈( 儿童:[ 容器( 身高:75.0, 宽度:75.0, 子对象:循环压缩机指示器( 冲程宽度:6.0, 背景颜色:颜色。来自RGBO(230、230、230、1.0), valueColor:始终停止动画( 颜色。来自RGBO(252,90,73,1.0)), 数值:0.4, ), ), 定位( 子:容器( 身高:75.0, 宽度:75.0, 儿童:中心( 儿童:文本(“
堆栈(
儿童:[
容器(
身高:75.0,
宽度:75.0,
子对象:循环压缩机指示器(
冲程宽度:6.0,
背景颜色:颜色。来自RGBO(230、230、230、1.0),
valueColor:始终停止动画(
颜色。来自RGBO(252,90,73,1.0)),
数值:0.4,
),
),
定位(
子:容器(
身高:75.0,
宽度:75.0,
儿童:中心(
儿童:文本(“第2页,共6页”),
),
),
),
],
),
我想画六条线,从中心到终点旋转+60°(步数/360°),但我不知道怎么做
有没有一种优雅的方式来实现这一点
来自德国的欢呼声
编辑(1):
我找到了一个解决方案,但我不满意:
堆叠(
儿童:[
容器(
身高:75.0,
宽度:75.0,
子对象:循环压缩机指示器(
冲程宽度:6.0,
背景颜色:颜色。来自RGBO(230、230、230、1.0),
valueColor:始终停止动画(
颜色。来自RGBO(252,90,73,1.0)),
价值:2/6,
),
),
定位(
身高:75.0,
宽度:75.0,
儿童:中心(
孩子:定制油漆(
画家:拉丝镭线(
金额:6,
厚度:4,
长度:75,
颜色:颜色。白色),
),
),
),
定位(
子:容器(
身高:75.0,
宽度:75.0,
儿童:中心(
儿童:文本(“第2页,共6页”),
),
),
),
],
),
这一类的拉丝半径:
class DrawRadialLines扩展了CustomPainter{
油漆;
最终双层厚度;
最终双倍金额;
最终双倍长度;
最终颜色;
DrawRadialLines({this.this.this.amount,this.length,this.color}){
_油漆=油漆()
…颜色=这个
..冲程宽度=此厚度
..strokeCap=strokeCap.round;
}
@凌驾
空心油漆(帆布,尺寸){
最终双冲程厚度=厚度;
最终双旋转直线=360/数量;
最终双倍长度=长度/2+冲程厚度;
canvas.rotate(-90*(3.1415926/180));//旋转使其从顶部开始
对于(int i=0;i
它将输出以下内容:
但是,还有更优雅的解决方案吗?您可以向新的
堆栈添加分隔符,如下所示:
首先,将alignmentdirective.center
添加到堆栈中,并将新堆栈添加到现有堆栈中
Stack(
alignment: AlignmentDirectional.center,
children: [
Container(
height: 75.0,
width: 75.0,
child: CircularProgressIndicator(
strokeWidth: 6.0,
backgroundColor: Color.fromRGBO(230, 230, 230, 1.0),
valueColor: AlwaysStoppedAnimation<Color>(Color.fromRGBO(252, 90, 73, 1.0)),
value: 0.4,
),
),
Positioned(
child: Container(
height: 75.0,
width: 75.0,
child: Center(
child: Text("2 of 6"),
),
),
),
Stack(
children: buildSeparators(6),
),
],
),
这是可以改进的,但这就是想法
List<Widget> buildSeparators(int nbSeparators) {
var sep = <Widget>[];
for (var i = 0; i < nbSeparators; i++) {
sep.add(
Transform.rotate(
angle: i * 1 / nbSeparators * 2 * pi,
child: Container(
width: 10,
height: 81,
child: Column(
children: <Widget>[
Container(
width: 8,
height: 10,
color: Colors.white,
)
],
),
),
),
);
}
return sep;
}