inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

플러터 함수 실행에 대해 질문있습니다

해결된 질문

270

정충효

작성한 질문수 8

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쪽 파일입니다.

플러터 provider dart

답변 1

0

인프런 AI 인턴

안녕하세요 정충효님, 인프런 AI 인턴이에요.
현재 코드 상황에서 문제가 발생한 이유를 정확히 파악하기 위해서는 좀 더 상세한 정보가 필요합니다. 하지만 일반적으로 동일한 메서드가 처음에는 정상적으로 실행되지만, 두 번째 호출부터는 실행되지 않을 경우 다음과 같은 이유들을 확인해 볼 수 있습니다.

  1. initClusterManager가 한 번 실행된 상태에서 다시 호출될 때, 해당 메서드 내부에서 사용되는 변수들이 예상한 값과 다르게 설정되는 경우가 있을 수 있습니다. 변수들의 초기화나 조건문들을 확인해보시는 것이 좋습니다.

  2. initClusterManager가 실행될 때 같은 객체들이 반복적으로 생성되는 문제가 있을 수 있습니다. 이를 방지하기 위해서는 해당 객체들의 생성과 초기화를 적절한 위치에 배치해야 합니다.

  3. initClusterManager 메서드 내에서 await로 비동기 작업들이 수행되는데, 해당 비동기 작업이 예상하지 못한 에러를 발생시키거나 제대로 완료되지 않아 다음 호출 시에 영향을 줄 수 있습니다. 비동기 작업들을 주의깊게 검토하여 문제가 없는지 확인해보세요.

더 자세한 정보를 제공해주신다면 더 정확한 도움을 드릴 수 있을 것입니다. 감사합니다.

6강에 비디오가 이상해요

0

27

2

질문있습니다!

0

20

0

SEO에 대해

1

61

2

실로폰 음원 재생 오류 해결 (do.1.wav)

1

72

2

Emulate Device Frame 관련 질문입니다.

0

90

2

감사합니다!!

0

56

2

전체 코드 받을 수 있나요?

0

98

1

강의 듣는 중 얻은 경험 공유.

1

92

1

역시,, 클린 코드가 중요하네요..

0

67

1

seo 강의

0

86

2

코드 효율성 질문

0

50

1

124강 DB에 Todo 등록

0

78

1

webview import가 원활하지 않습니다 도와주세요

0

117

3

webview 버전

0

106

2

섹션3. 비만도계산기 문자열 입력가능 오류 관련

0

94

2

appbar 오류

0

62

2

mac 사용자만 들으면 되는 강의인가요?

0

67

2

Error: Unable to find git in your PATH.

0

189

2

60. 053. 결과화면 작성

0

59

1

마스크 json url이 안보여서 공유합니다

0

69

1

구글지도 사용에서

0

50

2

todo리스트 강의중에서..

0

68

2

강의가 오래 된거 같은데

1

78

2

const 적용

0

49

1