Flutter- GestureDetector功能不适用于自定义小部件

fcg9iug3  于 2022-12-19  发布在  Flutter
关注(0)|答案(3)|浏览(158)

我试图管理元素之间的一些间隙,并使用setState()更新差距。不幸的是,它不能与自定义小部件TextFieldInput一起作为GestureDetector的子项工作。

GestureDetector(
                      onTap: () {
                        setState(() {
                          gap = 16.00;
                        });
                      },
                      child: TextFieldInput(
                        textEditingController: _passwordController,
                        hintText: 'Enter your password',
                        textInputType: TextInputType.text,
                        isPass: true,
                      ),
                    ),

但它确实可以与文本小部件一起工作。

GestureDetector(
                  onTap: () {
                    setState(() {
                      gap = smallGap;
                    });
                  },
                  child: Container(
                    child: Padding(
                      padding: EdgeInsets.all(5),
                      child: Text('Tap here'),
                    ),
                    padding: const EdgeInsets.symmetric(
                      vertical: 8,
                    ),
                  ),
                )

下面是TextFieldInput构件的结构:

import 'package:flutter/material.dart';

class TextFieldInput extends StatefulWidget {
  final TextEditingController textEditingController;
  final bool isPass;
  final String hintText;
  final TextInputType textInputType;
  final VoidCallback onTap;
  const TextFieldInput({
    super.key,
    required this.textEditingController,
    this.isPass = false,
    required this.hintText,
    required this.textInputType,
    required this.onTap,
    this.child,
  });
  final Widget? child;

  @override
  State<TextFieldInput> createState() => _TextFieldInputState();
}

class _TextFieldInputState extends State<TextFieldInput> {

  @override
  Widget build(BuildContext context) {
    final inputBorder = OutlineInputBorder(
        borderSide: Divider.createBorderSide(context)
    );
    return TextField(
      controller: widget.textEditingController,
      decoration: InputDecoration(
        hintText: widget.hintText,
        border: inputBorder,
        focusedBorder: inputBorder,
        enabledBorder: inputBorder,
        filled: true,
        contentPadding: const EdgeInsets.all(8),
      ),
      keyboardType: widget.textInputType,
      obscureText: widget.isPass,
      onTap: () {},
    );
  }
}

但是即使点击TextFieldInput,“Gap”也不会改变。有谁能帮上忙吗?

xcitsw88

xcitsw881#

尝试使用以下代码片段:

TextField(
 onTap: () {
     // To Do
    },
   // TextField Property
 );
xlpyo6sf

xlpyo6sf2#

手势检测器不适用于textField,请尝试添加ignorePointer

GestureDetector(
            child: new IgnorePointer (
                child: new TextField(
              .......
            ))),
        onTap: () {
         //do some thing
        },
2hh7jdfx

2hh7jdfx3#

TextField有它的onTap属性,我想这就是问题的原因。你应该修改TextField的onTap属性或者使用其他合适的小部件

相关问题