flutter license 표시 페이지.

손쉽게 어플에서 표시할 라이센스를 표시합니다.. pubspec.yaml 파일 dependencies 에 추가한 라이브러리도 자동으로 표시합니다. 아래 한 줄만 넣으면 됩니다. Navigator.of(context).push(MaterialPageRoute(builder: (_) => const LicensePage())); 만약 수동으로 추가한 추가 라이센스가 있다면 아래와 같이 추가할 수 있습니다. void licenseAdd () { LicenseRegistry. addLicense (() => Stream <LicenseEntry>. value ( const LicenseEntryWithLineBreaks ( <String>[ '라이브러리 이름' ] , ''' 라이센스 본문을 복사한다. ''' , ) , )) ; }

dart (flutter) 문법 - 생성자.

플러터는 생성자의 구문이 매우 다양 합니다. https://dartpad.dev 에 아래 코드를 복사해서 실행해 보세요. factory 는 다음 페이지에 정리되어 있습니다. https://abel9999.blogspot.com/2022/07/dart-flutter-factory.html class Animal { String name = '' ; int id = 0 ; // 이름 없는 생성자 . Animal() {} // 이름 없는 생성자는 하나이상 만들수 없다 . // Animal(int i) { } // 에러 . // 이름 있는 생성자 . Animal. name () {} // 생성자를 여러개 만들수 있고 // 멤버변수의 기본값을 설정할 수 있다 . Animal. nameNew () : name = 'test' {} // 생성자에서 파라메터를 받을수 있다 . // 아래 생성자는 동일한 동작을 한다 . Animal. arg (String n) { name = n ; } Animal. arg2 (String n) : name = n {} Animal. arg3 ( this . name ) ; // {} 로 둘러산 부분은 호출시에 이름을 지명해야 한다 . // 예 ) Animal a = Animal.argName(name:'go', id:2); Animal. argName ({ required this . name , required this . id }) ; // [] 로 둘러싼 부분은 호출시에 값이 없으면 기본값을 지정한다 . // 예 ) // Animal a = Animal.argName2(); // Animal a2 = Animal.argName2('go'); // Animal a3 = Animal.argName2('go'. 33); // Animal a4 = Animal.argName

dart (flutter) 문법 - null 관련 문법 정리.

dart문법에서 아래 키워드를 코드와 주석으로 설명 합니다. ?  !  ??  ??=  ?.  ?.. https://dartpad.dev 에 아래 코드를 복사해서 실행해 보세요. void main () { String? strTest ; // '?' 는 null 이 가능하다는 표시 . // '!' 는 strTest 가 null 이 아니라는 표시 . // Uncaught TypeError 예외가 난다 . //print("'!' $strTest!"); print(strTest) ; // null 을 print 하면 null 출력한다 . strTest = "test" ; print(strTest) ; // getString() {} 은 null 을 리턴할 수 있다는 암시적 표현이다 . print( "'getString()' ${getString()} " ) ; // String? getString2() {} 은 null 을 리턴할 수 있다는 명시적 표현이다 . print( "'String? getString2()' ${getString2()} " ) ; // String getString3() {} 은 반드시 String 을 리턴하는 명시적 표현으로 // return "test" 가 없으므로 예외가 난다 . int? nInt ; int res = nInt ?? 5 ; // '??' 는 nInt 가 null 이면 5 를 반환한다 . print( "'??' $res " ) ; nInt ??= 5 ; // '??=' 는 nInt 가 null 이면 nInt 에 5 를 할당한다 . print( "'??=' = $res " ) ;

android studio emulator만 독립 실행하는 방법.

안드로이드 개발할 때 사용하는 에뮬레이터를 독립 실행하는 방법입니다. 안드로이드 스튜디오 실행 없이 에뮬레이터를 사용하고 싶거나, 빠르게 에뮬레이터를 실행하고 싶을 때 사용 합니다. https://developer.android.com/studio 안드로이드 스튜디오를 설치하고 안드로이드 스튜디오에 있는 디바이스 매니저로 가상 디바이스를 만듭니다. https://www.nirsoft.net/utils/nircmd.html 다운 받아 압축을 풀고 nircmd 파일을 아래 배치 파일과 같은 경로에 복사 합니다. 배치파일을 실행하면 검은 콘솔이 같이 뜨는데 콘솔을 보이지 않게 해 줍니다. 아래 스크립트를 콘솔(cmd.exe)에서 실행하거나 배치파일(bat)을 만들어 실행하면 됩니다. bat로 만드는게 더 편합니다. * 에뮬레이터에 생성된 가상 디바이스 목록을 보여줍니다. %localappdata%\Android\Sdk\emulator\emulator -list-avds @pause * 에뮬레이터를 실행합니다. nircmd exec hide %localappdata%\Android\Sdk\emulator\emulator -avd <디바이스이름> 위 경로는 sdk가 설치되어 있는 기본 경로 입니다. 다른 폴더에 설치했다면 경로를 변경해 줘야 합니다. 

