flutter中進度條中的線性進度條,實現其3秒走完的功能搞了一段時間,主要是要使用await方法等待一段時間纔去改變其參數.
for(int i = 1; i <= 30; i++) {
// ignore: close_sinks
await Socket.connect("1.1.1.1", 8888, timeout: new Duration(milliseconds: 100)).catchError(
(e) { isShowProgressBar = true; });
String pText = "正在更新$version版本,請等待";
switch(i%4) {
case 1:
pText = "正在更新$version版本,請等待.";
break;
case 2:
pText = "正在更新$version版本,請等待..";
break;
case 3:
pText = "正在更新$version版本,請等待...";
break;
}
setState(() {
progressBar = Center(
child: Container(
margin: const EdgeInsets.fromLTRB(36.0, 0.0, 36.0, 60.0),
child: new Column(
verticalDirection: VerticalDirection.up,
children: <Widget> [
_getNameText(context, pText),
new LinearProgressIndicator(value: i/30),
]
),
),
);
});
}
其中1.1.1.1是隨便填的一個有效的ip,這樣就必須等待await的結果才改變,之前一直不能原因是異步的機制導致邏輯雖然正確但是卻不能實現想要的效果。我這使用socket連接設置timeout時間,還可以自己寫返回Future的方法去寫。