万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    Riverpod使ってる時TextFieldとCupertinoTextFieldとでonChangedのref.readの挙動が違う?

    TextFieldCupertinoTextFieldとで onChangedref.readの挙動が違う?

      final _textProvider = StateProvider.autoDispose((ref) => '');

    を定義。

    TextFieldCupertinoTextFieldで以下のように設定

          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;
      }