profile
android, ios developer

[Flutter] 애뮬레이터에서 인앱결제 에러 임시 해결방안

애뮬레이터에서 인앱결제가 포함된 프로젝트를 실행하려고하면 런타임에러가 발생한다. 에러가 발생하는 이유 테스트용 결제 환경 playstore등의 설치 환경이 애뮬레이터에서 제공되어 있지 않습니다. 결제 서비스 제한 일부 인앱 결제 서비스 제공업체는 애뮬레이터에서의 인앱 결제를 제한합니다. 보안 및 불법 결제 방지를 위한 조치입니다. 결제 테스트 제한 외부 앱(카드사 / 간편결제 앱)으로 이동해 결제 테스트하는 것이 제한됩니다. 이동이 가능하더라도 애뮬레이터에서는 공동 인증서(구 공인인증서) 설정이 안되니, (일반결제가 아니고서야) 인증 자체가 안됩니다. 임시 해결 방안 코드에 인앱결제가 포함되어 있다면 실기기에서 실행이 잘 되겠지만, 애뮬레이터에서 실행하고 싶다면, 애뮬레이터 빌드 시, 인앱결제 코드가 실행되지 않도록 방지할 수 있습니다. 라이브러리 추가 https://pub.dev/packages/d

2023년 7월 8일
·
0개의 댓글
·

[Flutter] Lint를 사용하는 이유 및 적용

Lint란, 소스 코드에서 잠재적인 문제나 버그를 감지하고 개선하는 데 도움을 주는 정적 분석 도구입니다. 즉, Lint 설정을 통해 규칙적인 코딩 스타일을 만들 뿐 아니라, 런타임 에러를 줄일 수 있습니다. 팀 단위로 프로젝트를 진행하게 될 경우, 개개인의 코드 스타일이 소스에 녹여 들어가게 되는데요. 그것이 결과물에 영향을 주진 않지만, 협업의 일정 부분 영향을 주게 됩니다. 자신의 코드 스타일에 대해서는 소스가 한눈에 들어와 지지만, 협업하는 개발자 분의 소스는 코드 스타일이 달라 눈에 잘 들어와 지지 않고 집중해서 봐야 되는 경우가 생깁니다. 그렇기에, Lint의 코드 룰을 설정하여 개발 스타일 온도차를 최대한 줄여, 퍼포먼스를 높일 수 있도록 도와주어, 팀 협업 강화 등의 다양한 이점을 얻을 수 있습니다. [요약] 코드의 일관성 유지 코드 스타일 가이드라인을 적용하고 일관된 코드 작성

2023년 7월 5일
·
0개의 댓글
·

[Flutter] flutter sdk 특정 버전 바꾸기

현재 flutter 개발 환경으로 vscode를 사용하고 있습니다. 각, 개발 버전을 정해두고 코드를 작성할텐데요. 이 글에서, flutter sdk를 특정 버전으로 변경하는 방법에 대해서 알아보겠습니다. 현재 버전 체크하기 cmd창에서 flutter 폴더로 이동 원하는 버전으로 체크아웃 dart 버전 검사 변경한 버전 체크 참고 문서: https://mingyu0403.tistory.com/336

2023년 7월 4일
·
0개의 댓글
·

[Flutter] freezed를 적용한 firebase data call

freezed 모델을 작성하고 buildrunner 패키지의 명령어를 통해 flutter pub run buildrunner build --delete-conflicting-outputs 혹은 dart run build_runner build --delete-conflicting-outputs를 terminal에서 실행한다. 이때 .freezed.dart, .g.dart 파일이 생성되는데, gitignore에 추가하여 git에 추가되지 않도록 해준다.(파일양이 많아지기 때문, 관리하기에도 복잡, 가시성 저하되므로..) freezed를 적용함으로써 아래와 같이 코드가 변경된다. before after firebase query의 withConverter함수를 이용해서 데이터를 가져올 때 타입 변환을 시켜줄 수도 있다.

2023년 5월 24일
·
0개의 댓글
·
post-thumbnail

[Flutter] MVVM 디자인 패턴

MVVM패턴을 사용하는 이유 MVC패턴에서 한 번 더 파생되어 의존성 부분을 최소화시켜 나오게 되었다. MVVM패턴이란, Model, View, ViewModel의 줄임말로 하나의 소프트웨어를 최대한 작은 단위로 나누어 마치 Modul화를 형성하듯 테스트가 쉽고 관리하기도 쉬운 구조를 목표로 한 디자인 패턴이다. MVC패턴에서의 Model과 View간의 의존성 문제를 극복했을 뿐만 아니라, Controller와 View간의 의존성도 최소화할 수 있다는 장점이 있다. MVVM 패턴 구조 Model : 데이터들을 보관, 처리 등을 수행하는 부분. View : 사용자에게 보이고, 상호작용을 수행하는 부분. ViewModel : View를 표현하기 위해 필

2023년 4월 10일
·
0개의 댓글
·
post-thumbnail

[Flutter] MVC 디자인 패턴

