【Dart/Flutter】StateNotifierProviderに定義したメソッドが呼べない

プログラミング

現象

StateNotifierProviderの練習中、下のようなよくあるStateNotifierとStateNotifierProviderを使用して、StateNotifierのメソッドを呼ぼうとしたところ、「The method ‘increment’ isn’t defined for the type ‘StateNotifier’.」と怒られてしまう。

・Notifierの定義

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

  void increment() => state++;
  void decrement() => state--;
}

final StateNotifierProvider counterProvider = StateNotifierProvider<CounterNotifier, int>((ref) {
  return CounterNotifier();
});

・Notifier呼び出し

floatingActionButton: FloatingActionButton(
        onPressed: () {
          // ここでincrementなんてメソッドはないと言われる
          ref.read(counterProvider.notifier).increment();
        },
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      )

原因

counterProviderを定義するときにStateNotifierProvider型にしているのがいけなかった

型を指定せずにfinalで受ければ大丈夫だった。

StateNotifierにはCounterNotifier で定義したメソッドはないので当たり前といえば当たり前。

final StateNotifierProvider counterProvider = … // だめ
final counterProvider = … // OK

おしまい!

コメント

タイトルとURLをコピーしました