[flutter] 플러터(Flutter)에서 상태 관리 방법은?

1. StatefulWidget 사용

StatefulWidget을 사용하여 상태를 관리하는 것은 기본적인 방법입니다. StatefulWidget은 상태가 변경될 때 화면을 다시 그리도록 트리거할 수 있습니다.

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  int _counter = 0;

  void _increment() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return RaisedButton(
      onPressed: _increment,
      child: Text('$_counter'),
    );
  }
}

2. Provider 패턴

Provider 패턴을 사용하여 상태를 전역적으로 관리할 수 있습니다. Provider를 이용하면 상태를 관리하고 필요한 곳에서 해당 상태를 사용할 수 있습니다.

class MyModel extends ChangeNotifier {
  int _counter = 0;
  int get counter => _counter;

  void increment() {
    _counter++;
    notifyListeners();
  }
}

Provider(
  create: (context) => MyModel(),
  child: Consumer<MyModel>(
    builder: (context, myModel, child) {
      return RaisedButton(
        onPressed: () => myModel.increment(),
        child: Text('${myModel.counter}'),
      );
    },
  ),
)

3. Bloc 패턴

Bloc 패턴을 이용하여 비즈니스 로직과 UI를 분리하고 상태를 관리할 수 있습니다. Bloc 패턴은 이벤트와 상태를 통해 구성됩니다.

enum CounterEvent { increment }

class CounterBloc extends Bloc<CounterEvent, int> {
  CounterBloc() : super(0);

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

위의 방법들은 플러터 애플리케이션에서 상태를 효과적으로 관리하는 방법들 중 일부일 뿐이며, 실제로는 상황에 맞게 적절한 방법을 선택하는 것이 중요합니다.