由于在TextFormField中使用SuffixIcon的最新稳定构建的Flutter with TextEditingController.clear()存在问题,我不得不重新考虑我的工作(https://github.com/flutter/flutter/issues/35909)
我的解决方案是将TextFormField和IconButton放在一行中,但是我遇到了一些问题,因为前两个水龙头没有在IconButton上注册水龙头。
复制步骤:
如果您在TextFormField中键入一些文本,然后点击另一个TextFormField,然后点击回到原始TextFormField,然后尝试按IconButton清除此TextFormField中的文本,这不是在IconButton上注册点击...而是显示了“全选并粘贴”的键盘选项。然后,我需要再次点击以消除“全选并粘贴”的操作,然后最后在第三次点击时,在IconButton上检测到点击,并且清除了文本。
这确实是一种怪异的行为...无论我当前是否关注文本窗体字段,我都需要为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,)
],)
],
);
}