일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- widget
- 파이썬
- flutter bloc
- flutter widget
- riot api dart
- tft api dart
- keychain error
- flutter android 폴더
- 발로란트 api dart
- PlatformException(sign_in_failed
- dart.dev
- generate parentheses dart
- 롤 api dart
- leetcode dart
- flutter
- flutter statefulwidget
- lol api dart
- docker overview
- Architectural overview
- 파이썬 부동소수점
- valorant api dart
- com.google.GIDSignIn
- swift 동시성
- 롤토체스 api dart
- dart new 키워드
- dart new
- flutter ios 폴더
- AnimationController
- dart
- swift concurrency
- Today
- Total
목록전체 글 (130)
Coaspe
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/9A5ou/btrGVkpM1B2/7Aefg86NHLzmalSr3dfwfK/img.png)
시간이 지나면서 스스로의 값을 변화하는 애니메이션이 있는 버젼의 Container 입니다. AnimatedContainer는 자동적으로 어떤 특성의 오래된 값에서 새로운 값으로 그들의 값이 바뀔 때 주어진 커브와 애니메이션 시간을 사용하여 변화합니다. null인 특성들은 애니메이트 되지 않습니다. AnimatedContainer의 자식들도 애니메이트 되지 않습니다. 이 클래스는 AnimationContainer의 내부에 존재하는 AnimationController(1)를 사용하여 다른 파라미터 값들 사이의 implicit한 트렌지션을 생성하는 데 유용합니다. 더 복잡한 애니메이션을 만들기 위해 DecoratedBoxTransition 같은 AnimatedWidget 의 서브 클래스를 사용하거나, 따로 정..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/mywQ6/btrN5EJffne/GfTDMByxn7oCTy6rpSCtW1/img.png)
PlatformException(sign_in_failed, com.google.GIDSignIn, keychain error, null) 위의 에러가 저를 며칠동안 괴롭혔습니다. 저런 로그가 발생하며 FlutterFire GoogleSignIn이 완료되지 않았습니다. 해결 방법은 간단합니다. Xcode로 ios 폴더를 열고 Runner를 클릭하면 Signing & Capabilities가 있습니다. 여기에 Keychain Sharing이라는 것이 있는데, 제 프로젝트에서는 무슨 문제가 있었는지 저 안의 내용이 아무것도 없었습니다. Keychain Sharing을 확장시킨 후 Keychain Groups을 추가시켜주시면 에러가 해결됩니다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/SXQRD/btrNxagSX5R/VKzJi0KwNkHnEphahVph41/img.png)
Flutter native notification을 구현하던 도중, notifiaction을 클릭하면 앱을 실행시키고 싶었습니다. 그런 동작을 위해서는 Intent에 대한 이해가 필요했습니다. 알아보도록 합시다. Intent Intent란 실행될 오퍼레이션에 대한 추상적인 묘사를 의미합니다. android.app.Activity 를 런치하기 위해 startActivity와 사용 될 수도 있고, BroadcastReceiver 컴포넌트에 인텐트를 전송하기 위해 broadcastIntent와 함께 사용 될 수도 있고, 백그라운드 android.app.Service와 동작하기 위해 android.content.Context#startService or android.content.Context#bindServ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cwpufZ/btrNwjSbJPd/Dup6MW5K4qDk9okhJ14ZQK/img.png)
Flutter에서 Native 알람을 구현하는 도중에 알람이 발생하지만, 팝업이 생기지 않아 어떤 문제인지 서칭해본 결과 importance가 문제임을 깨달았습니다. 그김에 NotifiacitonChannel의 인스턴스 프로퍼티들이 어떤 역할을 하는지 모두 알아봅시다. 1. id 직관적입니다. 채널의 id를 의미하며, 패키지마다 고유한 값을 가져야한다고 합니다. 2. name 사용자에게 보여지는 채널의 이름을 의미합니다. 3. importance 채널의 importance를 의미합니다. int 값이며 값마다 다른 기능을 부여합니다. 3-1. IMPORTANCE_UNSPECIFIED 유저가 importance를 명시하지 않았을 때 부여되는 값이라고 합니다. 3-2. IMPORTANCE_NONE shade에..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/kTdiM/btrLkvN1erF/LR5fB3byVo9NMlQzuvvkf1/img.gif)
Dart의 async package를 사용하면, Future를 쉽게 취소 할 수 있습니다. 제가 만들고 있는 앱에서는 Google map의 CameraPosition을 기준으로 변경 될 때마다, 주변 가게에 대한 정보 API 요청을 전송합니다. 그런데 요청에 대한 처리가 끝나기 전에 CameraPosition을 마구 움직이게 되면 Future가 쌓이게 되므로 Future를 취소 할 수 있는 기능이 필요했습니다. async package를 다음 받은 후 CancelableOperation 변수를 선언합니다. CancelableOperation? _fetch; CancelableOperation?으로 선언하는 이유는 현재 진행중인 요청이 없을 수도 있기 때문입니다. 그리고 Future를 취소, 등록하는 코드..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/eFYm5F/btrIxZjYLpJ/xvykIFx6D2FGmPptKc2xXk/img.png)
Extends 모든 properties, variables, function이 implemented 된다. override하는 것도 가능 -> 어떤 클래스의 더 구체적인 버젼을 생성하고 싶다면 extends 사용 Implements 모든 properties, variables, functions를 상속 받지는 않고, 어떤 타입을 상속받고 싶을 때 사용 여러 클래스나, 인터페이스 implements 가능하고, 모든 멤버 변수의 getter, 멤버 메소드를 override 해야 합니다. me는 animal을 implements 합니다. 멤버 변수의 getter를 정의하고, 메소드를 재정의하라고 합니다. With Mixin이라는 코드 스니펫을 재사용한다. override도 가능 Mixins은 multiple ..
컨트롤하는 Stream을 가지고 있는 Controller 입니다. 이 Controller는 stream에서 데이터, 오류 그리고 완료 이벤트를 전송할 수 있게 해줍니다. 이 클래스는 다른 객체들이 listen 할 수 있는 간단한 스트림을 생성하고 해당 스트림에 이벤트를 푸쉬할 수 있습니다. 이 Controller는 스트림이 일시 중지되었는지, 구독자가 있는지를 확인하고 둘 중 하나가 변경될 때 콜백을 받을 수 있습니다. 예를 들면: final streamController = StreamController( onPause: () => print('Paused'), onResume: () => print('Resumed'), onCancel: () => print('Cancelled'), onListen:..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/SRnKy/btrHNKWrWou/iNg6hYd86tKOTgKLrTbS91/img.png)
Dart는 async-await, isolates나 Future나 Stream 같은 classes로 concurrent programming을 지원합니다. 이 페이지에서는 async-await, Future, Stream에 대해 전반적인 설명을 합니다.(주로 isolates에 대해) 앱 안에서, 모든 Dart 코드는 isolate 안에서 작동됩니다. 각각의 Dart isolate는 하나의 실행 쓰레드를 가지고, 서로 객체들을 공유하지 않습니다. 서로 통신하고 싶다면, isolates는 message passing을 사용합니다. 비록 Dart의 isolate 모델은 운영체제가 제공하는 프로세스, 스레드 같은 기본 요소로 구현되어 있지만, Dart VM의 이러한 기본 요소의 사용은 이 페이지에서 다루지 않는..
iOS 스타일의 버튼 입니다. 터치하면 페이드 아웃, 인 하며 텍스트와 아이콘을 가지고 있습니다. 선택적으로 배경이 있습니다. padding 의 기본값은 16.0 pixels 입니다. CupertinoNavigationBar 같이 고정된 높이의 부모 안에서 CupertinoButton 을 사용 할 때 , 자식 위젯이 클리핑되는 것을 방지해야 합니다. See also: developer.apple.com/ios/human-interface-guidelines/controls/buttons/ 생성자 CupertinoButton({ Key? key, required Widget child, EdgeInsetsGeometry? padding, Color? color, Color disabledColor = Cu..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/zrto4/btrGQ0eo7kE/60OjdxELeHb4k3UU4x48F1/img.png)
iOS-11 스타일의 큰 타이틀을 가진 iOS 스타일의 네비게이션 바 입니다. CupertinoSliverNavigationBar는 CustonScrollView와 같은 sliver group에 속해야 합니다. 이 네비게이션바는 두개의 섹션으로 나누어져 있습니다. 고정된 상단의 섹션과 iOS-11 스타일의 큰 타이틀이 밑에 있는 슬라이딩 섹션으로 나누어져 있습니다. 이 위젯은 반드시 스크린의 상단에 있어야하고, 자동적으로 iOS 상태바를 차지합니다. largeTitle 위젯은 sliver가 접히면 앱 바 중간에 나타나고, sliver가 확장되면 더 큰 글씨체로 아래 영역으로 전달된다. 좀 더 발전된 방법으로, 선택인자인 middle 위젯을 전달해서 sliver가 접힐 때 네비게이션 바의 중앙에 다른 위젯..