Как преобразовать правую сторону Either в общий тип во флаттере

У меня есть расширение для Task (из пакета dartz), которое выглядит так

      extension TaskX<T extends Either<Object, U>, U> on Task<T> {
  Task<Either<Failure, U>> mapLeftToFailure() {
    return this.map(
      // Errors are returned as objects
      (either) => either.leftMap((obj) {
        try {
          // So we cast them into a Failure
          return obj as Failure;
        } catch (e) {
          // If it's an unexpected error (not caught by the service)
          // We simply rethrow it
          throw obj;
        }
      }),
    );
  }
}

Цель этого расширения - вернуть значение типа Either<Failure, U>

Это работало нормально, пока я не переключил свой проект флаттера на нулевую безопасность. Теперь по какой-то причине возвращаемый тип Either<Failure, dynamic>.

В моем коде это выглядит так:

      await Task(
      () => _recipesService.getProduct(),
    )
        .attempt() // Attempt to run the above code, and catch every exceptions
        .mapLeftToFailure() // this returns Task<Either<Failure, dynamic>>
        .run()
        .then(
          (product) => _setProduct(product), // Here I get an error because I expect a type of Either<Failure, Product>
        );

Мой вопрос в том, как я могу привести правую сторону Either к правильному типу?

0 ответов

Другие вопросы по тегам