Flutter没有使用TextFormField

时间:2019-08-17 06:35:10

标签: flutter dart

由于在TextFormField中使用SuffixIcon的最新稳定构建的Flutter with TextEditingController.clear()存在问题,我不得不重新考虑我的工作(https://github.com/flutter/flutter/issues/35909

我的解决方案是将TextFormField和IconButton放在一行中,但是我遇到了一些问题,因为前两个水龙头没有在IconButton上注册水龙头。

复制步骤:

如果您在TextFormField中键入一些文本,然后点击另一个TextFormField,然后点击回到原始TextFormField,然后尝试按IconButton清除此TextFormField中的文本,这不是在IconButton上注册点击...而是显示了“全选并粘贴”的键盘选项。然后,我需要再次点击以消除“全选并粘贴”的操作,然后最后在第三次点击时,在IconButton上检测到点击,并且清除了文本。

enter image description here

这确实是一种怪异的行为...无论我当前是否关注文本窗体字段,我都需要为Flutter首次注册在IconButton上的轻敲的方法。

有没有一种方法可以使我在IconButton上获得轻拍,以优先于TextFormField。 有趣的是,当我将清除按钮移到另一行(不在同一行中)时,它工作正常,似乎不喜欢将IconButton与TextFormField放在Row中,但这是一种常见的设计模式。

对此有何想法?下面是我正在使用的代码,我正在使用Flutter的最新稳定版本:

  Widget _buildCaravanWaterHeaterMakeText() {
    return Row(
      children: <Widget>[
        Expanded(child: TextFormField(
          focusNode: _caravanWaterHeaterMakeFocusNode,
          decoration: InputDecoration(
            labelStyle: TextStyle(color: _caravanWaterHeaterMakeLabelColor),
            labelText: 'Make',
// Throws an error so commenting out until flutter fixes
//              suffixIcon: widget.caravanGasSafetyModel.caravanWaterHeaterMake.text == ''
//                  ? null
//                  : IconButton(
//                  icon: Icon(Icons.clear),
//                  onPressed: () {
//                    setState(() {
//                      SchedulerBinding.instance.addPostFrameCallback((_) {
//                        FocusScope.of(context).unfocus();
//                        widget.caravanGasSafetyModel.caravanWaterHeaterMake.clear();
//                      });
//                    });
//                  })
          ),
          controller: widget.caravanGasSafetyModel.caravanWaterHeaterMake,
        ),),
        widget.caravanGasSafetyModel.caravanWaterHeaterMake.text.isEmpty ? Container() :
        Column(children: <Widget>[
          Container(padding: EdgeInsets.only(top: 14), child: IconButton(
              color: _caravanWaterHeaterMakeFocusNode.hasFocus? orangeDesign1 : Colors.grey,
              icon: Icon(Icons.clear),
              onPressed: () {
                setState(() {
                  widget.caravanGasSafetyModel.caravanWaterHeaterMake.clear();
                });
              }),),
          Container(height: _caravanWaterHeaterMakeFocusNode.hasFocus? 2: 1, width: 48, color: _caravanWaterHeaterMakeFocusNode.hasFocus? orangeDesign1 : Colors.grey,)
        ],)
      ],
    );
  }

0 个答案:

没有答案