Nano Hash - криптовалюты, майнинг, программирование

Сравнение 2 списков и управление вставками на основе списка в Dart

У меня есть случай, когда я хочу реализовать фид-решение. У меня есть подписка на 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"),
        );
    }
  }

Поскольку мне нужно использовать этот случай переключения, у меня должен быть локальный список. Поэтому я обновляю локальный список на основе списка 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));
                },
              );

Моя проблема в том, что мне нужно сравнить два списка на основе идентификатора элемента и посмотреть, существуют ли они. Если они существуют, я пропускаю добавление части. Это довольно просто для последнего пункта. Но допустим, я удалил элемент из 10-го списка. Я хочу удалить его из ленты динамически, в режиме реального времени. Поэтому мне нужно каждый раз сравнивать список, сортировать его по отметке времени itemCreated и вставлять в анимированный список. Как удалить 10-й элемент из виджета AnimatedList, если он был удален из локального списка путем сравнения. Могу ли я реализовать это лучше и эффективнее?


Ответы:


1

Может быть, список diff поможет. Вы можете написать код с нуля или использовать уже существующий: https://pub.dev/packages/list_diff. .

24.01.2021
  • Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. – Из обзора 25.01.2021
  • Если ссылка когда-либо изменится, совет в любом случае бесполезен. :) 25.01.2021
  • Совет решает некоторые части проблем, но также создает и другие проблемы. Я постараюсь использовать логику пакета, так как он отчасти служит моей цели. Если я сам найду решение, я опубликую здесь. 26.01.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..