flutter - ChangeNotifierProvider 사용법 설명.

* provider 가 필요한 이유.  - 예를 들면 flutter에서 버튼을 클릭한 경우 다른 위젯이나 상위 위젯의 리빌드를 구현하기 위해 필요하다. * 설명.  - ChangeNotifierProvider에 ChangeNotifier 상속 받은 클래스를 등록하면 하위 위젯에서 등록한 것을 찾아 사용할 수 있습니다. 즉 상위 위젯에서 하위 위젯으로 흐르는 데이터의 이동 통로를 만든다 생각하면 됩니다.  - 리빌드가 필요한 위젯을 지정합니다.   + Consumer, context.watch, Provider.of<Counter>(context, listen: true) 사용.  - 갱신이 필요한 경우 ChangeNotifierProvider에 등록한 ChangeNotifier 상속 받은 클래스를 찾아 notifyListeners() 호출하면, 위에서 지정한 리빌드가 필요한 위젯을 리빌드 합니다.   + 데이터 사용은 context.read<Counter>(), Provider.of<Counter>(context, listen: false)으로 합니다.  * 중요 - 아래 함수의 차이를 알아야 합니다.  - context.read<Counter>(), Provider.of<Counter>(context, listen: false)   + 데이터에 접근만 합니다.  - context.watch, Provider.of<Counter>(context, listen: true), Consumer   + 데이터에 접근도 하고, notifyListeners() 호출시 리빌하는 위젯을 지정하는 기능도 있습니다.   + 이 함수나 클래스를 사용하지 않으면 notifyListeners() 호출해도 리빌드 하지 않습니다.  * 공식 사이트.  -  https://pub.dev/packages/provider * 코드 구현.  - https://pub.dev/packages/provider/example 의 샘플 코

dart (flutter) 문법 - factory 키워드.

dart (flutter)에서 지원하는 factory 기능에 대해 정리 합니다.  * 설명.  - 생성자는 원래 리턴할 수 없지만, factory 키워드를 사용하면 현재 클래스와 자식 클래스의 인스턴스를 생성자에서 리턴할 수 있게 됩니다.  - 아래 코드의 주석으로 설명 합니다. 동작과 제한 사항을 알 수 있습니다.

사용기- 분리형 키보드 Cloud Nine C959 ErgoTKL

이미지
분리형 키보드 Cloud Nine C959 ErgoTKL 약 한달정도 사용하고 사용기 올립니다. 하단에 사진이 있고 사진 클릭하면 크게 볼 수 있습니다. * 장점.  - 어깨 피고 타이핑 할 수 있습니다.  - 손의 피로도가 낮습니다. 일반키보드는 손을 모아치다 보니 손목도 안쪽으로 꺾어져 있는데 분 ErgoTKL은 분리형 키보드와 높이조절로 손목이 펴져서 그런지 편했습니다.  - 매크로와 휠을 지원해 키보드로 할 수 있는 기능들이 많습니다. 소프트웨어를 다운받아 설치하면 됩니다.  https://cloudnineergo.com/pages/downloads  - 다른 분리형 키보드에 비해서 가격이 준수 했습니다. 다른 브랜드들은 옵션까지 하면 오히려 이게 저렴한 편이었습니다. ErgoTKL은 옵션을 추가하지 않아도 손목받침대, 높이조절 할 수 있습니다.   - 손목 받침대 질이 좋습니다. * 단점.  - 마우스 위치가 좀 애매합니다.  - Esc 버튼 위치가 달라 손이 잘못 누를 때가 있습니다.  - 오른쪽 끝 기능키가 붙어 있어 백스페이스, 엔터가 간혹 잘못 누를 때가 있습니다.  - 한영키가 없어 레지스트리 설정으로 쉬프트+스페이스바 로 사용합니다.   + [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters]   + "LayerDriver KOR"="kbd101c.dll"  - 양쪽 키보드 연결이 Usb-c 케이블이라 아무 케이블이나 연결해도 가능할 줄 알았는데 다른 케이블로는 안됩니다.    + 테스트 해보니 A8-B8 핀이 연결되야 하는데 이게 연결된 케이블이 없습니다. Usb-c 핀에서 GND, VCC, D+, D-, A5-B5, A8-B8 이 연결되야 합니다. 공식홈에서 구입하거나 DIY해야 합니다. (SBU (Secondary BUS)) * 사용기.  - 2-3일 정도 치니 금방 적응했습니다.  - 키 위치가 어색한 곳은 3M 욕실용