Returns a new Timeout that merges this with other.
Timeout.none takes precedence over everything. If timeout is
Timeout.none and other declares a duration, that takes precedence.
Otherwise, this timeout's duration or factor are multiplied by
other's factor.
Source
Timeout merge(Timeout other) {
if (this == none || other == none) return none;
if (other.duration != null) return new Timeout(other.duration);
if (duration != null) return new Timeout(duration * other.scaleFactor);
return new Timeout.factor(scaleFactor * other.scaleFactor);
}