為了演示這個問題,讓我為一個FutureBuilder.
FutureBuilder(future: _myFuture, builder: (context, snapshot) {
if(snapshot.hasData) {
// !!!! IMPORTANT !!!
// Pay attention to the _isFirstText variable below
return SizedBox(
child: _isFirstText ? Text(snapshot.data.firstText) : Text(snapshot.data.secondText),
);
}
if(snapshot.connectionState == ConnectionState.isWaiting) {
return Text('Waiting!');
}
return Text('Error');
}),
正如我在上面代碼的注釋中提到的,注意_isFirstText變數。假設這是一個狀態變數。在未來的構建器中,如何獲得與isFirstText狀態變數更改相對應的正確回傳值。
我也遇到過這個堆疊溢位帖子,但無法使代碼作業。
我還遇到了一個名為 的小部件StatefulBuilder,但我不知道FutureBuilder我應該在哪里使用它。
有人可以幫忙嗎?
uj5u.com熱心網友回復:
如果您想收聽正在進行的更改,您可以使用 Streambuilder。流不僅用于服務器端更改,還可以在本地使用。
您可以像這樣自己構建一個流:
StreamController myStreamController = StreamController<int>();
要通過此控制器發送新事件,您可以執行以下操作
myStreamController.sink.add(newValue);
然后你可以聽這樣的變化:
@override
Widget build(BuildContext context) {
return StreamBuilder<int>(
stream: myStreamController.stream,
builder: (context, snapshot) {
final value = snapshot.data;
return Text(value!.toString());
}
如果您想了解更多資訊,請查看此視頻:https : //youtu.be/nQBpOIHE4eE
如果這有幫助,請告訴我。
uj5u.com熱心網友回復:
您可以使用 ValueNotifier 變數并使用 notifyListeners() 更新代碼的特定部分,如下所示:
ValueListenableBuilder 并使用該 ValueNotifier 變數并收聽它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/383466.html
