はじめに
Flutterは、Googleが提供するモバイルアプリ開発フレームワークで、多くのプログラマに人気があります。しかし、アプリを開発する際に状態管理が必要になる場面があります。Flutterでは、Providerパッケージを使用することで簡単に状態管理ができます。
この記事では、FlutterでProviderパターンを導入する方法と、具体的な活用例について解説します。まずは、Providerパターンとは何か、簡単に説明します。Providerパターンは、状態管理を効率的に行うための設計パターンで、Flutterでは、State Managementの1つとして用いられます。
セットアップ
まず、pubspec.yaml
ファイルにProviderパッケージを追加します。
dependencies:
flutter:
sdk: flutter
provider: ^x.x.x # 最新のバージョンを確認してください
※パッケージへの追加はflutter pub add provider
でも追加できます
次に、flutter pub getを実行してパッケージを取得します。
基本的な使い方
まずはシンプルなカウンターアプリを作ってみましょう。この例では、Providerを使用してカウンターの値を管理します。
まず、カウンターの状態を保持するCounter
クラスを作成します。このクラスはChangeNotifier
を継承します。
class Counter with ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() {
_count++;
notifyListeners();
}
}
次に、ChangeNotifierProviderを使用して、アプリケーションのトップレベルでCounterクラスのインスタンスを提供します。
void main() {
runApp(
ChangeNotifierProvider(
create: (context) => Counter(),
child: MyApp(),
),
);
}
最後に、Consumerウィジェットを使用して、Counterの現在の状態を取得し、UIを更新します。
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Provider Example')),
body: Center(
child: Consumer(
builder: (context, counter, child) => Text('${counter.count}'),
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
Provider.of(context, listen: false).increment();
},
tooltip: 'Increment',
child: Icon(Icons.add),
),
),
);
}
}
これで、フローティングアクションボタンをタップするたびに、カウンターの値が増加し、その値が画面上に反映されます。
Consumerウィジェットは、Counterが更新されるたびに再構築され、最新のカウンターの値を表示します。
異なる状態の管理
上記の例では単一のCounter
クラスを共有しましたが、Provider
を使用すると複数の異なるタイプの状態を管理することも可能です。それぞれの状態は異なるChangeNotifier
クラスとして定義し、それぞれをChangeNotifierProvider
を使用して提供します。そして、それぞれのConsumer
ウィジェットでそれぞれの状態を消費します。
まとめ
この記事では、FlutterでProviderパッケージを使用してアプリケーションの状態管理を行う基本的な方法を説明しました。Providerを使用すると、アプリケーションの状態を効果的に管理し、コードを整理し、再利用性を向上させることができます。