해결된 질문
작성
·
138
0
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
class HomeScreen extends StatefulWidget {
const HomeScreen({super.key});
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final CameraPosition initialPosition = CameraPosition(
target: LatLng(37.5214, 126.9246),
zoom: 17
);
@override
initState(){
super.initState();
checkPermission();
}
checkPermission( ) async {
final inLocationEnabled = await Geolocator.isLocationServiceEnabled();
if(!inLocationEnabled){
throw Exception('위치 기능을 활성화 해주세요');
}
LocationPermission checkedPermission = await Geolocator.checkPermission();
if(checkedPermission == LocationPermission.denied){
checkedPermission = await Geolocator.requestPermission();
}
if(checkedPermission != LocationPermission.whileInUse || checkedPermission != LocationPermission.always) {
throw Exception('권한을 허가해 주세요');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
Expanded(
child: GoogleMap(
initialCameraPosition: initialPosition,
)
)
],
),
);
}
}
강의를 보면서 공부 도중 테스트를 하는데
LocationPermission.whileInUse
LocationPermisson.always 의 if문에서 Exception으로 던지는데 해결방법을 모르겠습니다.
답변 2
0
안녕하세요!
어떤 에러를 던진다는 말씀이실까요?
에러가 있을때는 어떤 예외인지를 정확히 알려주셔야합니다. 그렇지 않으면 문제를 파악 할 수 있는 방법이 없습니다.
감사합니다!
D/EGL_emulation(11327): app_time_stats: avg=175.23ms min=23.00ms max=693.03ms count=6
E/flutter (11327): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Exception: 권한을 허가해 주세요
E/flutter (11327): #0 HomeScreenState.checkPermission (package:choolcheck/screen/home_screen.dart:42:9)
E/flutter (11327): <asynchronous suspension>
E/flutter (11327):
이것을 보내드리면 될까요?
0
안녕하세요, 인프런 AI 인턴입니다.
알로하님의 질문과 관련하여, LocationPermission
에러 처리와 관련된 구체적인 해결 방안으로 질문에 포함된 코드의 로직을 상세히 살펴볼 필요가 있습니다. 특히, 권한 요청 과정에서 발생하는 문제를 해결하기 위해 로직 내 조건부 처리에 주의를 기울여야 합니다.
알로하님의 코드에서는 LocationPermission
의 상태를 검사하여, 사용자의 위치 서비스 활성화 및 권한 부여 상태를 확인하고 있습니다. 코드 중 if(checkedPermission != LocationPermission.whileInUse || checkedPermission != LocationPermission.always)
조건문에서 예외를 발생시키는 부분이 문제의 핵심입니다. 이 조건문은 whileInUse
또는 always
권한이 부여되지 않았을 경우 예외를 발생시키도록 설계되었습니다. 그러나, 이 로직에는 문제가 있을 수 있습니다.
비슷한 주제로 질문이 이전에 있었던 것과 관련해, 코드팩토리 강사님께서는 권한 요청 과정에서 LocationPermission.denied
상태의 처리에 대해 자세히 설명하셨습니다. 그러나 알로하님의 경우는 denied
상태가 아닌, whileInUse
및 always
에 대한 권한 부여 문제를 경험하고 계십니다.
불행히도, 제공된 정보 속에서 직접적으로 알로하님의 문제를 해결하는 명시적인 답변은 찾을 수 없었습니다. 하지만, 권한 요청과 관련된 문제 해결 방법을 탐색하는 데 참고가 될 수 있는 이전 질문 중 하나를 여기에 링크합니다: “LocationPermission.denied관련 질문입니다”에서는 권한 요청이 거부됐을 때의 처리 방법에 대해 설명하고 있습니다. 알로하님의 코드에서 발생한 문제는 다를 수 있지만, 권한 요청 과정과 관련된 로직을 이해하는 데 도움이 될 수도 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
코드를 작성하고 재시작 했을때
권한관련 창이뜨고 항상사용이나 앱사용때만 사용 버튼늘 누르면 제가 작성한 throw exception으로 가게 됩니다.