캠페인 실시간 랭킹 후원자 이름 · 위치 핀 도로명 주소
This commit is contained in:
@@ -68,12 +68,8 @@ class _PlacePickerScreenState extends State<PlacePickerScreen> {
|
||||
try {
|
||||
final marks = await Geocoding().placemarkFromCoordinates(point.latitude, point.longitude);
|
||||
if (marks.isNotEmpty) {
|
||||
final m = marks.first;
|
||||
final parts = [m.administrativeArea, m.locality, m.subLocality, m.thoroughfare, m.subThoroughfare]
|
||||
.whereType<String>()
|
||||
.where((s) => s.isNotEmpty)
|
||||
.toList();
|
||||
if (parts.isNotEmpty) address = parts.join(' ');
|
||||
final line = placeAddress(marks.first);
|
||||
if (line.isNotEmpty) address = line;
|
||||
}
|
||||
} catch (_) {
|
||||
// 지오코더가 없거나(에뮬레이터 · 테스트 — 플랫폼 구현 없음) 실패 — 좌표 표시로 둔다.
|
||||
@@ -230,3 +226,26 @@ class _PlacePickerScreenState extends State<PlacePickerScreen> {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// 지오코더 결과 → 한 줄 주소. 한국 주소는 도로명이 `thoroughfare` 에 오지 않아(번지만 `subThoroughfare`)
|
||||
/// 칸을 이어 붙이면 「서울특별시 마포구 34」가 된다(10/6 실기기). 도로명이 든 `street` 를 쓴다 —
|
||||
/// Android 는 주소 전체 줄(나라 이름 포함), iOS 는 「도로명 번지」만 준다.
|
||||
String placeAddress(Placemark m) {
|
||||
String t(String? v) => v?.trim() ?? '';
|
||||
final street = t(m.street);
|
||||
final area = t(m.administrativeArea);
|
||||
if (street.isNotEmpty && area.isNotEmpty && street.contains(area)) {
|
||||
// 전체 줄 — 앞의 나라 이름만 뗀다.
|
||||
final country = t(m.country);
|
||||
return country.isNotEmpty && street.startsWith(country)
|
||||
? street.substring(country.length).trim()
|
||||
: street;
|
||||
}
|
||||
final road = street.isNotEmpty
|
||||
? street
|
||||
: [t(m.thoroughfare), t(m.subThoroughfare)].where((s) => s.isNotEmpty).join(' ');
|
||||
return [area, t(m.locality), t(m.subLocality), road]
|
||||
.where((s) => s.isNotEmpty)
|
||||
.toSet()
|
||||
.join(' ');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user