
yaml에 다이렉트로 작성하거나 아니면 패키지 설치를 통해서 geolocator를 설치해주자.

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
android/app/src/main/androidManifest.xml 내부
Android 상단에 해당 3줄을 작성하여 넣어주자

<key>NSLocationWhenInUseUsageDescription</key>
<string>We need your location to find nearby job postings.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>We need your location for better service.</string>
4
ios/Runner/Info/plist 파일 내부
4줄을 작성하여 넣어주자
import 'package:geolocator/geolocator.dart';
class LocationUtil {
static Future<Position?> getCurrentLocation() async {
bool serviceEnabled;
LocationPermission permission;
// 위치 서비스 활성화 확인
serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) {
print(" 위치 서비스가 비활성화되었습니다.");
return null;
}
// 위치 권한 확인
permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.deniedForever) {
print(" 위치 권한이 영구적으로 거부되었습니다.");
return null;
}
}
// iOS에서는 권한 확인 후 지연시간을 두고 위치 요청
await Future.delayed(Duration(milliseconds: 500));
// 현재 위치 가져오기
try {
return await Geolocator.getCurrentPosition(
locationSettings: LocationSettings(accuracy: LocationAccuracy.high),
);
} catch (e) {
print(" 위치 정보를 가져오는 중 오류 발생: $e");
return null;
}
}
}
내 위치 정보를 가져오는 부분을 util로 빼놓자
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:gooinpro_parttimer/util/LocationUtil.dart';
class JobPostings extends StatefulWidget {
_JobPostingsState createState() => _JobPostingsState();
}
class _JobPostingsState extends State<JobPostings> {
Position? _position; // 위치 저장 변수
bool _isLoading = true; // 로딩 상태 추가
void initState() {
super.initState();
_fetchLocation(); // 위치 정보 가져오기
}
Future<void> _fetchLocation() async {
Position? position = await LocationUtil.getCurrentLocation();
if (mounted) {
setState(() {
_position = position;
_isLoading = false; // 로딩 완료
});
}
}
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Job Postings')),
body: Center(
child: _isLoading
? CircularProgressIndicator() // 로딩 표시
: _position != null
? Text("위도: ${_position!.latitude}, 경도: ${_position!.longitude}")
: Text("위치 정보를 가져올 수 없습니다."),
),
);
}
}
현재 위치정보를 가져오는 부분을 이용해서 LocationUtil을 사용하자