为什么我的文本不在容器内并让我在一个文件中创建两个可编辑的文本

why my text not inside container & keep i make two editable text in a file

我是 Flutter 新手。我在这里有点困惑。为什么我的文本不在容器内,如果我有多个可编辑文本,这是正确的方法吗,所以我将它放在一个文件中而不是将它们分开,因为变量名和电子邮件地址是不同的东西。这是我想要的设计,这是我的代码。

class EditNameEmail extends StatefulWidget {

  @override
  State<EditNameEmail> createState() => _EditNameEmailState();
}

class _EditNameEmailState extends State<EditNameEmail> {
  bool _isEnable = false; //_isEnable is the boolean variable and set it false, so we have to make it true when user tap on text
  TextEditingController _controller =
  TextEditingController(text: 'Wong Yuk Hei');  


  @override
  Widget build(BuildContext context) {
    return Container(
      padding: EdgeInsets.all(15.0),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              Text(
                'Name',
                style: TextStyle(color: Colors.blueAccent, fontWeight: FontWeight.bold),
              ),
              IconButton(
                  icon: Icon(Icons.edit),
                  onPressed: () {
                    setState (() {
                      _isEnable = true;
                    });
                  }),
            ],
          ),

          Row(
            children: <Widget> [
              Container(
                width: 350, height: 25,
                decoration: BoxDecoration( borderRadius: BorderRadius.circular(5.0), 
                border: Border.all(color: Colors.black) ),
                child: TextField(
                  maxLines: 1,
                  controller: _controller,
                  enabled: _isEnable,
                ),
              ),
              
            ],
          ),

          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              Text(
                'Email',
                style: TextStyle(color: Colors.blueAccent, fontWeight: FontWeight.bold),
              ),
              IconButton(
                  icon: Icon(Icons.edit),
                  onPressed: () {
                    setState (() {
                      _isEnable = true;
                    });
                  }),
            ],
          ),

          Row(
            children: <Widget> [
              Expanded(
                child: Container(
                  width: 350, height: 25,
                  decoration: BoxDecoration( borderRadius: BorderRadius.circular(5.0), 
                  border: Border.all(color: Colors.black) ),
                  child: TextField(
                    maxLines: 1,
                    controller: _controller,
                    enabled: _isEnable,
                  ),
                ),
              ),
              
            ],
          )
        ],
      ),
    );
  }
}

您不能对两个文本字段使用相同的控制器您需要使用不同的文本编辑控制器来分隔两个字段。

试试这个

class EditNameEmail extends StatefulWidget {
      
        @override
        State<EditNameEmail> createState() => _EditNameEmailState();
      }
      
      class _EditNameEmailState extends State<EditNameEmail> {
        bool _isEnableName = false; //_isEnable is the boolean variable and set it false, so we have to make it true when user tap on text
        bool _isEnableEmail = false; //_isEnable is the boolean variable and set it false, so we have to make it true when user tap on text
        TextEditingController _controllerName =
        TextEditingController(text: 'Wong Yuk Hei');
      
        TextEditingController _controllerEmail =
        TextEditingController(text: 'Wong Yuk Hei');
        @override
        Widget build(BuildContext context) {
          return Container(
            padding: EdgeInsets.all(15.0),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
                    Text(
                      'Name',
                      style: TextStyle(color: Colors.blueAccent, fontWeight: FontWeight.bold),
                    ),
                    IconButton(
                        icon: Icon(_isEnableName ? Icons.clear : Icons.edit),
                        onPressed: () {
                          setState (() {
                            _isEnableName = !_isEnableName;
                          });
                        }),
                  ],
                ),
      
                Row(
                  children: <Widget> [
                    Container(
                      width: 350, height: 25,
                      decoration: BoxDecoration( borderRadius: BorderRadius.circular(5.0),
                          border: Border.all(color: Colors.black) ),
                      child: TextField(
                        maxLines: 1,
                        controller: _controllerName,
                        enabled: _isEnableName,
                      ),
                    ),
      
                  ],
                ),
      
                Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
                    Text(
                      'Email',
                      style: TextStyle(color: Colors.blueAccent, fontWeight: FontWeight.bold),
                    ),
                    IconButton(
                        icon: Icon(_isEnableEmail ? Icons.clear : Icons.edit),
                        onPressed: () {
                          setState (() {
                            _isEnableEmail = !_isEnableEmail;
                          });
                        }),
                  ],
                ),
      
                Row(
                  children: <Widget> [
                    Expanded(
                      child: Container(
                        width: 350, height: 25,
                        decoration: BoxDecoration( borderRadius: BorderRadius.circular(5.0),
                            border: Border.all(color: Colors.black) ),
                        child: TextField(
                          maxLines: 1,
                          controller: _controllerEmail,
                          enabled: _isEnableEmail,
                        ),
                      ),
                    ),
      
                  ],
                )
              ],
            ),
          );
        }
      }