[flutter] 플러터(Flutter)와 flutter_bloc 패키지란?

플러터(Flutter)는 Google에서 개발한 모바일 애플리케이션 개발 프레임워크로, 단일 코드베이스로 안드로이드와 iOS 애플리케이션을 개발할 수 있도록 지원합니다. flutter_bloc 패키지는 플러터 애플리케이션의 상태 관리를 위한 패키지로, BLoC(Business Logic Component) 디자인 패턴을 사용하여 상태를 효율적으로 관리할 수 있도록 도와줍니다.

BLoC 디자인 패턴

BLoC 디자인 패턴은 비즈니스 로직과 사용자 인터페이스를 분리하는 패턴으로, 상태를 변경하고 상태에 따라 UI를 업데이트하기 위한 로직을 분리할 수 있습니다. 이를 통해 코드를 재사용하고 테스트하기 쉽게 만들어줍니다.

flutter_bloc 패키지의 장점

flutter_bloc 패키지를 사용하면, 플러터 애플리케이션에서 BLoC 디자인 패턴을 쉽게 구현할 수 있습니다. 상태 관리, 이벤트 처리, UI 업데이트 등을 간단한 코드로 처리할 수 있어 개발자가 앱의 전반적인 구조와 동작을 보다 쉽게 이해할 수 있습니다.

예제 코드

다음은 flutter_bloc 패키지를 사용한 간단한 카운터 앱의 예제 코드입니다.

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

// Bloc의 이벤트 정의
enum CounterEvent { increment, decrement }

// Bloc 클래스 정의
class CounterBloc extends Bloc<CounterEvent, int> {
  CounterBloc() : super(0);

  @override
  Stream<int> mapEventToState(CounterEvent event) async* {
    if (event == CounterEvent.increment) {
      yield state + 1;
    } else if (event == CounterEvent.decrement) {
      yield state - 1;
    }
  }
}

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: BlocProvider(
        create: (context) => CounterBloc(),
        child: MyHomePage(),
      ),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Counter App'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            BlocBuilder<CounterBloc, int>(
              builder: (context, state) {
                return Text(
                  '$state',
                  style: Theme.of(context).textTheme.headline4,
                );
              },
            ),
          ],
        ),
      ),
      floatingActionButton: Column(
        mainAxisAlignment: MainAxisAlignment.end,
        crossAxisAlignment: CrossAxisAlignment.end,
        children: <Widget>[
          FloatingActionButton(
            onPressed: () {
              BlocProvider.of<CounterBloc>(context).add(CounterEvent.decrement);
            },
            tooltip: 'Decrement',
            child: Icon(Icons.remove),
          ),
          SizedBox(height: 10),
          FloatingActionButton(
            onPressed: () {
              BlocProvider.of<CounterBloc>(context).add(CounterEvent.increment);
            },
            tooltip: 'Increment',
            child: Icon(Icons.add),
          ),
        ],
      ),
    );
  }
}

위의 코드는 flutter_bloc 패키지를 사용하여 구현된 카운터 앱의 예제입니다.

결론

flutter_bloc 패키지를 사용하면, 플러터 애플리케이션에서의 상태 관리와 비즈니스 로직 처리를 간단하게 해결할 수 있습니다. BLoC 디자인 패턴을 활용하여 코드를 보다 모듈화하고 유지보수하기 쉽게 만들 수 있습니다. 만약 플러터로 애플리케이션을 개발하고 있다면, flutter_bloc 패키지를 사용해보시기를 권장합니다.

Reference