通常返回null为结束
Offset? isDone(Offset o, double dt) { time += dt; return time > duration ? null : offset(time); }