如何启动发送值进行流式传输?

时间:2019-09-11 12:53:17

标签: flutter widget stream-builder

我有一个带有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);
}

0 个答案:

没有答案