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