TextField
とCupertinoTextField
とで onChanged
のref.read
の挙動が違う?
final _textProvider = StateProvider.autoDispose((ref) => '');
を定義。
TextField
とCupertinoTextField
で以下のように設定
TextField( // ~~~~略 onChanged: (text) { _handleText(ref, text); }, onSubmitted: (String? value) async { await _onTap(ref); }, ),
完了時に呼ばれる_onTap
のメソッドは
Future<void> _onTap(WidgetRef ref) async { final fieldText = ref.read(_textProvider); debugPrint(fieldText);
値の変化時に読めればいいので_handleText
のメソッドでread
を使っている。
void _handleText(WidgetRef ref, String text) { ref.read(_textProvider.notifier).state = text; }
しかし、TextField
側は_onTap
のログはちゃんと出るが、
CupertinoTextField
だと、空文字になった。
納得はいかないが、ref.read
ではなくref.watch
ならいけた。
void _handleText(WidgetRef ref, String text) { ref.watch(_textProvider.notifier).state = text; }