現象
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
おしまい!
コメント