분류 전체보기
-
[Flutter] Bottom Navigation Bar 클릭 범위 문제 해결기 – InkWell과 Expanded의 조합IT 2025. 4. 22. 11:04
Flutter로 앱을 만들다 보면 바텀바(Bottom Navigation Bar)를 직접 커스터마이징하는 일이 자주 생깁니다.레거시 코드에서 탭 아이콘 근처는 눌리는데 탭 바 전체가 클릭되지 않는 문제가 생겼어요.이번 포스팅에서는 이 문제를 어떻게 해결했는지 소개해볼게요! 📌 문제 상황기존에는 각 바텀 탭을 이렇게 고정된 너비의 SizedBox로 감싸있었습니다.SizedBox( width: 60, child: Column( children: [...], ),)겉보기에는 괜찮았지만, 실제로 탭 주변을 눌렀을 땐 반응이 없었습니다.클릭 가능한 영역이 아이콘 주변으로 제한되어 있었던 것이죠. 😭 💡 목표바텀바 탭은 항상 영역 전체가 클릭 가능해야 함뷰 간격이나 UI 배치는 유지하면서도 터치 ..
-
[Flutter] 상태 변수 최적화 - late final 하나로 코드가 안정적IT 2025. 4. 22. 10:52
Flutter에서 화면을 구성하다 보면 위젯이나 상태값을 나중에 초기화해야 하는 경우가 많습니다.저도 앱의 MainScreen을 구현하면서 상태 변수 관리가 자꾸 불편했는데,이번에 late final 키워드를 도입하면서 코드가 놀랍게 깔끔해졌어요. 💡 late, final, late final이 뭔가요?먼저 Dart의 세 가지 변수 선언 키워드를 간단히 정리해볼게요:키워드의미final한 번만 값을 할당할 수 있어요. 선언과 동시에 초기화해야 해요.late나중에 초기화할 수 있어요. 단, 반드시 한 번은 초기화해야 해요.late final나중에 단 한 번만 초기화할 수 있어요. 즉, 늦게 주지만 바꾸진 않겠다는 뜻! 😕 기존 코드 – ScheduleScreen을 다룰 때 불편했던 점ScheduleSc..
-
[flutter] nice 인증 api 호출 시 렌더링 오류 문제IT 2025. 4. 14. 09:17
앱 회원가입 시 nice 인증 api를 불러와서 사용하게 된다.native앱이라서 그런지 원인은 잘 모르겠지만, 그냥 붙였을 때, 렌더링이 정상적으로 완료되지 않는 문제가 발생하였다.하지만 앱을 한번 터치하는 순간 nice이 정상적으로 출력했다.여러번의 테스트 후 사용자의 터치가 있어야만 화면이 나오는 것이다.터치 전에는 아래과 같은 화면이 렌더링 되지 않았다. 이런 webView가 하나만 있을때, flutter가 frame 렌더링을 대기하는 경우가 많다고 한다.그래서 유저가 터치하거나 화면에 다른 상태 변화가 발생할때까지 webview의 첫 frame attach가 지연된다고 합니다.즉, flutter 입장에서는 "webView를 띄우려면 내가 문가 업데이트가 있어야지!" 하고 기다리던 상태였던 겁니다..
-
[Flutter] 연산자와 기호들IT 2025. 3. 26. 17:34
flutter를 사용하다보면 연산자들과 기호들을 맞이하게 되는데 이것이 무엇인지 몰라서 찾아봤습니다. ? Nullable Type Indicator (널러블 타입 표시)플러터의 변수는 기본적으로 Non-Nullable로 선언됩니다. 즉 Null로 둘 수 없습니다.그래서 Nullable변수로 만들기 위해서 자료형 뒤에 ? 를 붙이면 Null로 둘 수 있습니다. ! Null Assertion Operator (널 단언 연산자)?와 같이 많이 사용되는 연산자입니다. ?를 이용하여 Null 값이 허용되어 있는 값을, 허용되지 않은 값에 넣으려고 하면 에러가 일어납니다.이때 Null 값이 허용되지 않는 값 뒤에 !를 붙이면 에러가 발생하지 않습니다."!"를 써서 확실하게 Not-Nullable 변수에 Nulla..
-
앱 스토어 등록 시 인앱 결제는 필수적일까?IT 2025. 3. 21. 18:46
애플이나 구글 앱에 대한 심사를 하면 IAP에 대한 문제가 있다.이 정책을 확인해라 라는 문제가 발생하게 됩니다. 알아보니 Apple과 Google은 앱 내에서 결제 유도하는 것은 엄격히 금지하고 있습니다.그리고 IAP를 회피하는 경우도 정책 위반이라 앱이 등록됐다고 하더라도 나중에 퇴출 될 수 있다고 합니다.그럼 IAP를 필수적으로 사용해야 하는 경우는 어떤 경우일까? 바로, 구독 컨텐츠 즉, 물리적인 서비스나 물건이 오가는 것이 아닌 오직 디지털 서비스를 제공하는 것이면 IAP를 무조건 해야한다고 합니다. 구독 서비스를 사용하는 앱 종류.1) 동영상/음악 스트리밍 서비스 (유튜브 프리미엄, 디즈니+ 등)2) 뉴스 매거진 구독 서비스3) 클라우드 서비스 & 스토리지4) 생산성 & 업무 도구5) 건강&피..
-
[Django] django와 django + ddd 의 차이IT 2025. 3. 21. 18:00
개발을 하다보니 Django와 restframework, tdd, ddd 등 여러가지를 볼 수가 있는데 이들의 차이가 뭔지 알아보니다. Django일단 Django는 MTV(Model-Template-View) 패턴을 사용하여 빠르게 웹 애플리케이션을 개발하는 것이 목표입니다./project_root ├── myapp/ │ ├── models.py # 데이터베이스 모델 │ ├── views.py # 비즈니스 로직 │ ├── urls.py # URL 라우팅 │ ├── templates/ # 템플릿 (HTML) │ ├── static/ # CSS, JS, 이미지 등 │ ├── forms.py # Dj..
-
[Flutter] WidgetsFlutterBinding.ensureInitialized(); 이란?IT 2025. 3. 12. 20:22
일단 WidgetsFlutterBinding이 무엇일까? WidgetsFlutterBinding은 플러터 앱이 실행되기 전에 프레임워크를 초기화하는 메서드입니다.앱의 루트 위젯 생성, 리소스 로딩, 플러그인 초기화 등의 작업을 수행합니다. 이것은 일반적으로 main() 함수나 애플리케이션의 진입점에서 호출하여 사용합니다. 그럼 이제 ensureInitialized()은 무엇일까?이것은 말 그대로 초기화된 상태를 보장한다는 의미입니다.앱의 바인딩이 초기화되었는 지를 확인하는데 사용됩니다. ensureInitialized의 종류는 크게 WidgetsFlutterBinding과 ServicesBinding 두 가지가 있습니다.앞서 말했든 WidgetsFlutterBinding은 기본적인 위젯 렌더링 및 이벤트..