App/Flutter
-
2023-12-01 1. 이슈 One or more plugins require a higher Android SDK version... InAppWebView를 사용하여 코드 수정 후 빌드 중에 위와 같은 에러가 발생했다. 이는 현제 사용하는 플러그인이 안드로이드에서 사용하기 위해서는 추가적인 Android SDK 버전업이 필요하다는 에러이며, 이를 올려주어야 한다. 2. complieSdkVersion build.gradle 에 complieSdkVersion 은 아래와 같이 flutter.compileSdkVersion으로 되어 있을 것이다. [자신이 설치한 플러터 경로]\packages\flutter_tools\gradle\flutter.gradle 에 작성된 설정값을 따르게 된다. 하드 코딩으로..
[Flutter] flutter.compileSdkVersion 위치 확인 및 변경 (One or more plugins require a higher Android SDK version 해결)2023-12-01 1. 이슈 One or more plugins require a higher Android SDK version... InAppWebView를 사용하여 코드 수정 후 빌드 중에 위와 같은 에러가 발생했다. 이는 현제 사용하는 플러그인이 안드로이드에서 사용하기 위해서는 추가적인 Android SDK 버전업이 필요하다는 에러이며, 이를 올려주어야 한다. 2. complieSdkVersion build.gradle 에 complieSdkVersion 은 아래와 같이 flutter.compileSdkVersion으로 되어 있을 것이다. [자신이 설치한 플러터 경로]\packages\flutter_tools\gradle\flutter.gradle 에 작성된 설정값을 따르게 된다. 하드 코딩으로..
2023.12.01 -
2023-11-29 1. 원인 비동기로 동작하는 코드에서 BuildContext를 사용해서 해당 문제가 발생하게 된다. 이는 widget의 비동기 동작 후에 정확인 mounted 되었는지 확인이 필요하며, 이후에 BuildContext를 호출해서 사용하라는 에러이다. 2. 해결 방법 해결 방법은 간단하다. 자신이 사용하는 비동기 함수에서 BuildContext 사용 전 mounted 가 되어있는지 확인하면 된다. 아래는 간단한 예제이며, if (!context.mounted) return; 를 통해서 현제의 context가 mounted 여부를 확인 할 수 있다. void foo(BuildContext context) async { await someFuture(); if (!context.mounted..
[Flutter] Don't use 'BuildContext's across async gaps. Try rewriting the code to not reference the 'BuildContext' 해결방법2023-11-29 1. 원인 비동기로 동작하는 코드에서 BuildContext를 사용해서 해당 문제가 발생하게 된다. 이는 widget의 비동기 동작 후에 정확인 mounted 되었는지 확인이 필요하며, 이후에 BuildContext를 호출해서 사용하라는 에러이다. 2. 해결 방법 해결 방법은 간단하다. 자신이 사용하는 비동기 함수에서 BuildContext 사용 전 mounted 가 되어있는지 확인하면 된다. 아래는 간단한 예제이며, if (!context.mounted) return; 를 통해서 현제의 context가 mounted 여부를 확인 할 수 있다. void foo(BuildContext context) async { await someFuture(); if (!context.mounted..
2023.11.29 -
2023-11-28 1. 패턴 Getter 아래는 getter를 사용한 패턴이다. get 키워드를 이용해 직사각형의 넓이를 추출하는 간단한 예제이다. class Rectangle { final int width, height; Rectangle(this.width, this.height); // This computed property is treated like a function // that returns a value. int get area => width * height; } Setter 아래는 Setter 를 활용한 패턴으로 Point 클래스로 x와 y와 받아 중앙값을 구한다. class Rectangle { final int width, height; Rectangle(this.width,..
[Flutter] Class(model) getter setter 패턴 알아보기 (w.Dart)2023-11-28 1. 패턴 Getter 아래는 getter를 사용한 패턴이다. get 키워드를 이용해 직사각형의 넓이를 추출하는 간단한 예제이다. class Rectangle { final int width, height; Rectangle(this.width, this.height); // This computed property is treated like a function // that returns a value. int get area => width * height; } Setter 아래는 Setter 를 활용한 패턴으로 Point 클래스로 x와 y와 받아 중앙값을 구한다. class Rectangle { final int width, height; Rectangle(this.width,..
2023.11.28 -
2023-11-22 1. 설정 우선 자식의 애플리케이션 최상단에 font를 폴더를 생성한 후 사용할 font 파일들을 넣어준다. your_app/ fonts/ Raleway-Regular.ttf Raleway-Italic.ttf RobotoMono-Regular.ttf RobotoMono-Bold.ttf 이후 pubspec.yaml 에 아래와 같이 font 파일의 위치와 스타일등을 지정해 준다. flutter: fonts: - family: Raleway fonts: - asset: fonts/Raleway-Regular.ttf - asset: fonts/Raleway-Italic.ttf style: italic - family: RobotoMono fonts: - asset: fonts/RobotoMo..
[Flutter] 플러터 font 적용하기2023-11-22 1. 설정 우선 자식의 애플리케이션 최상단에 font를 폴더를 생성한 후 사용할 font 파일들을 넣어준다. your_app/ fonts/ Raleway-Regular.ttf Raleway-Italic.ttf RobotoMono-Regular.ttf RobotoMono-Bold.ttf 이후 pubspec.yaml 에 아래와 같이 font 파일의 위치와 스타일등을 지정해 준다. flutter: fonts: - family: Raleway fonts: - asset: fonts/Raleway-Regular.ttf - asset: fonts/Raleway-Italic.ttf style: italic - family: RobotoMono fonts: - asset: fonts/RobotoMo..
2023.11.22 -
2023-11-21 0. 구조 현재 디렉토리 구조는 아래와 같다. 1. 방법 flutter: uses-material-design: true assets: - assets/logo/ assets: - assets/logo/ pubspec.yaml 에 위와 같은 형식으로 자신의 정적 파일 경로를 추가 한다. 반드시 들여쓰기는 위의 코드와 같이 맞춰주어야한다. 2. 사용법 코드로 해당 정적 파일을 불러올때는 아래와 같은 형식으로 이미지 정보를 불러오면 된다. Image.asset( 'assets/logo/google_logo.jpg', // Google 로고 이미지 height: 24.0, // 이미지 높이 조절 ), 3. 참고링크 https://docs.flutter.dev/ui/assets/assets-..
[Flutter] 플러터 assets /images 추가 방법2023-11-21 0. 구조 현재 디렉토리 구조는 아래와 같다. 1. 방법 flutter: uses-material-design: true assets: - assets/logo/ assets: - assets/logo/ pubspec.yaml 에 위와 같은 형식으로 자신의 정적 파일 경로를 추가 한다. 반드시 들여쓰기는 위의 코드와 같이 맞춰주어야한다. 2. 사용법 코드로 해당 정적 파일을 불러올때는 아래와 같은 형식으로 이미지 정보를 불러오면 된다. Image.asset( 'assets/logo/google_logo.jpg', // Google 로고 이미지 height: 24.0, // 이미지 높이 조절 ), 3. 참고링크 https://docs.flutter.dev/ui/assets/assets-..
2023.11.21 -
2023-11-20 1. 정의 factory 생성자는 매번 새로운 인스턴스를 생성하여 리턴할 필요가 없는 경우에 사용할 수 있는 키워드이다. 즉 factory 키워드를 사용하면, 캐시 되어 있는 인스턴스나 해당 클래스의 하위타입을 리턴할 수 있다. 2. 예제 아래는 Dart 공식 문서에 있는 Logger예제이다. class Logger { final String name; bool mute = false; // _cache is library-private, thanks to // the _ in front of its name. static final Map _cache = {}; factory Logger(String name) { return _cache.putIfAbsent(name, () => ..
[Flutter] Factory keyword 알아보기 With.Dart2023-11-20 1. 정의 factory 생성자는 매번 새로운 인스턴스를 생성하여 리턴할 필요가 없는 경우에 사용할 수 있는 키워드이다. 즉 factory 키워드를 사용하면, 캐시 되어 있는 인스턴스나 해당 클래스의 하위타입을 리턴할 수 있다. 2. 예제 아래는 Dart 공식 문서에 있는 Logger예제이다. class Logger { final String name; bool mute = false; // _cache is library-private, thanks to // the _ in front of its name. static final Map _cache = {}; factory Logger(String name) { return _cache.putIfAbsent(name, () => ..
2023.11.20 -
2023-11-17 1. 원인 기본적으로, Android 9 (API 레벨 28)부터는 usesCleartextTraffic가 기본적으로 비활성화되어 있다. 이는 보안 상의 이유로, HTTPS(SSL/TLS)를 통한 암호화된 연결을 사용하도록 권장하기 때문인데, 안드로이드 9 이상의 버전에서는 기본적으로 암호화되지 않은 트래픽이 차단되며, NetworkSecurityConfig를 사용하여 명시적으로 허용할 수 있다. 2. 방법 방법은 간단하다. AndroidManifest.xml 로 들어가 설정 정보를 변경해주면된다. 아래와 같이 application 단에서 android:usesCleartextTraffic="true" 설정 정보를 추가해 주면 된다. 메인 이미지 출처 : 사진: Unsplash의NEOM
[Flutter] Cleartext HTTP traffic to Site not permitted 이슈 해결2023-11-17 1. 원인 기본적으로, Android 9 (API 레벨 28)부터는 usesCleartextTraffic가 기본적으로 비활성화되어 있다. 이는 보안 상의 이유로, HTTPS(SSL/TLS)를 통한 암호화된 연결을 사용하도록 권장하기 때문인데, 안드로이드 9 이상의 버전에서는 기본적으로 암호화되지 않은 트래픽이 차단되며, NetworkSecurityConfig를 사용하여 명시적으로 허용할 수 있다. 2. 방법 방법은 간단하다. AndroidManifest.xml 로 들어가 설정 정보를 변경해주면된다. 아래와 같이 application 단에서 android:usesCleartextTraffic="true" 설정 정보를 추가해 주면 된다. 메인 이미지 출처 : 사진: Unsplash의NEOM
2023.11.17 -
2023-11-16 1. 방법 // 변수를 선언하여 서버로부터 받아온 데이터를 저장합니다. Map data = {}; // 서버에서 데이터를 가져오는 함수 Future fetchData() async { var response = await http.get(Uri.parse('http://10.0.2.2:8080/test')); if (response.statusCode == 200) { // 성공적으로 데이터를 가져온 경우 setState(() { //data = json.decode(response.body);
[Flutter] http 요청 시 한글 깨짐 해결 방법2023-11-16 1. 방법 // 변수를 선언하여 서버로부터 받아온 데이터를 저장합니다. Map data = {}; // 서버에서 데이터를 가져오는 함수 Future fetchData() async { var response = await http.get(Uri.parse('http://10.0.2.2:8080/test')); if (response.statusCode == 200) { // 성공적으로 데이터를 가져온 경우 setState(() { //data = json.decode(response.body);
2023.11.16 -
2023-11-15 1. 방법 pubspec.yaml 에 우선 아래와 같이 logger 패키지를 선언해 주고 저장해 주면 vscode가 알아서 필요한 정보를 가져온다. dependencies: flutter: sdk: flutter . . . logger: ^2.0.2+1 이후 main.dart 와 같은 곳에 아래와 같이 선언한다. Future main() async { . . . runApp(const MyApp()); } var log = Logger( printer: PrettyPrinter(), ); 아래와 같은 방식 처럼 사용하면 된다. 문자열 메시지 대신 List, Map 또는 Set과 같은 다른 개체를 전달할 수도 있다. if (user != null) { log.i('현재 로그인 유저 : ..
[Flutter] 플러터 Logger 클래스 사용방법2023-11-15 1. 방법 pubspec.yaml 에 우선 아래와 같이 logger 패키지를 선언해 주고 저장해 주면 vscode가 알아서 필요한 정보를 가져온다. dependencies: flutter: sdk: flutter . . . logger: ^2.0.2+1 이후 main.dart 와 같은 곳에 아래와 같이 선언한다. Future main() async { . . . runApp(const MyApp()); } var log = Logger( printer: PrettyPrinter(), ); 아래와 같은 방식 처럼 사용하면 된다. 문자열 메시지 대신 List, Map 또는 Set과 같은 다른 개체를 전달할 수도 있다. if (user != null) { log.i('현재 로그인 유저 : ..
2023.11.15 -
2023-11-14 1. 원인 firebase와 flutter 앱을 연동하는 과정에서 아래와 같은 오류가 발생했다. FlutterError (Binding has not yet been initialized. The "instance" getter on the ServicesBinding binding mixin is only available once that binding has been initialized. Typically, this is done by calling "WidgetsFlutterBinding.ensureInitialized()" or "runApp()" (the latter calls the former). Typically this call is done in the "void..
[Flutter] FlutterError (Binding has not yet been initialized.The "instance" getter on the ServicesBinding binding mixin is only available once that binding has been initialized. 해결방법2023-11-14 1. 원인 firebase와 flutter 앱을 연동하는 과정에서 아래와 같은 오류가 발생했다. FlutterError (Binding has not yet been initialized. The "instance" getter on the ServicesBinding binding mixin is only available once that binding has been initialized. Typically, this is done by calling "WidgetsFlutterBinding.ensureInitialized()" or "runApp()" (the latter calls the former). Typically this call is done in the "void..
2023.11.14 -
2023-10-08 1. 설치 공식 홈페이지에서 설치하는 방법도 있지만 개인적으로는 chocolatey를 활용해 설치하는 게 조금 더 편하고 간편하기 때문에 해당 방법을 추천한다. 우선적으로 windows powershell을 관리자 모드로 실행한다. 이후 아래 링크로 들어 간다. https://chocolatey.org/install Installing Chocolatey Chocolatey is software management automation for Windows that wraps installers, executables, zips, and scripts into compiled packages. Chocolatey integrates w/SCCM, Puppet, Chef, etc. Cho..
[Flutter] Windows 플러터 설치 및 안드로이드 Emulator 연동 하기2023-10-08 1. 설치 공식 홈페이지에서 설치하는 방법도 있지만 개인적으로는 chocolatey를 활용해 설치하는 게 조금 더 편하고 간편하기 때문에 해당 방법을 추천한다. 우선적으로 windows powershell을 관리자 모드로 실행한다. 이후 아래 링크로 들어 간다. https://chocolatey.org/install Installing Chocolatey Chocolatey is software management automation for Windows that wraps installers, executables, zips, and scripts into compiled packages. Chocolatey integrates w/SCCM, Puppet, Chef, etc. Cho..
2023.10.08