[flutter] 플러터 프로바이더를 활용한 상태 관리 패턴

플러터(Flutter) 앱을 개발하다 보면 상태 관리가 중요한 이슈입니다. 특히 앱이 커지거나 복잡해지면 상태를 효과적으로 관리하는 것은 매우 중요합니다. 플러터 프로바이더(Provider)는 이러한 상태 관리 문제를 해결하기 위한 효과적인 패턴 중 하나입니다.

Provider란?

플러터에서 Provider는 상태 관리를 위한 패키지로, 의존성 주입(dependency injection)과 변화 감지(change notification)를 제공합니다. 이를 통해 상위 위젯과 하위 위젯 사이에서 상태를 공유하고, 상태가 변경될 때마다 화면을 다시 그리는 효율적인 방법을 제공합니다.

사용법

먼저, provider 패키지를 pubspec.yaml 파일에 추가하고, flutter pub get 명령어로 패키지를 설치합니다.

dependencies:
  flutter:
    sdk: flutter
  provider: ^4.3.2

다음으로, main.dart 파일에서 MultiProvider를 사용하여 프로바이더를 설정합니다.

void main() {
  runApp(
    MultiProvider(
      providers: [
        ChangeNotifierProvider(create: (context) => Counter()),
        // 추가적인 프로바이더 설정
      ],
      child: MyApp(),
    ),
  );
}

그 후, 상태를 관리할 모델 클래스를 작성하고 ChangeNotifier를 상속받아 상태 변경을 감지할 수 있도록 합니다.

class Counter with ChangeNotifier {
  int _count = 0;

  int get count => _count;

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

마지막으로, 필요한 화면에서 ConsumerProvider.of를 사용하여 상태를 소비하고, 필요한 경우 상태를 업데이트합니다.

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final counter = Provider.of<Counter>(context);

    return Scaffold(
      appBar: AppBar(
        title: Text('상태 관리 예제'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              '버튼을 눌러 상태를 변경하세요:',
            ),
            Text(
              '${counter.count}',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () => counter.increment(),
        tooltip: '증가',
        child: Icon(Icons.add),
      ),
    );
  }
}

결론

플러터 프로바이더를 사용하면 복잡한 상태 관리 문제를 간단하게 해결할 수 있습니다. 의존성 주입과 변화 감지를 통해 효율적으로 상태를 관리하고, 각 위젯 간의 상태 공유를 편리하게 할 수 있습니다.

플러터 프로바이더를 사용하여 상태 관리를 개선하고, 효과적으로 관리할 수 있도록 도와주는 것은 앱의 성능과 유지보수성을 향상시키는 데 도움이 될 것입니다.

참고: 플러터 프로바이더 공식 문서