MVC패턴을 사용하는 이유 MVC패턴이나 MVVM 패턴은 인터페이스, 데이터, 데이터 제어에 사용되는 소프트웨어 디자인 패턴이다. Model, View Model, View는 각자의 역할을 하며, 팀 단위 프로젝트에 큰 도움이 된다. 만일, 한 페이지 안에 변수, 함수, 위젯을 한번에 선언하게 되면, dart파일의 처음부터 끝까지 읽으며 수정해야 되기 때문에, 많은 시간이 소요될 것이다. 하지만, 각 Model, ViewModel, View로 분리한다면 필요한 부분만 가서 변경할 수 있다. 이러면 코드를 전부 읽지 않아도 특정 위치에 변경 지점이 있다는 것을 인지할 수도 있고, 접근 시간이 단축될 것이다. Model, View, Controller 역할 Model은 데이터를 저장하는 클래스이다.(ex. 계정 정보, 영화 정보 등) Controller(또는 ViewModel)는 사용자 입력에 대한 응답으로 Model의 데이터를 업데이

2023년 4월 10일
·
0개의 댓글
·
post-thumbnail

[Flutter] Getx 상태관리

UI에서 실시간으로 변하는 여러 데이터들의 상태를 효율적으로 관리하기 위한 개념이다. 장점 생산성 직관적인 코드로 간단하게 구현 가능. 성능과 최소한의 리소스 소비에 중점을 두기 때문에, Streams나 ChangeNotifier를 사용하지 않음. View, 프레젠테이션 로직, 비즈니스로직, 종속성 주입 및 네비게이션을 완전히 분리하여 관리. 참고 문서 : https://pub.dev/packages/get/example 사용법 initBindings.dart main.dart counterViewModel 접근 방법 GetBuilder Instance로 접근 Get.find() to 접근 GetView 반응형 상태관리 GetX Obx

2023년 4월 3일
·
0개의 댓글
·
post-thumbnail

[Flutter] Provider 상태관리

구글에서는 UI와 데이터 처리 로직을 분리하기 위해 BLoC 패턴을 권장하였는데, 사용하기 어렵다는 단점이 있었고, 단순한 로직을 구성하려 해도 최소 4개의 클래스를 만들어야 됐다. 그래서 추가적인 상태관리를 지원하게 되었다. 참고 문서 : https://pub.dev/packages/provider main.dart counterViewModel homeView.dart 반응형 호출

2023년 4월 3일
·
0개의 댓글
·
post-thumbnail

[Flutter] SnackBar

개발을 하다 보면 사용자에게 미표기 된 것에 대해 "내용을 입력해 주세요." 알림 또는 "유효하지 않은 이메일입니다."라는 등의 알려줄 필요가 있다. 그럴 땐, 일반적으로 showDialog()를 사용해 팝업을 띄워주거나, SnackBar로 알려준다. SnackBar를 사용한 예제는 다음과 같다. 결과 아래 문서를 참고하면 이외에 SnackBar를 여러 가지 형태로 보여줄 수 있다. 참고 문서: https://ihilalahmadd.medium.com/customize-flutter-snackbar-example-383badb5b6b6

2023년 3월 27일
·
0개의 댓글
·
post-thumbnail

[Flutter] 앱 종료

IOS 홈 버튼을 통해 슬라이드로 앱을 종료하는 방식이어서, 보통, 앱 종료 확인을 필요로 하지 않는다. Android 참고 문서: https://velog.io/@gkssk925/Flutter-%EC%95%B1%EC%A2%85%EB%A3%8C-Programmatically-exit

2023년 3월 23일
·
0개의 댓글
·

[Flutter] extends, implements, with

provider를 사용하다가 문득, with를 사용하는 분도 계시고, getx를 사용할 적에도, extends를 하시는 분이 있는 반면, implements를 사용하시는 분도 계셔서 어떤 차이인지 궁금해져서 알아보니 아래의 요약으로 알 수 있었다. extends는 속성이나 메서드들도 모두 상속받기 때문에 하위 클래스에서 부모 클래스의 메서드들을 특별한 구현없이 바로 사용이 가능하다. 대신, 하나의 부모 클래스만 가질 수 있다. implements는 여러 부모 클래스를 가질 수 있지만, 인터페이스의 구현과 마찬가지로 하위 클래스에서 메서드들을 오버라이딩하여 다시 구현 해줘야 된다. with는 extends와 implements의 특징을 모두 가지고 있다. 여러 개의 부모 클래스를 가질 수 있음, 메서드들을 구현하지 않더라도 부모에서 구현된 메서드를 호출할 수 있다.

2023년 3월 2일
·
0개의 댓글
·
post-thumbnail

[Flutter] Container 테두리 주기

부분 테두리 주기 하단만 테두리를 주고싶다면 bottom속성에 색을 같이 지정해준다. border: Border(bottom: BorderSide(colors.pink)) 전체 테두리 주기 테두리 전체에 색을 주고 싶다면 border: Border.all(color: Colors.pink) 하단만 테두리 주었을때 아래의 화면을 볼 수 있다.

2023년 3월 2일
·
0개의 댓글
·