본문 바로가기

Personal Posting

Android 앱 빌드 후 API 호출 문 회사 출퇴근 앱을 브라우저에서 WebView로 사용하다가 안드로이드 앱으로 사용하고 싶어 APK를 생성 후 설치하였다. 그런데 앱을 실행하니 아래 화면에서 동작을 하지 않는 것이다. 로그인 실패, API 호출 시 발생하는 에러에 대해 예외처리가 모두 되어 있던 상태라 저렇게 홀딩이 걸리는 이유를 판단하기 어려웠다. 그러다 API 호출조차 되지 않은 경우가 있지 않을까라는 생각까지 미치게 되었다. 검색을 해보니, 릴리즈 모드에서는 API 호출 시 인터넷 권한 문제로 에러가 발생할 수 있다고 한다. 이 결우, 매니페스트에 권한을 주면 해결된다. 이외에도 각각의 기능에 맞는 안드로이드 권한 종류가 있으며 필요 시 위와 같이 권한 허가를 넣어주어야 한다. ex) 외부 저장소 읽기/쓰기 권한 자세한 내용은 안드로.. 더보기
Android apk 빌드 시 앱 아이콘 변경 Flutter로 안드로이드 빌드를 하여 apk 생성 시, 아이콘을 변경하는 방법에 대해 설명한다. 1. 앱 아이콘 이미지 준비: 먼저 원하는 앱 아이콘 이미지를 준비한다. 이미지 크기는 다양한 해상도를 지원하기 위해 다음과 같은 크기로 준비한다. mipmap-mdpi: 48x48 픽셀 mipmap-hdpi: 72x72 픽셀 mipmap-xhdpi: 96x96 픽셀 mipmap-xxhdpi: 144x144 픽셀 mipmap-xxxhdpi: 192x192 픽셀 2. 앱 아이콘 이미지 추가: 준비한 앱 아이콘 이미지를 앱 프로젝트의 android/app/src/main/res 폴더 내에 각 해상도 별로 적절한 디렉터리에 추가한다. 예를 들어, mipmap-mdpi 디렉터리에 ic_launcher.png, mi.. 더보기
Android 앱화면 상태바 가리기 Flutter로 안드로이드 앱을 빌드하여 적용하였는데, 상단의 바는 가리고 하단의 바는 보이게 처리해야 했다. 이 경우, SystemChrome 클래스를 임포트하여 사용하면 된다. import 'package:flutter/services.dart'; void main() { runApp(const MyApp()); // overlays 설정 여부에 따라 달라진다. 하기 코드는 bottom만 보이게 처리한다. SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.bottom]); } 더보기
RichText를 이용한 텍스트 관리 이전 포스팅 (https://honken.tistory.com/148)에 발생했던 아래의 height 문제에 대해 처리가 필요했다. 현재 날짜와 현재 시간, 초 단위 업데이트 현재 날짜의 텍스트 위젯과 현재 시간의 텍스트 위젯을 구현해야 되는 상황이 왔다. 날짜는 업데이트가 필요없지만 (23시 -> 0시 고려 불필요) 시간은 초단위로 변경되어야 하는 상황이었다. // 시 honken.tistory.com 두 텍스트 위젯이 동일하게 Row의 children으로 배치되어 있음에도 불구하고 저렇게 다르게 보이는 이유는 글리프(글자의 모양)의 차이 때문이다. 한글 문자와 숫자/문자를 함께 표시할 때 텍스트의 높이 차이가 발생하는 경우가 종종 발생하며, 한글 글자와 숫자/문자는 글리프의 크기와 모양이 서로 다르기.. 더보기
현재 날짜와 현재 시간, 초 단위 업데이트 현재 날짜의 텍스트 위젯과 현재 시간의 텍스트 위젯을 구현해야 되는 상황이 왔다. 날짜는 업데이트가 필요없지만 (23시 -> 0시 고려 불필요) 시간은 초단위로 변경되어야 하는 상황이었다. // 시간은 initState때 Timer를 이용하여 1초 마다 한번씩 렌더링을 진행시킨다. @override void initState() { controller = GifController(vsync: this); Timer.periodic(const Duration(seconds: 1), (Timer timer) { setState(() { final now = DateTime.now().toLocal(); final formattedTime = DateFormat('HH:mm:ss').format(now); c.. 더보기
위젯 겹치게 배치하기 Column가 Row를 사용하여 차곡차곡 위젯을 쌓아가기만 하던 도중, gif 이미지를 우측 최하단에 위치시키고 중앙 최하단에는 텍스트 위젯을 보이게 해야하는 상황이 발생했다. 이 경우, Stack 위젯을 이용하여 해당 위젯을 배치하고 Positioned 위젯을 통해 위치를 지정하면 된다. Column( children:[ // 위젯 중첩 ] ) // 위 구조를 아래와 같이 변경 Stack( children:[ Column() // 겹쳐야 하는 위젯을 제외한 나머지 기존 위젯 Positioned( bottom: x, right: x, child: 이미지 위젯 ), Positioned( bottom: x, right: x, child: 텍스트 위젯 ), ] ) Positioned를 이용하여 위젯 위치를 잡.. 더보기
윈도우 S/N 확인 방법 집에 있는 미니PC를 우분투로 변경하기 전에 설치된 정품 윈도우의 S/N를 백업하고 싶었다. 아래는 MS에 문의한 답변 결과 PC에 등록된 Windows 11 제품키 확인 방법에 관하여 문의하셨군요! 아래 안내에 따라 제품키를 확인하실 수 있습니다. 제품키 확인 방법 Windows 검색 창에명령 프롬프트를 입력하고 우클릭하여 관리자 권한으로 실행합니다. 아래 명령어를 입력하고 엔터키를 누릅니다. wmic path softwarelicensingservice get Oa3xOriginalProductKey 제시해드린 답변이 도움이 되었길 바라며, 추가 질문이 있으실 경우 회신해주시면 확인하여 신속하게 답변을 드리도록 최선을 다하겠습니다. 오늘 하루도 좋은 일들만 가득하시길 바라겠습니다. 감사합니다.🤞 아래.. 더보기
assets에 외부 파일 등록 후 접근 assets에 json 파일을 저장 후 이를 접근해서 데이터를 읽어오는 기능을 구현했다. Future loadSupportLang() async { File file = File('assets/json/support_lang.json'); return await file.readAsString(); } 디버깅 모드에서 문제없이 동작해서 별 신경을 쓰지 않고 있었는데, 릴리즈 빌드를 통해 생성된 exe 파일을 실행 시에는 계속해서 파일을 읽지 못하는 문제가 발생했다. 이를 해결하기 위해 yaml 파일의 json 경로도 여기저기 옮겨보고, flutter clean도 해보고, json 파일 형식도 권고하는대로 소문자로 바꿔보고 했으나 변하는 것도 없었고, 설상가상으로 검색능력의 한계인지, 구글링을 해도 연관되.. 더보기