Я хочу получить местоположения и шлюзы, связанные с местоположением, из базы данных sqflite.
Я пытаюсь получить все местоположения сначала, а затем для каждого местоположения, которое я пытаюсь выбрать шлюзы. Я получил правильные данные.
Но проблема в том, что даже при использовании async
& await
сначала вызывается оператор return метода, а затем все выполняемые операции.
Ниже приведен код для извлечения местоположений и шлюзов:
Future<List<Location>> fetchAllLocationFromGroupId(int groupId) async {
List<Location> locations = List();
Database db = await database;
var locationResult = await db.query(DatabaseData.LOCATION_TABLE_NAME, columns: [
DatabaseData.LOCATION_ID,
DatabaseData.LOCATION_NAME,
DatabaseData.LOCATION_ALIAS,
DatabaseData.LOCATION_SET_DEFAULT,
DatabaseData.LOCATION_IS_ACTIVE,
DatabaseData.LOCATION_GROUP_ID
]);
locationResult.forEach((row) async {
Location location = Location.fromMap(row);
List<Gateway> gateways = List();
var gatewayResult =
await db.query(DatabaseData.GATEWAY_TABLE_NAME, columns: [
DatabaseData.GATEWAY_ID,
DatabaseData.GATEWAY_NAME,
DatabaseData.GATEWAY_ALIAS,
DatabaseData.GATEWAY_MAC,
DatabaseData.GATEWAY_CREATED_AT,
DatabaseData.GATEWAY_UPDATED_AT,
DatabaseData.GATEWAY_LOCATION_ID,
DatabaseData.GATEWAY_USER_ID
]);
gatewayResult.forEach((gateway) {
gateways.add(Gateway.fromMap(gateway));
});
/*gatewayResult.then((List<Map<String, dynamic>> maps) {
for (var gateway in maps) {
Gateway gateway1 = Gateway.fromMap(gateway);
print(gateway1);
gateways.add(gateway1);
}
});*/
location.gateways = gateways;
print(
"DBHelper $groupId -> Location id -> ${location.id} and gateways-> ${location.gateways[0].gatewayAlias}");
locations.add(location);
});
return locations;
}