Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 包装在Transform.translate中的TextField在单击时不聚焦_Flutter_Flutter Layout_Flutter Widget - Fatal编程技术网

Flutter 包装在Transform.translate中的TextField在单击时不聚焦

Flutter 包装在Transform.translate中的TextField在单击时不聚焦,flutter,flutter-layout,flutter-widget,Flutter,Flutter Layout,Flutter Widget,这让我非常困惑,因为文本字段仅包装在一个大小的框中,可以完美地工作;但当我将同一段代码包装到Transform.translate小部件中时,它看起来是一个简单的图像(不能点击,也不能聚焦)。 另外,如果我将Transform.translate更改为定位小部件,TextField工作得很好,但我想了解为什么会发生这种情况,因为我需要为这个特殊项目使用Transform.translate over-Positioned class Login extends StatelessWidget {

这让我非常困惑,因为文本字段仅包装在一个大小的框中,可以完美地工作;但当我将同一段代码包装到Transform.translate小部件中时,它看起来是一个简单的图像(不能点击,也不能聚焦)。 另外,如果我将Transform.translate更改为定位小部件,TextField工作得很好,但我想了解为什么会发生这种情况,因为我需要为这个特殊项目使用Transform.translate over-Positioned

class Login extends StatelessWidget {
  Login({
    Key key,
  }) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: const Color(0xfff4f6fa),
      body: Stack(
        children: <Widget>[   
             SizedBox(
              width: 302.0,
              height: 60.0,
              child: TextField(
             decoration: InputDecoration(
               hintText: 'Correo electrónico *',
               prefixIcon: Icon(Icons.send),
               border: OutlineInputBorder(
                 borderSide:
                     BorderSide(width: 1.0, color: const Color(0xffe7e7e7)),
                 borderRadius: BorderRadius.circular(4.0),
               ),
             ),
             style: TextStyle(
               fontFamily: 'Nunito',
               fontSize: 14,
               color: const Color(0xff777777),
               height: 1.4285714285714286,
             ),
             textAlign: TextAlign.left,
             onChanged: (String value) async {
               
             },
             onSubmitted: (String value) async {
               
             },
              ),
            ),
          // Positioned(
          Transform.translate(
            offset: Offset(36.0, 317.8),
            // left: 36,
            // top: 317.8,
            child:
                // Adobe XD layer: 'input:mail' (component)
                SizedBox(
              width: 302.0,
              height: 60.0,
              
              child: TextField(
                decoration: InputDecoration(
                  hintText: 'Correo electrónico *',
                  prefixIcon: Icon(Icons.send),
                  border: OutlineInputBorder(
                    borderSide:
                        BorderSide(width: 1.0, color: const Color(0xffe7e7e7)),
                    borderRadius: BorderRadius.circular(4.0),
                  ),
                ),
                style: TextStyle(
                  fontFamily: 'Nunito',
                  fontSize: 14,
                  color: const Color(0xff777777),
                  height: 1.4285714285714286,
                ),
                textAlign: TextAlign.left,
                onChanged: (String value) async {
                  
                },
                onSubmitted: (String value) async {
                  
                },
              ),
            ),
          ),
          
        ],
      ),
    );
  }
}
类登录扩展了无状态小部件{
登录({
关键点,
}):super(key:key);
@凌驾
小部件构建(构建上下文){
返回脚手架(
背景颜色:常量颜色(0xfff4f6fa),
主体:堆栈(
儿童:[
大小盒子(
宽度:302.0,
身高:60.0,
孩子:TextField(
装饰:输入装饰(
hintText:“Correo Electroónico*”,
前缀:图标(Icons.send),
边框:大纲输入边框(
边界:
边界边(宽度:1.0,颜色:常量颜色(0xffe7e7e7)),
边界半径:边界半径。圆形(4.0),
),
),
样式:TextStyle(
fontFamily:“努尼托”,
尺寸:14,
颜色:常量颜色(0xff777777),
身高:1.4285714285714286,
),
textAlign:textAlign.left,
onChanged:(字符串值)异步{
},
OnSubmited:(字符串值)异步{
},
),
),
//定位(
转换(
偏移量:偏移量(36.0317.8),
//左:36,
//top:317.8,
儿童:
//Adobe XD层:“输入:邮件”(组件)
大小盒子(
宽度:302.0,
身高:60.0,
孩子:TextField(
装饰:输入装饰(
hintText:“Correo Electroónico*”,
前缀:图标(Icons.send),
边框:大纲输入边框(
边界:
边界边(宽度:1.0,颜色:常量颜色(0xffe7e7e7)),
边界半径:边界半径。圆形(4.0),
),
),
样式:TextStyle(
fontFamily:“努尼托”,
尺寸:14,
颜色:常量颜色(0xff777777),
身高:1.4285714285714286,
),
textAlign:textAlign.left,
onChanged:(字符串值)异步{
},
OnSubmited:(字符串值)异步{
},
),
),
),
],
),
);
}
}

如前所述,两个输入都显示在屏幕上(一个在中间,一个在顶部),只有用SizeBox包装的文本字段(堆栈的第一个元素,在sreen的顶部)可以点击,当屏幕中央的一个(堆栈的第二个元素,由于转换而位于那里)时,不会发生任何事情点击。

尝试调试,并使用颤振检查器查看布局网格线和小部件的正确边界。 这会让你更好地理解为什么它会这样。 似乎当您使用Transform小部件时,它不会注册命中,因为它只是移动边界,而不是点击区域。 尝试使用手势检测器包装Transform小部件,然后查看。 您还可以关注GitHub上的类似问题:

如果我点击小部件最初放置的区域(在执行翻译之前,屏幕左上角)TextField仍然没有“激活”、“聚焦”或“准备接收输入”。因此我认为这个问题与您所指的问题本质上是不同的。这是一个奇怪的问题,只是为了用Textformfield替换TextField,有点相同,但请尝试一下