Future in dart: When to use async, await, and then