問題
autoDispose
のStateNotifierProvider
を作って、
widgetから呼び出そうとした時、以下のエラーが発生。
Bad state: Tried to use StateNotifier after dispose was called
原因
autoDispose
をつけたprovider
は初めて呼び出されたwidgetから生存開始し、
subWidgetも含め、stateを監視されている間は生き続ける。
その初回widgetが破棄されると同時にdisposeされる。それがautoの意味らしい。
ただ、どのwidgetからも監視されず、例えば毎回ref.read
で呼び出されると、その都度disposeされてしまう。たぶん、riverpodでは、State
を保持する必要性をlistener
がいるかで判断している。
解決方法
適切のところでref.watch
をする。