choolcheck

김원교·2023년 3월 11일
0

// latitude - 위도, longtitude - 경도
// 지도의 첫 위치
static final LatLng companyLatLng = LatLng(37.55769913670688,
127.04587054138098,);
// zoom level
static final CameraPosition initialPosition = CameraPosition(target: companyLatLng,
zoom: 15,
);

지도 class

class _CustomGoogleMap extends StatelessWidget {
final CameraPosition initialPosition;
const _CustomGoogleMap({ required this.initialPosition, Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
return Expanded(
flex: 2,
child: GoogleMap(
mapType: MapType.normal,
initialCameraPosition: initialPosition,
),
);
}
}

// 위치 권한 요청
FutureBuilder(
// future: future을 return 해주는 어떤 함수든 넣을 수 있다
// 함수의 상태가 변경이 될 때마다 builder를 다시 실행해서 화면을 다시 그려준다, future 안에 들어간 함수가 return해준 값을 snapshot에서 받아볼 수 있다
future: checkPermission(),

    // snapshot.connectionState 에서 connectionState는 ConnectionState 타입이며 none, waiting, done 값을 가지고 있다
    // snapshot.data는 futre에 있는 함수에서 return한 결과가 저장된다.
    builder: (BuildContext context, AsyncSnapshot snapshot) {
      if(snapshot.connectionState == ConnectionState.waiting){
        return Center(
            child: CircularProgressIndicator(),
        );
      }
      
      // 위치 권환이 허가 됐을 때만 column(지도가 보이는 위젯)을 return 해줘야 한다
      if(snapshot.data == '위치 권한이 허가됐습니다.'){
        return Column(
          children: [
            _CustomGoogleMap(initialPosition: initialPosition),
            _ChoolCheckButton(),
          ],
        );
      }
      
      return Center(
        child: Text(snapshot.data),
      );

     
      
      
    }
  ),
);

}

// 위치 권한 요청
// initialCameraPosition: 처음 구긁 지도를 켰을 때 어느 위치를 바라보고 있을지를 결정
// FutureBuilder 내의 future: checkPerimission() 실행 > 변경되는 점이 있으면 > > builder: (context)가 함수를 실행한다 >
// checkPermission()을 실행한 결과를 snapshot에 return한다

Future checkPermission() async {
// 앱과 상관없는 휴대폰 자체의 위치 활성화 기능을 사용할 수 있는가
final isLocationEnabled = await Geolocator.isLocationServiceEnabled();

if (!isLocationEnabled) {
  return '위치 서비스를 활성화 해주세요.';
}
// LocationPermission 이라는 형태로 Geolocator.checkPermission()은 현재 앱이 갖고 있는 위치 서비스에 대한 권한이 어떻게 되는지를 가져온다
LocationPermission checkedPermission = await Geolocator.checkPermission();


if (checkedPermission == LocationPermission.denied) {
  checkedPermission = await Geolocator.requestPermission();

  if (checkedPermission == LocationPermission.denied) {
    return '위치 권한을 허가해주세요';
  }
}

if (checkedPermission == LocationPermission.denied) {
  return '앱의 위치 권한을 세팅해서 허가해주세요.';
}

return '위치 권한이 허가됐습니다.';

}

profile
지드래건 남들이 머라건 이병건

0개의 댓글