gpt4 book ai didi

Flutter:如何在不重建的情况下接收新数据和更新 Widget

转载 作者:行者123 更新时间:2023-12-03 03:21:36 24 4
gpt4 key购买 nike

我目前正面临一个烦人的设计问题,我认为这是我自己和 flutter 造成的 :D

在我的小部件中,我使用 FutureBuilder。创建小部件后,它会获取初始数据 - 一切都很好。现在我得到了一个 WebSocket 连接,它向我发送更新的数据。我将这些数据传递给我的小部件,现在我面临的问题是我更改了数据并且小部件没有重新加载或者我另外使用 setState 并且小部件将自行更新并再次获取新数据,因为它正在重建并且 futurebuilder 开始发挥作用再次。那根本没有效率。我怎样才能防止这种行为。

我想,我的 Structure 可能不适合这种 flutter 行为,因此我可能必须首先在小部件外部加载数据,通过构造函数传递 em 并在我的小部件中设置一个监听器以获取 WebSocket 通知,然后调用 setState... 对吗?

这是一个简短的示例,它确实重建并因此再次自行获取数据 -> 所以不是我想要的解决方案:

class _ExampleState extends State<Example> {

Stream wsData;

_ExampleState() {
wsData.listen((event) {
setState(() {
//update data
});
});
}

_getData() {
// Call network manager and fetch data
return {'fetchedData': 'data'};
}

@override
Widget build(BuildContext context) {
return Container(
child: FutureBuilder(
future: _getData(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.data != null) {
Text('data arrived: ' + snapshot.data.toString());
} else {
return CircularProgressIndicator();
}
}),
);
}
}

最佳答案

如果您有一个不断 self 更新的数据源,您可以使用 StreamBuilder 而不是 FutureBuilder。 StreamBuilder 监听数据源并在每次从中获取更新后重建小部件。

关于Flutter:如何在不重建的情况下接收新数据和更新 Widget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62572753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com