오늘하루도 우힣ㅎ

Flutter) Bloc 패턴 적용을 위한 flutter_bloc widget(1) 본문

flutter/BLoC

Flutter) Bloc 패턴 적용을 위한 flutter_bloc widget(1)

우힣 2020. 2. 7. 23:06

 bloc에 대한 설명은 했지만 flutter에서 사용하는 bloc widget을 설명하지 않아 두번에 거쳐 포스팅 하려한다. 기본적인 내용은 https://bloclibrary.dev/#/flutterbloccoreconcepts?id=blocbuilder 에서 참고하여 적은 것들이다. flutter에서는 flitter_bloc이란 dart pakage를 제공하여 준다. 해당 패키지는 아래의 페이지서 볼 수 있으며 사용전 pubspec.yaml파일에 추가할수 있도록 하자!

https://pub.dev/packages/flutter_bloc

 

flutter_bloc | Flutter Package

Flutter Widgets that make it easy to implement the BLoC (Business Logic Component) design pattern. Built to be used with the bloc state management package.

pub.dev

1. BlocBuilder

  • BlocBuilder의 필수 요건은 bloc과 builder 옵션이다.
  • bloc : widget에서 사용하게 되는 bloc을 받게 된다.
  • builder : state들이 업데이트 될때 새로이 그려지게되는 부분으로 Widget을 return해야 한다.
  • 아래와 같은 구조로 만들어 지게 된다.
...
BlocBuilder<ExampleBloc, ExampleState>(
    bloc : _exampleBloc;
    builder : (BuilderContext cotext, ExampleState state){
    	return ...
    }
)
...

2. BlocProvider

  • 새로운 bloc을 만들거나, 만들어진 블럭을 다른 페이지로 넘겨 계속 사용할수 있도록 해주는 역할을 한다.
  • 새로이 bloc을 만들때
BlocProvider<ExampleBloc>(
     create: (BuildContext context) => ExampleBloc(),
     child: Widget...
)
  • 원래 있던 블록을 다른 곳에서 사용하고 싶을때는 BlodProvider.value를 사용하게 된다.
...
BlocProvider<ExampleBloc>.value(
    value : BlocProvider.of<ExampleBloc>(context),
    child : Widget...
)
...

 

3. MultiBlocProvider

  • Bloc을 사용하다 보면 여러개의 bloc을 사용하는곳이 생기게 된다. 이때 사용되는 것이 MultiBlocProvider이다.
  • 초기에는 해당 위젯을 제공하여 주지 않아 BlocProvider를 중첩하여 사용했다. 그 때문에 코드의 가독성이 떨어졌다.
  • 해당 위젯의 제공으로 코드의 가독성이 한층 올라가게 됐다.
...
MultiBlocProvider(
    povider : [
        BlocProvider<ExampleBlocA>(
            create : (BuildContext context) => ExampleBlocA(),
        ),
        BlocProvider<ExampleBlocB>(
            create : (BuildContext context) => ExampleBlocB(),
        ),
        BlocProvider<ExampleBlocC>(
            create : (BuildContext context) => ExampleBlocC(),
        ),
    ],
    child : Widget...
)
...

 

4. BlocListner

  • BlocListener의 경우 state의 변화에 대해 반을을 하는 것이다.
  • BlocListener의 경우 상태 변경시 한번씩 발생해야 하는 기능에 대해서 사용이 되어야 한다.(다른 페이지로의 라우팅 같은것들)
  • state의 변화가 생겼을때 한번 불려서 사용이 되게 된다. 
BlocListener<ExampleBloc, ExampleState>(
    bloc : exampleBloc,
    listener : (BuildeContext context, ExampleState state){
       //state의 변경에 따라 실행 되어야 하는것들
    }
)

 

5. MulitiBlocListener

  • MultiBlocProvider와 같이 listner또한 여러 bloc이 존재할때에 사용하기 위해 만들어진 widget이다.
  • 이 또한 MultiBlocProvider처럼 가독성이 좋다.
...
MultiBlocListener(
    listener : [
        BlocListener<ExampleBlocA, ExampleStateA>(
            listener : (BuildContext context){},
        ),
        BlocListener<ExampleBlocB, ExampleStateB>(
            listener : (BuildContext context){},
        ),
        BlocListener<ExampleBlocC, ExampleStateC>(
            listener : (BuildContext context){},
        ),
    ],
    child : Widget...
)
...

 

 flutter_bloc에서 제공해주는 위의 widget들을 사용하면 좀 더 쉽게 Bloc Pattern을 통한 코딩을 할 수가 있게 된다.

'flutter > BLoC' 카테고리의 다른 글

Flutter) Bloc으로 Todo List 만들기 (2)  (5) 2020.03.05
Flutter) Bloc으로 Todo List 만들기 (1)  (0) 2020.02.28
Flutter) BLoC으로 counter 만들기  (0) 2020.01.18
Flutter) BLoC 이해  (2) 2020.01.12
Comments