ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • bloc패턴 -rxdart를 활용한 약식
    flutter 2021. 7. 3. 23:52

     

     

    state클래스와 BlocBuilder나 BlocProvider를 사용하지않고, 간소화되서 구현한 코드이다.

    MainBloc에 event가 들어오면 MainBloc의 생성자쪽의 스트림컨트롤러가 이벤트를 구독하고,

    해당 로직으로 나눠준다.

    class MainBloc extends MainBlocBase {


    Sink get addEvent => _addEvent;
    final _addEvent = StreamController();

    MainBloc(repo) : super(repository) {
    // MainBloc의 constructor, 

    _addEvent.stream.listen((action) {
    // _addEvent가 다른곳에서 MainBloc에 던지는 이벤트를 관찰하고,

    // switch문에서 이벤트를 분기시켜 로직을 실행함.

    switch (action.runtimeType) {

     

    case SetFilterEvent:
    setFilterEvent(action);
    break;

     

    case MakePostEvent :
    makePostEvent(action);
    break;



    default:
    assert(false);
    }
    })
    }

     

     

    // 생성자에서 MakePostEvent이벤트를 감지하면 이부분을 실행하게된다.

    // 바디의 내용은 그냥 비즈니스 로직이라 별로 큰의미는없음...


    makePostEvent(MakePostEvent? postEvent) async {

    // 비즈니스로직 블라블라..

    Post post = Post.makePost(
    title: textSubscription!.value.text,
    );
    postModelSub.sink.add(post);
    }
    }

     

    setFilterEvent(){

    // 비즈니스로직 블라블라..

    }

     

     

     

     

     

    // MainBloc 이 상속하고있는 부모 클래스인데, 큰의미는 없고 이곳에 필요한 변수들을 넣어놈

    // 현업에서 사용한 코드를 요약한 것인데, 실제로는 여러가지 필요한 걸 많이 넣어놨다.

    // 간소화한 구조이고.. 본인의 필요에 따라 mixin 클래스를 같이 쓰는것도 좋다.

     

    class MainBlocBase {

    final Repository? repository;

    final textSubscription = BehaviorSubject<TextEditingController>();

    final postModelSub = BehaviorSubject<Post>();

     

    CommunityBlocBase(this.repository) {
    }



    // 이벤트들
    class setFilterEvent {
    String? category;


    SetFilterEvent({this.category});
    }

    class MakePostEvent {
    String? title;

    MakePostEvent(
    {this.title}) {}
    }

     



    타클래스에서 MainBloc에 이벤트를 던질때는

    _mainBloc.addEvent.add(new MakePostEvent(// 블라블라..));

    이런식으로 던진다.

     

    'flutter' 카테고리의 다른 글

    Equatable의 사용과 Bloc  (0) 2021.07.18
    bloc 패턴 - flutter_bloc 패키지 사용  (0) 2021.07.16
    flutter bloc 패턴, rxdart..  (0) 2021.07.03
    TabBarView PageView에서 위젯 리빌드 방지  (0) 2021.05.03
    null safety  (0) 2021.05.02
Designed by Tistory.