일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- jszip
- methodChannel
- identifierForVender
- Game js
- androidId
- babel
- RouteObserver
- web track
- uint16array
- Three js
- typescript
- uint8array
- Babel standalone
- Image Resize typescript
- swagger-typescript-api
- Completer
- Excel
- react
- REST API
- node
- three.js
- Flutter
- KakaoMap
- userevent_tracker
- Raycasting
- Redux
- webrtc
- Three-fiber
- code editor
- Prism.js
- Today
- Total
목록Flutter (72)
Never give up
필자의 2번째 앱은 1.22.6버전으로 되어있습니다 그래서 수정 및 배포를 다시해야될 경우 버전을 다운그레이드 해야되는데 Flutter version v1.22.6
기존 프로젝트를 2.0으로 Migration을 하면서 Null safety부분 때문에 변경된 부분이 생각보다 많다는걸 느꼈습니다 그중 하나가 callback이었는데 여러분들은 삽질하지 마시길 바라며 포스트 올립니다.. 기존에 우리가 사용하던 방식은 다음과 같습니다 class Button extends StatelessWidget { //2.0에서는 당연히 null check 해야됩니다 이건 예시로.. final String name; final Function onTap; Button({this.name, this.onTap}); @override Widget build(BuildContext context) { return ElevatedButton(onPressed: onTap, child: Text..
요번에 2.0으로 넘어오면서 FlatButton, RaisedButton등이 deprecated 되었습니다 아직 완전히 사라지지 않아서 사용해도 괜찮지만 TextButton과 ElevatedButton의 ButtonStyle부분에 대해 알아두는것도 나쁘지 않을거 같습니다 그래서 요번에는 간단한 ButtonStyle 예제를 만들어봤습니다 class ButtonExample extends StatelessWidget { final String title; ButtonExample(this.title); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text(title)), body: Center( ch..
Null safety는 말 그대로 null값에 대한 안정성을 늘리기 위함입니다 유저가 실수로 체크하지 못한곳에서 발생하는 NullPointerException같은 에러를 조기에 방지하고 실제로 돌아가는 어셈블리상에서 null체크를 다시 안하기 때문에 성능적 이득도 있습니다 간단하게 요약해보자면 nullable : null값이 들어가는것을 허용 (ex: int?, String?, bool?) non-nullable : null값이 들어가는것을 허용하지 않음 (ex: int, String, bool) 그럼먼저 간단한 매개변수부터 보겠습니다 class ExampleData{ String title; Widget route; ExampleData({this.title, this.route}); } 우리에게 익숙..
필자가 있는 단톡방에서 비동기처리의 이해가 부족해서 발생하는 문제들을 편법으로 해결하거나 비슷한 질문인데 계속 물어보시는분들이 많아서 혹시나 도움이 될까 예제를 만들어봤습니다 여기서는 void와 Future와 뭐가 다른지 차근차근 알아보겠습니다 먼저 void와 Future는 콜하는 부분에서 따로 처리를 따로 해주지 않는다면 차이가 없습니다 무슨말인지 예제로 알아보겠습니다 void main(){ a(); b(); } Future a()async{ await Future.delayed(Duration(seconds: 2)); print('a finished'); } void b()async{ await Future.delayed(Duration(seconds: 1)); print('b finished'); ..
보통 상태관리 예제로 카운터 예제를 많이 하는데 다른 곳에 적용하기가 조금 어려운 분들을 위해 간단한 todo list를 만들어봤습니다 구조는 저번과 동일하며 데이터타입(State부분)과 이벤트 처리만 조금 변경되니 예제를 보면 충분히 이해될거라 생각됩니다 State class ListState { List list = []; ListState(this.list); ListState update(List list) => ListState(list); } ListItem class ListItem { String title = '', desc = ''; DateTime date = DateTime.now(); int isChecked = 0; ListItem({this.title, this.desc}); ..
필자가 bloc을 이해하는 과정에서 조금 고생과 삽질을 해서 이 부분을 조금 더 수월하게 접근하실 수 있도록 Streambuilder와 bloc을 통해 예제를 만들어봤습니다 먼저 StreamController를 이용해 bloc형식과 유사하게 구현을 한 후 bloc 패키지를 이용해 카운터 예제를 구현할 예정입니다 Event class abstract class CounterEvent {} class IncrementEvent extends CounterEvent {} class DecrementEvent extends CounterEvent {} Bloc class class CounterBloc { CounterBloc() { counterEventController.stream.listen(_mapEv..
여러개의 항목을 Listview를 이용해 출력을 할 때 고민이 생깁니다 한번에 많은 항목을 불러오고 보여주기를 하다보면 퍼포먼스에 문제가 생길 수도 있고 배터리 소모에도 영향을 주게됩니다 그래서 inifite loading 혹은 lazy loading등을 사용하게 되는데 보통 서버에 특정개수로 요청을 해서 여러번 가져오는 작업을 수행하는데 사용자 입장에서 끊기는 부분이 그렇게 좋지는 않을거 같다고 생각해서 한번에 100개정도씩 가져와서 분배해주면 어떨까 싶어서 만들게 되었고 Stream을 이용해서 직접 구현을 해봤습니다 loading class는 이전에 만들어논것을 그대로 사용했으니 예제를 실행해보실분은 로딩 포스트를 참조해주세요 (링크 : devmemory.tistory.com/33 ) Main cla..