【问题标题】:Comparing 2 lists and managing inserts based on that in Dart基于 Dart 中的比较 2 个列表和管理插入
【发布时间】:2021-04-28 14:43:12
【问题描述】:

我有一个想要实施 Feed 解决方案的案例。我有一个 GraphQL 订阅,可以从数据库实时获取提要项目。我使用 Bloc/Cubit 进行简单的状态管理。

    Future<void> updateFeed() async {

    emit(FeedLoading());
    List<Map<String, int>> _feed = [];

    Snapshot snapshot = await Server.server.testSubs();
    snapshot.listen((event) {});
    emit(FeedUpdate(_feed));
    emit(FeedLoaded());
  }

这是我从提要表中获取更新列表的功能。我在提要页面上有一个动画列表,它根据小部件类型返回小部件。

 Widget listWidgetType(index) {
    switch (_feed[index].entries.first.key) {
      case "match":
        return Match(
          matchId: _feed[index]["match"],
        );
        break;
      case "transfer":
        return Transfer(username: _feed[index]["transfer"]);
        break;
      case "news":
        return News();
        break;
      default:
        return Container(
          width: 50,
          height: 50,
          color: Colors.yellow,
          child: Text("Unknown Data"),
        );
    }
  }

因为我需要使用这个 switch case,所以我必须有一个本地列表。所以我根据 Cubit 列表更新本地列表,然后将它们添加到这个 AnimatedList 中。

SliverAnimatedList(
                key: _listKey,
                itemBuilder: (context, index, animation) {
                  return FadeTransition(
                      opacity: animation.drive(Tween<double>(
                        begin: 0,
                        end: 1,
                      ).chain(CurveTween(curve: Curves.easeInOutCirc))),
                      child: listWidgetType(index));
                },
              );

我的问题是我必须根据项目 ID 比较两个列表并查看它们是否存在。如果它们存在,我会跳过添加部分。这对于最后一项来说相当简单。但是可以说我从列表的第 10 个中删除了一个项目。我想实时动态地将其从提要中删除。所以我需要每次比较列表,根据itemCreated时间戳排序并插入到动画列表中。如果通过比较从本地列表中删除了第 10 个元素,如何从 AnimatedList 小部件中删除它。我能否以更好、更有效的方式实现这一点?

【问题讨论】:

    标签: flutter listview dart flutter-test


    【解决方案1】:

    也许列表差异会有所帮助。您可以从头开始编写代码,也可以使用现有的代码:https://pub.dev/packages/list_diff

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    • 如果链接发生变化,无论如何建议都不好。 :)
    • 建议解决了部分问题,但也产生了其他问题。我将尝试使用包的逻辑,因为它部分地用于我的目的。如果我自己找到解决方案,我会在这里发布。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 2020-03-05
    相关资源
    最近更新 更多