我有兩個包含自定義模型的RxLists:
var openDepartures = RxList<Departure>([]) 。
var finishedDepartures = RxList<Departure>([] )。
我系結了一個流,用Firebase的值來填充這些RxLists。由于我的流(我將其系結到變數上)會根據用戶的選擇而改變,我將新的流系結到同一個變數上,但由于這將導致兩個流控制一個變數,所以我在這之前 "重置 "了這個變數:
openDepartures = RxList<Departure> ();
finishedDepartures = RxList<Departure>();
....
openDepartures.bindStream(
資料庫().getOpenDepartures(
userController.userLocation.value,
),
);
finishedDepartures.bindStream(
資料庫().getFinishedDepartures(
userController.userLocation.value,
),
);
問題是,用戶界面沒有重繪 ,但當我不 "重置 "變數時,一切都很正常。奇怪的是,該變數確實被填充了正確的資料。它只是沒有顯示在用戶界面中。
我嘗試了哪些方法來解決這個問題:
我現在的問題是,我如何讓螢屏重繪 ,或者有誰知道如何在不 "重置 "舊流和一個變數上有多個流的情況下系結一個新的流?
uj5u.com熱心網友回復:
使用update()如
void() { foo = newData; update(); }
或者使用ProgressIndicator
如
RxBool loading = false.obs
void Foo() { loading.value = true; your logic... loading.value = false; }
并在UI中使用controller.loading.value來檢查進度,并在加載完成后顯示
uj5u.com熱心網友回復:
我最終解決了我的問題。基本問題是我將多個流系結到一個變數上,因此只要其中一個流啟動,該變數就會被更新。解決方案如下:
- 創建一個
創建一個變數的RxList:
final _openDepartureList = RxList<RxList<Departure>>();
- 為該串列的最后一個元素創建一個getter:
RxList<Departure> get openDepartures => _openDepartureList.last;
- 洗掉舊專案:
if (_openDepartureList.length >=2) {
_openDepartureList.removeRange(0, _openDepartureList.length - 1) 。
}
- 添加一個空的
RxList到串列中 。
_openDepartureList.add(RxList.empty());
_openDepartureList.last.bindStream():
這就是了! 我現在總是有正確的流系結到我想要的變數上,而不是有多個流控制一個變數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/329153.html
標籤:
