如何监听 FutureBuilder 小部件内的状态变化并反映状态变化?
How to listen for state changes inside a FutureBuilder widget and reflect the state change?
为了演示问题,让我写下一些代码 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
变量。假设这是一个状态变量。 在 future 构建器中,如何获得与 isFirstText
状态变量变化对应的正确 return 值。
我也遇到了 this stack overflow post 但无法使代码正常工作。
我还遇到了一个名为 StatefulBuilder
的小部件,但我不知道我应该在 FutureBuilder
中的什么地方使用它。
有人可以帮忙吗?
如果您想收听正在进行的更改,可以使用 Streambuilder。流不仅可以用于服务器端更改,还可以在本地使用。
您可以像这样自己构建 Stream :
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
如果有帮助请告诉我。
您可以使用 ValueNotifier 变量并使用 notifyListeners() 来更新代码的特定部分,如下所示:
ValueListenableBuilder 并使用该 ValueNotifier 变量并收听它。
为了演示问题,让我写下一些代码 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
变量。假设这是一个状态变量。 在 future 构建器中,如何获得与 isFirstText
状态变量变化对应的正确 return 值。
我也遇到了 this stack overflow post 但无法使代码正常工作。
我还遇到了一个名为 StatefulBuilder
的小部件,但我不知道我应该在 FutureBuilder
中的什么地方使用它。
有人可以帮忙吗?
如果您想收听正在进行的更改,可以使用 Streambuilder。流不仅可以用于服务器端更改,还可以在本地使用。
您可以像这样自己构建 Stream :
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
如果有帮助请告诉我。
您可以使用 ValueNotifier 变量并使用 notifyListeners() 来更新代码的特定部分,如下所示:
ValueListenableBuilder 并使用该 ValueNotifier 变量并收听它。