Rxjava는 다양한 스케줄러를 제공합니다. 특정 스케줄러를 사용하다가 다른 스케줄러로 변경하기 쉽습니다. 마치 map 함수를 한 번 더 호출하는 것처럼 새롭게 스케줄러를 추가하거나 기존의 스케줄러를 다른 것으로 교체할 수 있습니다. 뉴 스레드 스케줄러 이름 그대로 새로운 스케줄러를 생성합니다. Rxjava의 스케줄러는 subscribeOn과 observeOn에 나눠서 적용할 수 있는데, 아래는 subscribeOn만 적용한 코드입니다. 입력 import common.CommonUtils import common.Log import io.reactivex.Observable import io.reactivex.schedulers.Schedulers class NewThreadSchedulerExample..

플러터의 가장 기본적인 버튼입니다. RaisedButton 뿐만 아니라 FlatButton, DropdownButton, FloatingActionButton 등의 다양한 위젯들이 있습니다. RaisedButton의 생성자는 아래와 같습니다. const RaisedButton({ Key key, @required VoidCallback onPressed, VoidCallback onLongPress, ValueChanged onHighlightChanged, ButtonTextTheme textTheme, Color textColor, Color disabledTextColor, Color color, Color disabledColor, Color focusColor, Color hoverColor, ..

입력 import common.Log import io.reactivex.Observable class HelloRxJava2V2 { fun emit() { Observable.just("Hello", "RxJava2!!") .subscribe { data -> Log.it(data) } } } fun main() { val demo = HelloRxJava2V2() demo.emit() } 출력 main | value = Hello main | value = RxJava2!! 위에는 just를 사용한 간단한 예제입니다. 지금까지 배운 예제의 공통점은 대부분의 동작이 메인 스레드에서 이루어진다는 것입니다. 요구 사항에 맞게 비동기로 동작할 수 있도록 바꿔야 될 때가 있는데, 이때 스케줄러를 사용한다. 스..

delay timer, interval, defer처럼 delay도 시간을 다루는 함수입니다. timer, interval, defer가 Observable을 생성하는 역할이라면, delay는 연산자로서 보조 역할을 합니다. 입력 import common.CommonUtils import common.Log import io.reactivex.Observable import java.util.concurrent.TimeUnit class DelayExample { fun marbleDiagram() { val data = arrayOf("1", "7", "2", "3", "4") val source = Observable.fromArray(*data) .delay(100, TimeUnit.MILLISEC..

조건 연산자 Observable의 흐름을 제어하는 역할을 합니다. filter 연산자가 발행된 값을 채택하느냐 기각하느냐 여부에 초점을 맞춘다면, 조건 연산자는 지금까지의 흐름을 어떻게 제어할 것 인지에 초점을 맞춥니다. amb amb는 ambigious (모호한)라는 영어 단어의 줄임 말입니다. 여러 개의 Observable 중에서 1 개의 Observable을 선택하는데, 선택 기준은 가장 먼저 데이터를 발행하는 Observable입니다. 나머지 Observable에서 발행하는 데이터는 모두 무시합니다. 첫 번째 Observable인 원을 발행했으므로 사각형을 발행하는 두 번째 Observable에서 발행되는 값은 모두 무시합니다. 입력 import common.CommonUtils import co..

Text Text는 아래와 같은 생성자로 이루어져 있습니다. const Text( this.data, { Key key, this.style, this.strutStyle, this.textAlign, this.textDirection, this.locale, this.softWrap, this.overflow, this.textScaleFactor, this.maxLines, this.semanticsLabel, this.textWidthBasis, }) 아래는 전체 예제 코드입니다. import 'package:flutter/material.dart'; void main() => runApp(TextDemo()); class TextDemo extends StatelessWidget { static ..

결합 연산자 생성 연산자와 변환 연산자는 1 개의 데이터 흐름을 다뤘습니다. 결합 연산자는 여러 개의 Observable을 조합하여 활용합니다. zip zip 함수의 특징은 각각의 Observable을 모두 활용해 2 개 혹은 그 이상의 Observable을 결합할 수 있다는 것입니다. 예를 들어 A, B 두 개의 Observable을 결합한다면 2 개의 Observable에서 모두 데이터를 발행할 때까지 발행을 기다립니다. 입력 import common.Log import common.Shape import io.reactivex.Observable import io.reactivex.functions.BiFunction class ZipExample { fun marbleDiagram() { val ..