首页 > 解决方案 > Flutter Firebase 数据库启动分页

问题描述

我想知道如何使用flutter和firebase数据库对数据进行分页,这里是我的数据结构:

在此处输入图像描述

我正在尝试这样做:

_getItems() async {
    setState(() {
      _loading = true;
    });
    Query query = Database.getReferenceFrases(widget.categoria.key)
        .orderByKey()
        .limitToFirst(_num_items);

    DataSnapshot snapshot = await query.once();

    Map values = snapshot.value;

    values.forEach((key, data) {
      Frase frase = Frase.fromJson(key, data);
      print(frase.key);

      _frases.add(frase);
    });

    setState(() {
      _loading = false;
    });
  }

这是获取更多数据的方法:

 _getMoreItems() async {
        print('called');
        if (!_hasMore) {
          return;
        }
        if (_loadingMore) {
          return;
        }

        _loadingMore = true;

        Query query = Database.getReferenceFrases(widget.categoria.key)
            .orderByKey()
            .startAt(_lastItem)
            .limitToFirst(_num_items);

        DataSnapshot snapshot = await query.once();

        Map values = snapshot.value;

        if (values.length < _num_items) {
          _hasMore = false;
        }

        values.forEach((key, data) {
          Frase frase = Frase.fromJson(key, data);
          print(frase.key);

          _frases.add(frase);
        });

        setState(() {
          _loadingMore = false;
        });

      }

然后当我调用 getMoreItems 时,我以这种方式从列表中获取最后一个键:

 _lastItem = _frases[_frases.length - 1].key;

问题是我每次都得到相同的数据,没有得到下一个数据:

I/flutter ( 5885): -KY9YGChAX-GxRX5ztFz
I/flutter ( 5885): -KY9YKb5f7OORGd0mHA3
I/flutter ( 5885): -KY9YOWsZckgO-_S_gGb
I/flutter ( 5885): -KY9YYNWp4J9wlxr08HN
I/flutter ( 5885): -KY9YSraznJYQrUecv9q
I/flutter ( 5885): -KY9Y92vEybWi6rVKJG3
I/flutter ( 5885): -KY9YCeYbN68RdlpAelG

I/flutter ( 5885): called
I/flutter ( 5885): -KY9YGChAX-GxRX5ztFz
I/flutter ( 5885): -KY9YasX8LJN2ZcMe8CU
I/flutter ( 5885): -KY9YKb5f7OORGd0mHA3
I/flutter ( 5885): -KY9YOWsZckgO-_S_gGb
I/flutter ( 5885): -KY9YYNWp4J9wlxr08HN
I/flutter ( 5885): -KY9YSraznJYQrUecv9q
I/flutter ( 5885): -KY9YCeYbN68RdlpAelG

在调用 getMoreItems 方法之前打印 _lastItem 值我得到这个值:

I/flutter ( 5318): last key = -KY9YCeYbN68RdlpAelG

如果我使用第一个键而不是最后一个键进行硬编码,它会返回不同的值,也许是相反的?

标签: firebasefirebase-realtime-databaseflutterpagination

解决方案


推荐阅读