LinearProgressIndicator
1 2 3 4 5 6 7 8 9
| LinearProgressIndicator({ Key key, double value, Color backgroundColor, Animation<Color> valueColor, this.minHeight, String semanticsLabel, String semanticsValue, })
|
value
:表示当前的进度,取值范围为[0,1];如果value
为null
时则指示器会执行一个循环动画(模糊进度);当value
不为null
时,指示器为一个具体进度的进度条;
backgroundColor
:设置背景颜色;
valueColor
:指示器的进度条颜色;值得注意的是,该值类型是Animation<Color>
,这允许我们对进度条的颜色也可以指定动画。如果不需要动画,也就是使用一种固定的颜色,此时我们可以通过AlwaysStoppedAnimation
来指定。
CircularProgressIndicator
1 2 3 4 5 6 7 8 9
| const CircularProgressIndicator({ Key key, double value, Color backgroundColor, Animation<Color> valueColor, this.strokeWidth = 4.0, String semanticsLabel, String semanticsValue, })
|
使用大体上和LinearProgressIndicator
一致。
进度条动画
1 2 3 4 5 6
| LinearProgressIndicator( backgroundColor: Colors.grey[200], valueColor: ColorTween(begin: Colors.grey, end: Colors.blue) .animate(_animationController), value: _animationController.value, ),
|
案例实践
Visibility
1 2 3 4 5 6 7 8 9 10 11
| Visibility({ Key key, @required this.child, this.replacement = const SizedBox.shrink(), this.visible = true, this.maintainState = false, this.maintainAnimation = false, this.maintainSize = false, this.maintainSemantics = false, this.maintainInteractivity = false, })
|
Visibility 使用简单,不做过多介绍,值得注意的一点就是除了[visible
]参数外,其他的参数不宜做动态的更改,否则会引起子组件的子树重建,导致其中的状态丢失。
简单的实践一个耗时任务的进度条的显示与隐藏:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| bool _isDelay = false;
Column( children: [ RaisedButton( onPressed: _delay, color: Colors.deepPurpleAccent, child: Text("发起耗时任务"), ), Visibility( visible: !_isDelay, child: Text("当前未发起耗时任务"), ), Visibility( visible: _isDelay, child: LinearProgressIndicator( backgroundColor: Colors.grey[200], valueColor: AlwaysStoppedAnimation(Colors.blue), ), ) ] )
_delay() async { _isDelay = ! _isDelay; Future.delayed(Duration(seconds: 3), () { _isDelay = ! _isDelay; }); }
|