我有一个带有3个标签的TabView。每个选项卡页面都是一个StatelessWidget,其中包含StreamBuilder(用于显示父记录的特定数据记录)和bloc
对象(用于数据操作)。仅当我选择所需的选项卡并激活StreamBuilder以显示数据时,才需要启动(从Internet)获取信息。
现在,我正在使用WidgetBinding.instance.addPostFrameCallback
(在每个选项卡页面中)调用bloc.getDataPage
函数,该函数发送一些内容到流中,然后该流又从Internet接收数据并返回Observable,该值由StreamBuilder侦听。 / p>
来自Internet的数据取决于页号,页号在每次bloc.getDataPage
时都增加,并且从1
开始。
当我从标签页1
切换到标签页3
时发生了问题。在切换期间,标签页build
的{{1}}功能被也称为(!)(此外,它被称为2次!!!),并且请求的页码增加了(对于{ {1}})。当我切换到页面2
时,错误的页码(必须为bloc 2
!)用于请求。自然,我的数据不正确。
那么如何正确实现所需的功能?还是如何禁用未选中标签页的重建?!
每个标签页的 2
函数包含以下内容:
1st
build
的内容:
Widget build(...) {
WidgetBinding.instance.addPostFrameCallback((_) => bloc.getDataPage());
return Scaffold(
...
body: StreamBuilder(
stream: bloc.data,
builder: ...
),
...
);
}
可观察:
getDataPage
功能:
void getDataPage() {
_currentPage ??= 0;
_currentPage += 1;
_requestStream.add(_currentPage);
}