Supongo que quieres hacer algo como esto (nota el código no probado):
Future<DBObject> load(DBObject object, String id) {
var query = "select ... where id='$id'"; // Note: check for SQL injection.
return pool.query(query)
.then((result) => result.toList())
.then((list) => list.forEach((row) => object.import(row)))
.then((_) => object);
}
¿Has leído este artículo ? sobre el uso de futuros?
El punto clave es que si un método es asíncrono y el código de llamada debe esperar a que se complete, entonces debe devolver un objeto Future (o un Stream en algunos casos). No hay forma en Dart de obtener una función para "bloquear" esperando un resultado asíncrono. No dude en hacer más preguntas en los comentarios.