Flutter 輪詢以及根據輪詢資料,進行不同的頁面顯示
阿新 • • 發佈:2021-02-07
如下程式碼所示,在重寫的initState內部新增輪詢定時器,這樣的話在setstate((){})時定時器不會被重新開啟,,造成定時器重複新增的問題。(定時器的使用開啟和銷燬自行搜尋。)
@override
void initState() {
}
示例程式碼如下:
String lastState = "-1";
int i = 0;
getData() async {
Timer.periodic(Duration(milliseconds: 2000), (t) async {
try {
Response response = await Dio().get("http://192.168.4.1/hello");
i = i + 1;
print("資料獲取成功" + i.toString());
nowState = response.data;
if (lastState != response.data) {
if (response.data == "1" ) {
historyAdd = true;
}
stateChange = true;
}
lastState = response.data;
} catch (e) {
nowState = "-1";
lastState = "-1";
stateChange = true;
print("資料獲取失敗");
}
if(stateChange) {
setState(() {});
stateChange=false;
}
});
}
getData();
然後在widget build下面使用if對資料進行判斷,返回不同的頁面內容即可依據輪詢獲得的資料內容進行不同的頁面內容顯示。