Предполагам, че искате да направите нещо подобно (Обърнете внимание на нетествания код):
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);
}
Чели ли сте тази статия относно използването на фючърси?
Ключовият момент е, ако методът е асинхронен и извикващият код трябва да изчака да завърши, тогава той трябва да върне Future обект (или поток в някои случаи). Няма начин в Dart да получите функция за "блокиране" в очакване на асинхронен резултат. Чувствайте се свободни да зададете още въпроси в коментарите.