颤振键盘完成按钮导致文本字段内容消失

时间:2018-12-27 13:43:18

标签: flutter textfield

我在表格中有2个文本字段。当我在第二个文本字段中单击键盘上的完成按钮时,键盘将隐藏并且两个文本字段都为空。当我手动关闭键盘时,同样的情况也会丢失,文本字段的内容也会丢失。 似乎每次发生时屏幕都会刷新。为什么会这样?

@override
  Widget build(BuildContext context) {
    TextEditingController nameTextFieldController = TextEditingController();
    TextEditingController emailTextFieldController = TextEditingController();

    FocusNode emailFocusNode = new FocusNode();

    // TODO: implement build
    return WillPopScope(
        onWillPop: () {
          moveToLastScreen();
        },
        child: Scaffold(
          appBar: AppBar(
            title: Text("Signup"),
            leading: IconButton(
                icon: Icon(Icons.arrow_back),
                onPressed: () {
                  moveToLastScreen();
                }),
          ),
          body: Form(
              key: _formKey,
              child: Container(
                child: ListView(
                  padding: EdgeInsets.only(top: 20, left: 35, right: 35),
                  children: <Widget>[
                    Center(
                        child: GestureDetector(
                            onTap: () {
                              imageSelectorGalary();
                            },
                            child: new Container(
                                width: 100.0,
                                height: 100.0,
                                child: _image == null
                                    ? new Image.asset(
                                        'images/profilepic.png',
                                        fit: BoxFit.fitWidth,
                                      )
                                    : new CircleAvatar(
                                        backgroundImage: new FileImage(_image),
                                        radius: 200.0,
                                      )))),
                    Text(
                      "NAME",
                      style: TextStyle(fontWeight: FontWeight.bold),
                    ),
                    Padding(
                      padding: EdgeInsets.only(top: 5, bottom: 10),
                      child: TextFormField(
                          inputFormatters:[
                            LengthLimitingTextInputFormatter(10),
                          ],
                          onFieldSubmitted: (String  value){
                            FocusScope.of(context).requestFocus(emailFocusNode);
                          },
                          keyboardType: TextInputType.text,
                          controller: nameTextFieldController,
                          validator: (String value) {
                            if (value.isEmpty) {
                              return 'Please enter the name';
                            }
                          },
                          decoration: InputDecoration(
                              border: OutlineInputBorder(
                                  borderRadius: BorderRadius.circular(5.0)),
                              contentPadding: EdgeInsets.only(
                                  top: 15, bottom: 15, left: 20, right: 20))),
                    ),
                    Text(
                      "EMAIL ID",
                      style: TextStyle(fontWeight: FontWeight.bold),
                    ),
                    Padding(
                      padding: EdgeInsets.only(top: 5, bottom: 10),
                      child: TextFormField(
                        controller: emailTextFieldController,
                        focusNode: emailFocusNode ,
                        onFieldSubmitted: (String  value){
                          FocusScope.of(context).requestFocus(new FocusNode());
                        },
                        validator: (String value){
                          if(value.isEmpty){
                            return "Please enter your email-id";
                          }
                        },
                        decoration: InputDecoration(
                            contentPadding: EdgeInsets.only(
                                top: 15, bottom: 15, left: 20, right: 20),
                            border: OutlineInputBorder(
                                borderRadius: BorderRadius.circular(5.0))),
                      ),
                    ),
                    Text(
                      "CITY AND AREA",
                      style: TextStyle(fontWeight: FontWeight.bold),
                    ),
                    GestureDetector(
                        onTap: () {
                          CityAreasDialog cityAreasDialog =
                              new CityAreasDialog();
                          cityAreasDialog.information(context);
                        },
                        child: Container(
                          margin: EdgeInsets.only(top: 5, bottom: 10),
                          padding: EdgeInsets.only(left: 20, right: 20),
                          decoration: new BoxDecoration(
                              border: new Border.all(color: CustomColors.grey),
                              borderRadius: BorderRadius.all(Radius.circular(
                                      5.0) //                 <--- border radius here
                                  )),
                          child: Container(
                              padding: EdgeInsets.only(top: 10, bottom: 10),
                              child: Row(
                                mainAxisAlignment:
                                    MainAxisAlignment.spaceBetween,
                                children: <Widget>[
                                  Column(
                                    crossAxisAlignment:
                                        CrossAxisAlignment.start,
                                    children: <Widget>[
                                      Text("Select Your City"),
                                      Text(
                                        "and area",
                                        style: TextStyle(
                                            color: Colors.grey, fontSize: 10),
                                      )
                                    ],
                                  ),
                                  Icon(
                                    Icons.arrow_drop_down,
                                    color: Colors.black,
                                  )
                                ],
                              )),
                        )),
                    Container(
                        margin: EdgeInsets.only(top: 20, left: 10, right: 10),
                        child: RaisedButton(
                          onPressed: () {
                            debugPrint("Next Click");
                            onSignup();
                          },
                          child: new Text(
                            "NEXT",
                          ),
                        ))
                  ],
                ),
              )),
        ));
  }

1 个答案:

答案 0 :(得分:4)

此问题是因为每次重新构建窗口小部件时都在创建新的TextEditingController。 因此,要解决此问题,请将这些变量nameTextFieldControlleremailTextFieldController移至构建方法之外。

赞:

  TextEditingController nameTextFieldController = TextEditingController();
   TextEditingController emailTextFieldController = TextEditingController();

@override
  Widget build(BuildContext context) {
    ...