dart Flutter -检测抽头上的TexField

x6492ojm  于 2023-09-28  发布在  Flutter
关注(0)|答案(6)|浏览(116)

我做了一个Flutter应用程序在Windows和所有作品,但当我试图编译到iOS抛出一个意想不到的错误.在文本字段中检测到“onTap”不是正确的参数。我不知道发生了什么,在windows不返回此错误。无论如何。有人知道如何解决这个问题,什么是正确的方法来检测'onTap'在texfield?

new Container(
          color: Colors.blue[300],
          child: new Padding(
            padding: const EdgeInsets.all(8.0),
            child: new Card(
              child: new ListTile(
                leading: new Icon(Icons.search),
                title: new TextField(
                  onTap: () { <--- The named parameter 'onTap' isn´t defined
                    Navigator.push(
                        context,

更新

我试过了,但不起作用

title: new GestureDetector(
            child: new TextField(
          controller: searchController,
          decoration: new InputDecoration(
              hintText: 'Buscar parcela', border: InputBorder.none),
        )),
        onTap: () {
          Navigator.push(
              context,
              new MaterialPageRoute(
                  builder: (context) => new EstatesPage(
                      parcela: widget.parcela,
                      dropdownItem: dropdownSelection)));
        },

更新2:溶液

我更新了flutter和brew。错误消失了。

p3rjfoxz

p3rjfoxz1#

你可以在IgnorePointer小部件 Package 你的文本字段。它会禁用其子节点上的所有手势。这将使手势检测器工作。

title: new GestureDetector(
            child: new IgnorePointer (
                child: new TextField(
              controller: searchController,
              decoration: new InputDecoration(
                  hintText: 'Buscar parcela', border: InputBorder.none),
            ))),
        onTap: () {
          Navigator.push(
              context,
              new MaterialPageRoute(
                  builder: (context) => new EstatesPage(
                      parcela: widget.parcela,
                      dropdownItem: dropdownSelection)));
        },
f3temu5u

f3temu5u2#

TextField具有onTap属性,如GestureDetector,这使得它非常容易。如果只需要onTap功能,请将readOnly设置为true

TextField(
      readOnly: true,
      onTap: () {
        //Your code here
      },
      [...]
    );

对于TextFormField也是如此:

TextFormField(
      readOnly: true,
      onTap: () {
        //Your code here
      },
      [...]
    );
cyvaqqii

cyvaqqii3#

GestureDetector不适合我。我用的是InkWell。

child: InkWell(
              onTap: () {
                _selectDate(context);
              },
              child: const IgnorePointer(
                child: TextField(
                  decoration: InputDecoration(
                    labelText: 'Date',
                    hintText: 'Enter Date',
                    border: OutlineInputBorder(),
                    suffixIcon: Icon(Icons.calendar_today_outlined),
                  ),
                ),
              ),
            ),

和它的工作很好

vxbzzdmp

vxbzzdmp4#

当我使用InkWell而不是GestureDetector时,它对我有效

InkWell(
                  child: IgnorePointer(
                    child: TextField(
                    )
                  ),
                 onTap: (){
                
                 }
               )
vof42yt1

vof42yt15#

使用readonly:文本字段中的点击操作为false

TextField(
  readOnly: true,
  onTap: () {
    // open dialogue
  }
);
hof1towb

hof1towb6#

我使用InkWellIgnorePointer,或者使用ReadOnly设置为true的Gesture检测器。这一切都取决于你的目标是什么。
Inkwell为TextField创建触摸交互,而IgnorePointer使TextField不可点击。

InkWell(
    onTap: () {
    debugPrint('TAP TAP TAP');
   },
  child: IgnorePointer(
   child: TextField( decoration: customDateField(),)));

类似地,TextField上具有readOnly的Gesture Detector设置为false。

GestureDetector(
    onTap: () {
    debugPrint('TAP TAP TAP');
      },
       child: TextField(
       readOnly: true,
       decoration: customDateField(),));

此外,内置的TextField onTap已经处理了触摸。你也可以做

TextField(
         readOnly: true,
         decoration: customDateField(),
         onTap: () {
         debugPrint('Open Calendar');
                   },
         ),

本质上,如果你不想添加任何Inkwell提供的超级效果,GestureDetector是一个不错的选择。

相关问题