Flutter Bloc Сортировка очереди событий по значению события с помощью transformEvents

Есть ли простой способ отсортировать очередь событий блока флаттера по значению класса событий? Например. У меня есть класс MyEvent со свойством int, и очередь событий выглядит так:

[MyEvent (5), MyEvent (3), MyEvent (7), AnotherEvent (), MyEvent (2), MyEvent (1)]

Я хочу преобразовать очередь / поток событий так, чтобы событие с наименьшим свойством int выполнялось первым - ›[MyEvent (3), MyEvent (5), MyEvent (7), AnotherEvent (), MyEvent (1), MyEvent ( 2)]

Это должно быть возможно, если каким-то образом переопределить transformEvents и, возможно, использовать расширение rxdart, но я не смог получить это правильно и был бы рад, если бы кто-нибудь мог мне помочь. Заранее спасибо!


person Jeppi    schedule 30.04.2021    source источник


Ответы (1)


Благодаря @narcodico он опубликовал этот ответ на мой вопрос в блоке флаттера github https://github.com/felangel/bloc/issues/2441

  @override
  Stream<Transition<SortEvent, SortState>> transformEvents(
    Stream<SortEvent> events,
    transitionFn,
  ) {
    return events
        .bufferTest((event) => event is BreakEvent)
        .flatMap<SortEvent>((bufferedEvents) async* {
      final sortedEvents = bufferedEvents.whereType<ValueEvent>().toList()
        ..sort((x, y) => x.value.compareTo(y.value));
      yield* Stream<SortEvent>.fromIterable([
        ...sortedEvents,
        ...bufferedEvents.whereType<BreakEvent>(),
      ]);
    }).asyncExpand(transitionFn);
  }
person Jeppi    schedule 04.05.2021