new city
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
import 'package:city_repository/city_repository.dart';
|
||||
import 'package:city_repository/src/models/city_ui.dart';
|
||||
|
||||
abstract class CityRepository {
|
||||
Future<List<CityUi>> getCities();
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
import 'dart:developer';
|
||||
|
||||
import 'package:city_repository/city_repository.dart';
|
||||
import 'package:cloud_firestore/cloud_firestore.dart';
|
||||
|
||||
class FirebaseCityRepository implements CityRepository {
|
||||
final citiesCollection =
|
||||
FirebaseFirestore.instance.collection('countries v2');
|
||||
|
||||
List<CityUi>? _cities;
|
||||
|
||||
@override
|
||||
Future<List<CityUi>> getCities() async {
|
||||
if (_cities != null) {
|
||||
return _cities!;
|
||||
}
|
||||
|
||||
final List<CityUi> cities = [];
|
||||
|
||||
try {
|
||||
final doc = await citiesCollection.doc("Colombia").get();
|
||||
|
||||
final data = doc.data();
|
||||
|
||||
final country = CountryEntity.fromDocument(data as Map<String, dynamic>);
|
||||
|
||||
for (var region in country.regions) {
|
||||
for (var city in region.cities) {
|
||||
cities.add(CityUi(
|
||||
cityName: city.name,
|
||||
coordsOfCity: city.coords,
|
||||
stateOfCity: region.name,
|
||||
countryOfCity: country.name));
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
log(e.toString());
|
||||
rethrow;
|
||||
}
|
||||
|
||||
_cities = cities;
|
||||
return cities;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user