목록전체 글 (134)
Foggy day
해결방법 - Xcode에서 빌드 Flutter 프로젝트를 진행하면서 IOS 네이티브 쪽을 작업해야 할 경우가 있습니다. 그런데 Xcode에서 프로젝트를 열어보면 import Flutter 라인에서 no Such module 'Flutter'라는 에러 문구가 발생합니다. 물론 에러가 나온다고 Flutter 앱이 IOS에서 빌드가 안되는 것은 아니지만 코드 작업을 할 때 어려움이 있습니다. 이 문제를 해결하기 위해서 구글링을 많이 해보면서 여러가지 시도를 해봤지만 가장 확실한 방법은 Xcode에서 빌드를 돌리는 것입니다. 오류문구가 나온다 해도 시뮬레이터로 빌드를 돌려보면 오류가 곧 사라집니다. 빌드를 한 후에야 Flutter SDK가 인식되는 것 같습니다. 어떤 이유에서 발생한 문제인지 정확히 알 수 없지..
이번 포스팅에서는 디바이스에 있는 file들을 불러오는 것을 해보겠습니다. 1. 권한처리 2. ReadDeviceFile 1. 권한처리 Android api level 29를 기점으로 권한 처리를 다르게 해야합니다. 만약에 29 이하라고 한다면 READ_EXTERNAL_STORAGE권한을 추가 해야하고 런타임 권한을 획득해야 합니다. 30 이상이라면 MANAGE_EXTERNAL_STORAGE 권한을 추가하고, 모든 파일에 대한 접근 권한을 허용할 수 있는 시스템 창을 호출해야 합니다. 또한 외부 폴더에 접근하기 위해서는 Manifest의 appliction 태그 안에 android:requestLegacyExternalStorage="true"를 추가해야 합니다. Manifest MainActivity ..
이번 포스팅에서는 EventChannel에 대해 알아보겠습니다. EventChannel(이벤트채널)이란? - 이벤트 채널은 플랫폼들이 이벤트 스트림을 사용해서 통신하는 방법입니다. 데이터 전송 방향은 Native -> Flutter입니다. 1. Dart EventChannel 2. Android EventChannel 1. Dart EventChannel 먼저 Dart 코드에서 이벤트 채널(스트림)을 등록해 보겠습니다. EventChannel 클래스를 생성해야 하는데 이때 생성자에 채널명을 넣어주세요. EventChannel 클래스의 receiveBroadcastStream 함수의 리턴 타입은 Stream이므로 listen 함수를 구현할 수 있습니다. listen 함수의 event에는 Native에서 전..
이번 포스팅에서는 부트앱을 만들어보겠습니다. 부트앱은 디바이스의 전원이 켜졌을 때 실행되는 앱을 말합니다. 1. BootApp Reciever 만들기 2. Manifest 설정 3. 권한 요청 1. BootApp Reciever 만들기 Boot App을 만들기 위해서는 BroadcastReceiver를 추가해야 합니다. 디바이스의 전원이 켜지면 onReceive 함수에 진입하게 되고, Intent를 사용해서 원하는 Activity를 실행시킵니다. 그런데 Android OS 10 이상부터는 SYSTEM_ALERT_WINDOW 권한이 필요합니다. BootApp Receiver에서는 Settings.canDrawOverlays 함수를 사용해서 권한이 허용됐는지 아닌지만 체크합니다. 비허용이라면 return 함..
이번 포스팅에서는 안드로이드 런처앱을 만들어보겠습니다. 런처앱을 만들게 된 계기는 참여했던 프로젝트에서 디바이스가 켜졌을 때 아무것도 없는 화면을 보여줘야 했기 때문입니다. 기본적으로 Android Os가 제공하는 런처에는 시스템 앱들을 보여주고 있습니다. 하지만 프로젝트에서는 디바이스를 실행시켰을 때 기본적으로 설치된 시스템 앱들은 숨기고, 비어있는 화면만 보여줘야 했습니다. 그리고 해당 비즈니스에서 사용할 애플리케이션은 Boot App으로 만들어서 실행시켜야 했습니다. 이때 아무것도 없이 비어있는 화면을 보여주기 위해서는 런처앱을 만들어야 했습니다. 참여했던 프로젝트에서는 앱 목록을 보여주는 기능은 없었지만, 예제에서는 설치된 앱 목록들을 보여주고, 클릭했을 때 앱을 실행시키는 기능도 추가했습니다. ..
이번 포스팅에서는 MethodChannel에 대해 간략히 살펴보고, Android Native와 통신하는 방법을 알아보겠습니다. Flutter는 MethodChannel을 사용해서 각 플랫폼과 통신할 수 있습니다. 메소드 채널은 비동기방식이며 FIFO 순서를 보장합니다. 1. Flutter -> Android Native 2. Android Native -> Flutter 1. Flutter -> Android Native 먼저 볼 것은 Flutter에서 Android Native의 함수를 호출하는 방법입니다. - Flutter(Dart) Flutter 측면에서 호출하는 방식은 간단합니다. MethodChannel 클래스를 생성하고, 생성자에 채널 이름으로 원하는 문자열을 넣습니다. 그리고 invokeM..
채널 확인 flutter channel 채널 변경 flutter channel {} ex) flutter channel stable 업그레이드(최신 버전으로 업그레이드) flutter upgrade 다운그레이드(최신 버전보다 한 단계 낮은 버전으로 다운그레이드) flutter downgrade 특정 버전으로 변경 # flutter SDK가 설치된 디렉터리로 이동 cd ~/development/flutter git checkout 3.0.0 flutter doctor flutter --version
이번 포스팅에서는 StreamController의 broadcast에 대해 알아보겠습니다. stream 사용법 -2에서는 single listen을 사용했었습니다. 리스너를 한개만 붙여서 사용할 수 있었습니다. StreamController에는 여러개의 broadcast를 이용해 여러개의 listener를 사용할 수 있습니다. 1. StreamController.broadcast생성 2. Listener 추가 3. add, addStream 4. onListen, onResume, onPause, onCancel 5. 리스너 여러개 추가 5. close 실행 영상 1. StreamController 생성 여러개의 리스너를 사용하고 싶다면 생성할 때 broadcast 생성자를 사용해야 합니다. final ..
이번 포스팅에서는 StreamController에 대해 알아보겠습니다. StreamController는 stream을 구독할 수 있는 클래스입니다. 이전 포스팅에서 Stream을 사용해 데이터의 흐름을 관찰할 수 있다고 했습니다. 그리고 StreamController는 이러한 Stream을 편하게 관리할 수 있도록 도와줍니다. 1. StreamController 생성 2. Stream listen 3. button widget 4. add 5. addStream 6. onListen, onResume, onPause, onCancel 7. close 최종 영상 1. StreamController 생성 StreamController를 생성할 때 Stream의 데이터 타입을 설정해 줄 수 있습니다. 예제에서..
Dart에서는 Future와 Stream으로 비동기 프로그래밍을 구현할 수 있습니다. 이번 포스팅에서는 Stream에 대해 알아보겠습니다. Stream의 사전적인 의미는 흐르다는 뜻이며, 프로그래밍에서는 데이터의 흐름을 의미합니다. Stream을 사용한다면 지속적으로 데이터의 흐름을 관찰할 수 있습니다. 1. Stream 함수의 구조 2. Stream 함수들 3. StreamBasic Widget 1. stream 함수의 구조 Stream에서는 데이터를 전달하는 부분이 있고, 데이터를 받는 부분이 있습니다. 데이터 전달은 Stream 함수에서 하고, 데이터를 받는 것은 listen에서 합니다. 아래 코드를 보면 countStream이라는 Stream타입의 함수를 만들었습니다. 구조를 보면 Stream는 ..