【问题标题】:How to cache rxdart streams in flutter for infinite scroll如何在颤动中缓存 rxdart 流以实现无限滚动
【发布时间】:2019-03-19 15:39:20
【问题描述】:
class PollScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    bloc.paginatePolls(null, null);

    return StreamBuilder(
        stream: bloc.polls,
        builder: (context, AsyncSnapshot<List<PollModel>> snapshot) {
          if (snapshot.data == null || snapshot.data.length < 1) {
            return Text('loading...');
          }

          return ListView.builder(
            itemCount: snapshot.data.length,
            itemBuilder: (context, int index) {
              final PollModel curItem = snapshot.data[index];

              return Card(
                   //Render Logic
                );
            },
          );
        });
  }
}

class Bloc {
  final Repository _repository = Repository();
  final PublishSubject<List<PollModel>> _polls = PublishSubject<List<PollModel>>();

  Observable<List<PollModel>> get polls => _polls.stream;

  paginatePolls(int count, String last) async {
    final List<PollModel> polls = await _repository.paginatePolls(count, last);

    _polls.sink.add(polls);
  }

  dispose(){
    _polls.close();
  }
}
final bloc = Bloc();

我来自react native 移动开发背景,我使用过apolloredux 等工具,所以rxdart 对我来说有点困惑。 paginatePolls 只是从服务器检索简单的对象列表并添加到流中,PollScreen 类正在呈现结果。一切正常,但我很好奇如何缓存第一个 paginatePolls 请求,以便我可以使用 count(要返回的文档数)last(从先前结果​​返回的最后一项的 ID)进行后续查询和只需将结果附加到已经存在的内容。

apolloredux 中,我会在发出更多请求时将越来越多的文档添加到缓存中,但由于rxdart 是一个流,我不确定哪种方法最有效。

我曾考虑使用 sqlite 进行缓存,但似乎是一个巨大的过度杀戮 + 不确定它是否足够快。

我想到的下一个方法是在块中创建一个列表,并在发出更多请求时继续向其中添加项目。然后每次都流式传输整个列表。但这意味着为每个流重新创建整个列表,例如第一次请求渲染 1-50,第二次渲染 1-100,第三次渲染 1-150,其中更可取的是 - 第一次渲染 1-50,第二次渲染 51-100,然后附加在第一次渲染下方,等等。

你如何使用rxdart在flutter中实现apolloredux缓存的对应物?

【问题讨论】:

    标签: dart flutter rxdart


    【解决方案1】:

    我一直被这个类似的问题所困扰。我正在考虑在我的存储库中保留一个地图(您发出网络请求的类),然后从那里查找地图。但是我对此有疑问,因为我使用“计算”​​方法,而您传递给“计算”函数的任何内容都不能是实例方法。 (https://flutter.dev/docs/cookbook/networking/background-parsing)

    我在网上看了一些人建议不要global bloc,我也来自 React Native + Redux 背景,但我真的想以正确的方式使用 bloc 模式,希望那里有更好的例子。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-22
    • 2022-07-15
    • 2019-09-23
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 2013-01-21
    相关资源
    最近更新 更多