-
카테고리
-
해결 여부
해결됨
플러터 함수 실행에 대해 질문있습니다
23.11.07 02:11 작성 23.11.07 02:12 수정 조회수 145
0
/// 마커 터치 동작과 아이콘 수정
Future<Marker> Function(Cluster<Place>) _markerBuilder(BuildContext context) =>
(cluster) async {
return Marker(
markerId: MarkerId(cluster.getId()),
position: cluster.location,
onTap: () async {
cluster.items.forEach((element) {
log("${element.plcaeId.toString()}");
});
log("${context} 컨텍스트");
await locationWidgetUtil.buildShowModalBottomSheet(context!);
},
icon: await _locationUtil.getMarkerBitmap(
cluster.isMultiple ? 125 : 77,
text: cluster.isMultiple ? cluster.count.toString() : null),
);
};
/// 근처 플레이스 검색해서 마커 겹치는 정도 컨트롤
Future<void> initClusterManager(double lat, double lng) async {
List<Place> placeCluster =
await _locationUtil.nearSearchPlace(LatLng(lat, lng));
log("${placeCluster.length} 길이입니다.");
_clusterManager = ClusterManager<Place>(placeCluster, _updateMarkers,
markerBuilder: _markerBuilder(_context!),
levels: const [1, 4.25, 6.75, 8.25, 11, 14, 16, 17, 20.0]);
log("${_clusterManager!.items.length}아이템 길이이므니다");
notifyListeners();
}
/// 겹치는 마커 안겹치는 마커 다시 그리는 용도
void _updateMarkers(Set<Marker> markers) {
_markerList = markers;
notifyListeners();
}
var pl = Provider.of<LocationNotifier>(context,listen: false);
await pl.getPosition();
pl.setContext(context);
await pl.initClusterManager(pl.current.latitude,pl.current.longitude);
아래 코드에서 pl.initClusterManager를 실행하면 정상적으로 _markerBuilder가 잘 실행되면서 다음 페이지로 넘어가는데 다시 pl.initClusterManager를 호출하면 _markerBuilder에 로그를 넣어보니 로그가 아예 실행이 안되는데 처음할 때는 실행이 되는데 한 번 더 입력하면 실행이 안되는지 이유를 모르겠습니다.
위에 코드는 Provider쪽 파일입니다.
답변을 작성해보세요.
0
인프런 AI 인턴
2023.11.08
안녕하세요 정충효님, 인프런 AI 인턴이에요.
현재 코드 상황에서 문제가 발생한 이유를 정확히 파악하기 위해서는 좀 더 상세한 정보가 필요합니다. 하지만 일반적으로 동일한 메서드가 처음에는 정상적으로 실행되지만, 두 번째 호출부터는 실행되지 않을 경우 다음과 같은 이유들을 확인해 볼 수 있습니다.
initClusterManager
가 한 번 실행된 상태에서 다시 호출될 때, 해당 메서드 내부에서 사용되는 변수들이 예상한 값과 다르게 설정되는 경우가 있을 수 있습니다. 변수들의 초기화나 조건문들을 확인해보시는 것이 좋습니다.initClusterManager
가 실행될 때 같은 객체들이 반복적으로 생성되는 문제가 있을 수 있습니다. 이를 방지하기 위해서는 해당 객체들의 생성과 초기화를 적절한 위치에 배치해야 합니다.initClusterManager
메서드 내에서 await로 비동기 작업들이 수행되는데, 해당 비동기 작업이 예상하지 못한 에러를 발생시키거나 제대로 완료되지 않아 다음 호출 시에 영향을 줄 수 있습니다. 비동기 작업들을 주의깊게 검토하여 문제가 없는지 확인해보세요.
더 자세한 정보를 제공해주신다면 더 정확한 도움을 드릴 수 있을 것입니다. 감사합니다.
답변 1