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);
},
),
],
),
),
),
);
}

但是除了传递文本字段的文本之外,我不想看到其他状态,它不是在整个屏幕上显示了一次吗?谢谢你,兄弟。你是对的,我必须使用有状态的小部件。但是除了传递文本字段的文本之外,我不想要状态,它不是只在整个屏幕上显示一次吗?谢谢你,兄弟。您是对的,我必须使用有状态小部件。您是否在另一棵树中使用
小部件树
?我将此屏幕放置在底部弹出屏幕中。请发布您使用此
小部件树
的完整代码片段,以便我可以