Android 为什么我要在《颤栗》中断掉绳子?
我有一个简单的问题,但我不知道它是如何在代码中发生的。 代码如下:Android 为什么我要在《颤栗》中断掉绳子?,android,flutter,dart,mobile,Android,Flutter,Dart,Mobile,我有一个简单的问题,但我不知道它是如何在代码中发生的。 代码如下: Widget build(BuildContext context) { String newTaskTitle; return Container( color: Color(0xff757575), child: Container( padding: EdgeInsets.all(20.0), decoration: BoxDecoration(
Widget build(BuildContext context) {
String newTaskTitle;
return Container(
color: Color(0xff757575),
child: Container(
padding: EdgeInsets.all(20.0),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20.0),
topRight: Radius.circular(20.0),
),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Text(
'Add Task',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 30.0,
color: Colors.lightBlueAccent,
),
),
TextField(
autofocus: true,
textAlign: TextAlign.center,
onChanged: (newText) {
newTaskTitle = newText;
},
),
FlatButton(
child: Text(
'Add',
style: TextStyle(
color: Colors.white,
),
),
color: Colors.lightBlueAccent,
onPressed: () {
print(newTaskTitle);
},
),
],
),
),
);
}
小部件构建(构建上下文){
字符串newTaskTitle;
返回容器(
颜色:颜色(0xFF7575),
子:容器(
填充:所有边缘设置(20.0),
装饰:盒子装饰(
颜色:颜色,白色,
borderRadius:仅限borderRadius(
左上:半径。圆形(20.0),
右上角:半径。圆形(20.0),
),
),
子:列(
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
正文(
“添加任务”,
textAlign:textAlign.center,
样式:TextStyle(
字体大小:30.0,
颜色:Colors.lightBlueAccent,
),
),
文本字段(
自动对焦:对,
textAlign:textAlign.center,
一旦更改:(新文本){
newTaskTitle=newText;
},
),
扁平按钮(
子:文本(
“添加”,
样式:TextStyle(
颜色:颜色,白色,
),
),
颜色:Colors.lightBlueAccent,
已按下:(){
印刷品(新标题);
},
),
],
),
),
);
}
我尝试获取文本字段输入的值并将其传递到另一个屏幕,但当我键入某个内容然后按下按钮时,它会给我空值。
您已经在build()方法中定义了字符串newTaskTitle,请尝试从build方法中删除它,然后尝试在StatefulWidget中定义它
之所以会发生这种情况,是因为每次更改文本时,change方法上的TextField都会调用build()方法您已经在build()方法中定义了字符串newTaskTitle,请尝试从build方法中删除它,并尝试在StatefulWidget中定义它
之所以会发生这种情况,是因为每次更改文本时,change方法上的TextField都会调用build()方法您也可以使用控制器来实现这一点。只需初始化一个并在TextField小部件中指定控制器。要访问文本,只需执行_controller.text,如下所示:
final _controller = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
color: Color(0xff757575),
child: Container(
padding: EdgeInsets.all(20.0),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20.0),
topRight: Radius.circular(20.0),
),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Text(
'Add Task',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 30.0,
color: Colors.lightBlueAccent,
),
),
TextField(
controller: _controller,
autofocus: true,
textAlign: TextAlign.center,
),
FlatButton(
child: Text(
'Add',
style: TextStyle(
color: Colors.white,
),
),
color: Colors.lightBlueAccent,
onPressed: () {
print(_controller.text);
},
),
],
),
),
),
);
}
final_controller=TextEditingController();
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
颜色:颜色(0xFF7575),
子:容器(
填充:所有边缘设置(20.0),
装饰:盒子装饰(
颜色:颜色,白色,
borderRadius:仅限borderRadius(
左上:半径。圆形(20.0),
右上角:半径。圆形(20.0),
),
),
子:列(
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
正文(
“添加任务”,
textAlign:textAlign.center,
样式:TextStyle(
字体大小:30.0,
颜色:Colors.lightBlueAccent,
),
),
文本字段(
控制器:_控制器,
自动对焦:对,
textAlign:textAlign.center,
),
扁平按钮(
子:文本(
“添加”,
样式:TextStyle(
颜色:颜色,白色,
),
),
颜色:Colors.lightBlueAccent,
已按下:(){
打印(_controller.text);
},
),
],
),
),
),
);
}
您也可以使用控制器来实现这一点。只需初始化一个并在TextField小部件中指定控制器。要访问文本,只需执行_controller.text,如下所示:
final _controller = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
color: Color(0xff757575),
child: Container(
padding: EdgeInsets.all(20.0),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20.0),
topRight: Radius.circular(20.0),
),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Text(
'Add Task',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 30.0,
color: Colors.lightBlueAccent,
),
),
TextField(
controller: _controller,
autofocus: true,
textAlign: TextAlign.center,
),
FlatButton(
child: Text(
'Add',
style: TextStyle(
color: Colors.white,
),
),
color: Colors.lightBlueAccent,
onPressed: () {
print(_controller.text);
},
),
],
),
),
),
);
}
final_controller=TextEditingController();
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
颜色:颜色(0xFF7575),
子:容器(
填充:所有边缘设置(20.0),
装饰:盒子装饰(
颜色:颜色,白色,
borderRadius:仅限borderRadius(
左上:半径。圆形(20.0),
右上角:半径。圆形(20.0),
),
),
子:列(
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
正文(
“添加任务”,
textAlign:textAlign.center,
样式:TextStyle(
字体大小:30.0,
颜色:Colors.lightBlueAccent,
),
),
文本字段(
控制器:_控制器,
自动对焦:对,
textAlign:textAlign.center,
),
扁平按钮(
子:文本(
“添加”,
样式:TextStyle(
颜色:颜色,白色,
),
),
颜色:Colors.lightBlueAccent,
已按下:(){
打印(_controller.text);
},
),
],
),
),
),
);
}
但是除了传递文本字段的文本之外,我不想看到其他状态,它不是在整个屏幕上显示了一次吗?谢谢你,兄弟。你是对的,我必须使用有状态的小部件。但是除了传递文本字段的文本之外,我不想要状态,它不是只在整个屏幕上显示一次吗?谢谢你,兄弟。您是对的,我必须使用有状态小部件。您是否在另一棵树中使用小部件树
?我将此屏幕放置在底部弹出屏幕中。请发布您使用此小部件树
的完整代码片段,以便我可以