flutter IsEmpty检查为TextEditingController返回错误值

tsm1rwdh  于 2023-10-22  发布在  Flutter
关注(0)|答案(2)|浏览(136)
  • 问题 *

isEmpty检查返回非空字符串字段的true。我的猜测是- TextEditingController的String元数据没有从一个BLOG加载中更新字符串。
1.我不确定我是否错过了一些明显的东西,或者这是一个 dart /Flutter错误。
1.有没有一个习惯的方法来完成这个检查?

这是我的代码

var textController = TextEditingController();

  @override
  void initState() {
    super.initState();
    init();
  }

  void init() async {
    final foo = await FooProvider.instance.getFoo(widget.uuid);
    textController.text = foo.title;
  }

textController的实际用法,

GestureDetector(
                onTap: textController.text.isEmpty
                    ? () {
                        debugPrint('Empty - ${textController.text}');
                      }
                    : () {
    // rest of the code

输出(带实际字段值“abc”)x1c 0d1x

bhmjp9jg

bhmjp9jg1#

如果您更改TextEditingController的文本,您的小部件将不会自动重建。
因为setState从未被调用过。

解决方案

1.(推荐)如果你想监听值的变化,用ValueListenableBuilder Package textController

ValueListenableBuilder(
      valueListenable: textController,
      builder: (context, value, child) {
        return GestureDetector(
          onTap: textController.text.isEmpty
              ? () {
            debugPrint('Empty - ${textController.text}');
          }
              : () {},
        ); 
      },
    );

1.(不推荐)如果textController值发生变化,请手动调用setState
这将重新构建您的小部件的整个小部件树。

void init() async {
    final foo = await FooProvider.instance.getFoo(widget.uuid);
    
    setState((){
      textController.text = foo.title;
    });
  }

1.在GestureDetector.onTap中评估isEmpty
通过@Ivo的评论,你可以在onTap中检查isEmpty。这是因为isEmpty是在onTap被调用时计算的。

GestureDetector(
          onTap: () {
            if(textController.text.isEmpty) return;
            // not empty
          },
        )
ffvjumwh

ffvjumwh2#

另一种解决方案是在onTap的单个实现中进行检查,而不是像下面这样在两个不同的实现中进行检查

GestureDetector(
            onTap: () {
                    if (textController.text.isEmpty) {
                      debugPrint('Empty - ${textController.text}');
                    } else {
                      // rest of the code
                    }
                  }

相关问题