인프런 커뮤니티 질문&답변

알로하님의 프로필 이미지
알로하

작성한 질문수

[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

위치권한 확인하는 함수 작성하기

LocationPermission 에러

해결된 질문

작성

·

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

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

어떤 에러를 던진다는 말씀이실까요?

에러가 있을때는 어떤 예외인지를 정확히 알려주셔야합니다. 그렇지 않으면 문제를 파악 할 수 있는 방법이 없습니다.

감사합니다!

알로하님의 프로필 이미지
알로하
질문자

코드를 작성하고 재시작 했을때

권한관련 창이뜨고 항상사용이나 앱사용때만 사용 버튼늘 누르면 제가 작성한 throw exception으로 가게 됩니다.

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

에러가 '무엇'인지에 대한 질문입니다. 에러 메세지를 알려주세요!

알로하님의 프로필 이미지
알로하
질문자

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):

 

 

이것을 보내드리면 될까요?

알로하님의 프로필 이미지
알로하
질문자

코드를 봤을 때 and 가 아닐까 하고 고쳐서

다음강의를 진행했는데 바로 오류라고 설명해 주시네요.

해결됐습니다. 감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다.

알로하님의 질문과 관련하여, LocationPermission 에러 처리와 관련된 구체적인 해결 방안으로 질문에 포함된 코드의 로직을 상세히 살펴볼 필요가 있습니다. 특히, 권한 요청 과정에서 발생하는 문제를 해결하기 위해 로직 내 조건부 처리에 주의를 기울여야 합니다.

알로하님의 코드에서는 LocationPermission의 상태를 검사하여, 사용자의 위치 서비스 활성화 및 권한 부여 상태를 확인하고 있습니다. 코드 중 if(checkedPermission != LocationPermission.whileInUse || checkedPermission != LocationPermission.always) 조건문에서 예외를 발생시키는 부분이 문제의 핵심입니다. 이 조건문은 whileInUse 또는 always 권한이 부여되지 않았을 경우 예외를 발생시키도록 설계되었습니다. 그러나, 이 로직에는 문제가 있을 수 있습니다.

비슷한 주제로 질문이 이전에 있었던 것과 관련해, 코드팩토리 강사님께서는 권한 요청 과정에서 LocationPermission.denied 상태의 처리에 대해 자세히 설명하셨습니다. 그러나 알로하님의 경우는 denied 상태가 아닌, whileInUsealways에 대한 권한 부여 문제를 경험하고 계십니다.

불행히도, 제공된 정보 속에서 직접적으로 알로하님의 문제를 해결하는 명시적인 답변은 찾을 수 없었습니다. 하지만, 권한 요청과 관련된 문제 해결 방법을 탐색하는 데 참고가 될 수 있는 이전 질문 중 하나를 여기에 링크합니다: “LocationPermission.denied관련 질문입니다”에서는 권한 요청이 거부됐을 때의 처리 방법에 대해 설명하고 있습니다. 알로하님의 코드에서 발생한 문제는 다를 수 있지만, 권한 요청 과정과 관련된 로직을 이해하는 데 도움이 될 수도 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

알로하님의 프로필 이미지
알로하

작성한 질문수

질문하기