Flutter頑張るweek day1

Bottom Navigation Barで画面遷移できるようになりたい。

MVVMってなんじゃ。

MVVMとはModel・View・ModelViewの3つのことで、アプリ開発の基本構造の1種のようだ。

それぞれに役割がある。
Viewは、画面表示担当。入力・操作の受付担当。
Modelは、データの管理・内部の処理・外部とのやりとりを担当。
View Modelは、上記2つを仲介し、変更を反映させる役割。

なるほど。役割分担。

MVVMを実装するためのライブラリがあって、Riverpodという。状態管理するためのライブラリ。状態管理ってのがまだよくわかんないけど、要は役割分担(ファイルを分割して)それぞれの役割を円滑に進めるために、データのやり取りをしやすくするためのものだと思われる。データ管理人を雇う、みたいな?

インポートした後に、アプリ全体をProviderScopeで包む。
void main() { runApp(ProviderScope(child: MyApp())); }

次に、プロバイダーを作る。
データを渡す役割の人をproviderというのかな。何種かいる。
ProviderとかStateProviderとかStateNotifierProviderとか。今回はStateNotifier providerを使う。


今僕はかなり混乱している。登場人物が多すぎるからだ。
特定の役割を持ったクラス(登場人物)があって、それを整理する方が先決のようだ。

Notifier:クラス。リスナーに変更の通知をする。ChangeNotifier・StateNotifierとあるが、Changeの方がmutable、Stateの方はimmutable。
NotifierProvider:ウィジット。childにNotifierのモデルを提供する。使いたいウィジットの上に置く。最初に受け渡すデータを定義する。
Consumer:ウィジット。データを受け取る。リスナーのこと?


今回の場合、
1、StateNotifierクラスという設計図を作って、
2、そのインスタンスをreturnするStateNotifierProviderというウィジットを作る。
3、プロバイダーから値を取得できるように、Statefulウィジットではなく、ConsumerStatefulWidgetに変更する。
4、ref.watchで現在の状態(値 今回の場合はint)を取得する。
5、ref.readでnotifier内のメソッドを使える。


1、StateNotifierを継承し、状態の型と初期値と状態を管理するためのメソッドを定義する。メソッドでstateを使うことで状態を更新できるようだ。
今回は、bottomnavigationBarからインデックス番号を取得できるので、こんな感じ?

class IndexNotifier extends StateNotifier<int> {
IndexNotifier() : super(0);

void onitemTapped(int index){
state = index;
}
}

2、プロバイダーの定義は、
final IndexProvider = StateNotifierProvider<IndexNotifier, int>((ref) { return IndexNotifier(); });

3、bottomnavigationbarを使う場合、statefulwidgetである必要があるようだ。



ここまできた。
息切れ中。

https://flutternyumon.com/riverpod-how-to-use-statenotifierprovider/


この記事が気に入ったらサポートをしてみませんか?