我正忙于構建一個使用MQTT作為通信通道的應用程式。資料是以異步方式通過流的方式進入的。所以我想以雙向通信的方式使用MQTT。我一開始就為用戶建立了一個登錄對話框。當用戶點擊登錄時,應用程式將在服務器正在監聽的主題上發送一個命令,應用程式需要等待,而不是洗掉登錄對話框,并向用戶顯示一個旋轉器以顯示應用程式正在等待。該應用程式將在其正在監聽的另一個主題上收到其答案,服務器將在該主題上發送結果。
所以我的問題是這樣的。什么是讓登錄對話框阻塞/等待,直到我們在服務器將發送的主題上獲得訊息的最佳方法。該資料將以流的形式出現,不屬于登錄呼叫的一部分。我確實可以通過提供者訪問這些資料。那么我如何向阻塞的對話框發送訊息以繼續。我看到的所有例子都是在呼叫API時使用await。API會在同一個呼叫中回傳。在我的例子中,API將不會回傳,因為它是以同步方式運行的。如果我們沒有從服務器獲得回應,我還希望在阻塞/等待的登錄對話框中設定超時。
因此,我需要等待(如何等待? 我是否需要坐在睡眠的 while 回圈中? 是否有更好的方法?),直到我在一個主題上獲得資料,然后繼續獲得資料或超時。我的MQTT都在作業,只是需要找出最好的方法來等待/阻塞,然后將資料傳遞給等待/阻塞函式,告訴它繼續。
uj5u.com熱心網友回復:
所以我的作業方式是這樣的。不確定是否有更好的方法,但這個方法100%有效。
//更新結果
appState.loginResult = 'X'/span>;
timeoutCounter = 0;
//We sit in the loop until the data changes from X
while (appState.loginResult == 'X'/span>) {
await Future.delayed(Duration( milliseconds: 200)) 。
timeoutCounter 。
if (timeoutCounter >= 25) {
appState.loginResult = 'T'。
uj5u.com熱心網友回復:
你可以在你的活動/片段中存盤一個對對話框的參考。你可以保持它,只是不要關閉它?然后無論你有什么邏輯,你都可以簡單地以某種方式(通過回呼或介面)呼叫該對話框。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/308334.html
標籤:
