在Flutter中使用firebase_animated_list访问列表中的下一项

时间:2018-08-16 14:57:16

标签: firebase firebase-realtime-database flutter

我有一个聊天应用程序,我试图通过有条件地隐藏头像和用户标题来折叠后续消息。

我正在使用Firebase_Animated_List,但遇到了这样的情况,我认为不访问列表就无法实现这一目标。而且我也不相信该列表是可访问的。

String lastUid;

return FirebaseAnimatedList(
  // reverse: true,
  // sort: (a, b) => (b.key).compareTo(a.key),
  query: FirebaseDatabase.instance
      .reference()
      .child('/chats/$pid')
      .orderByKey()
      .limitToLast(100),
  itemBuilder: (_, snap, _animation, index) {
    bool isMinimal = false;
    String uid = snap.value['uid'];
    if (lastUid == uid && lastUid != null) isMinimal = true;
    lastUid = uid;

    return FadeTransition(
      opacity: _animation,
      child: ChatItem(pid, snap, isMinimal),
    );
  },
);

这将正确显示消息,但是列表无法正常运行,因为添加新用户时列表不会停留在底部。 (有没有一种方法可以覆盖它?如果是这样,我就不需要弄乱获取下一个项目了。)

String lastUid;

return FirebaseAnimatedList(
  reverse: true,
  sort: (a, b) => (b.key).compareTo(a.key),
  query: FirebaseDatabase.instance
      .reference()
      .child('/chats/$pid')
      .orderByKey()
      .limitToLast(100),
  itemBuilder: (_, snap, _animation, index) {
    bool isMinimal = false;
    String uid = snap.value['uid'];
    if (lastUid == uid && lastUid != null) isMinimal = true;
    lastUid = uid;

    return FadeTransition(
      opacity: _animation,
      child: ChatItem(pid, snap, isMinimal),
    );
  },
);

此尝试无法正确呈现聊天,但确实具有正确的滚动行为。如果您位于页面底部,则会显示新的聊天记录。 (是否可以访问FirebaseAnimatedList的实际列表?如果这样,我将能够使用下一项而不是上一项进行isMinimal测试。)

我的另一种想法是找到一种无需使用AxisDirection.up来指定reverse的方法,但我不认为我可以这样做。

0 个答案:

没有答案