반응형

안녕하세요.

 

Flutter Bug에 대한 해결책을 정리해볼까 합니다.

https://spikez.tistory.com/456

 

[Flutter] flutter 3.7 google map 버그 (frame이 남아있는 문제)

(2023년1월28일) 어제 시간이 좀 나서 flutter 3.2 버전으로 개발 진행해오던 프로젝트를 3.7로 업그레이드 해봤습니다. 아.. 뭔가 달라진게 있는지 custom 으로 작성한 theme 쪽에서 deprecated 된 것이 보이

spikez.tistory.com

 

 

일단 문제는 위 링크에 있는 내용인데요.

 

화면전환시에 한프래임이 남아서 화면전환을 어색하게 만듭니다.

google map을 dispose 시키기 위해서 여러가지 방법을 사용해봤는데, 방법을 찾지 못하다가, 문제 올린 링크의 내용중에 개발자 한분(AdrienGannerie)이 임시 해결책을 제시해주셨습니다.

 

그래서 그 코드로 테스트 해보고 문제가 사라진것을 확인했네요 ^^

 

코드는 다음과 같습니다.

import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

class NewMap extends StatefulWidget {
  const NewMap({super.key});

  @override
  State<NewMap> createState() => _NewMapState();
}

class _NewMapState extends State<NewMap> {


  late Widget googleMap;
  bool showMap = true;

  late GoogleMapController mapController;

  @override
  void initState() {
    super.initState();
  }


  @override
  void dispose(){
    print("_NewMapState:dispose()");

    mapController.dispose();  // Map 을 Dispose 시키는 부분
    super.dispose();
  }



  @override
  Widget build(BuildContext context) {

    googleMap = GoogleMap(
      mapType: MapType.normal,
      mapToolbarEnabled: false,
      zoomControlsEnabled: false,
      myLocationEnabled: true,
      trafficEnabled: false,
      onMapCreated:  (GoogleMapController controller){
        mapController = controller;
      }, initialCameraPosition: const CameraPosition(target: LatLng(0,0)),

    );
    return PopScope(
        onPopInvoked: (bool didPop) {   //<-- 이부분이 핵심인데, pop 될때 showMap을 false로 변경하고,
            setState(() {  // 상태가 변경되어 google map이 사라지고 빈 container만 남기는것입니다.
            showMap = false; 
          });
        },
        child:showMap?googleMap:Container()
    );   
//Old version : WillPopScope 이 deprecated 되었습니다. ㅠ_ㅠ
//    return WillPopScope(
//        onWillPop: () {   //<-- 이부분이 핵심인데, pop 될때 showMap을 false로 변경하고,
//            setState(() {  // 상태가 변경되어 google map이 사라지고 빈 container만 남기는것입니다.
//            showMap = false; 
//          });
//          return Future.value(true);
//        },
//        child:showMap?googleMap:Container()
//    );
  }
}

 

 

 

위의 WillPopScope 부분이 핵심이 되는데요.

WillPopScope을 걸어서 back navigation 될때 map widget을 build 에서 제거 하는 형태로 문제를 해결한 것입니다.

=> WillPopScope 이 deprecated 됬고 PopScope 을 사용해야 해서 위에 코드에도 반영했습니다.

 

물론 위 코드를 보셔서 알겠지만, 만약 GoogleMap widget이 정상적으로 동작했다면 필요없는 코드입니다.

하지만 당장 앱의 퀄리티를 위해서 ㅠ_ㅠ 개발자가 회피코드(Workaround)를 작성할 수 밖에 없겠네요....

 

저는 이렇게 해서 flutter 3.2를 3.7로 업그레이드 할 수 있게 되었습니다. 

 

 

!!! 해피코딩!! 

 

반응형

(2023년1월28일)

어제 시간이 좀 나서 flutter 3.2 버전으로 개발 진행해오던 프로젝트를 3.7로 업그레이드 해봤습니다.

아.. 뭔가 달라진게 있는지 custom 으로 작성한 theme 쪽에서 deprecated 된 것이 보이고,

화면 전환 이펙트( transit effect) 시 약간 부자연스런 것들이 보여서 여러번 시도하면서 로그들을 봤는데요.

현재 사용하고 있는 프로젝트에서 google map을 사용하고 있는데, 화면전환시 google map이 1~2 프레임(frame) 늦게 사라지는 것을 발견 했네요.

ㅠ_ㅠ 

 

3.7에서 다른 개선된 부분들이 많이 보이는 것 같던데, 저는 google map 때문에 당분간 3.2를 써야 할것 같습니다. 

 

(2023년 11월 14일)

구글맵의 심각한 버그입니다.

3.7에서 여전히 버그가 개선되지 않았습니다.

https://github.com/flutter/flutter/issues/118498

 

해당 문제는 Android 에서만 발생하는 것 같네요.

 

flutter 화면 전환시 google map 화면이 사라지지 않고 1 frame 남아있는 문제

 

 

 

해결책!!

해결책을 찾긴 했습니다. 

 Workaround !!!!

완전 버그 회피 코드이긴 한데, 당분간 이렇게 사용 해야 할것 같네요.

 

https://spikez.tistory.com/490

 

[Flutter] flutter 3.7 google map 버그 (frame이 남아있는 문제) - 2 (해결)

안녕하세요. Flutter Bug에 대한 해결책을 정리해볼까 합니다. https://spikez.tistory.com/456 [Flutter] flutter 3.7 google map 버그 (frame이 남아있는 문제) (2023년1월28일) 어제 시간이 좀 나서 flutter 3.2 버전으로 개

spikez.tistory.com

 

오랜시간 기다렸지만, 해결될 기미가 보이지 않아서 어쩔수 없이 회피 코드를 찾아서 작성하게 되었습니다.

 

!!! 해피 코딩!!!

 

 

#플루터 #버그 #3.7 #망했다. # 써보고 # 싶었는데... #유유 

+ Recent posts