Flutter - 当键盘隐藏时,TextFormField会留空

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (96)

在Flutter(Android)

我在flutter应用程序中有两个TextFormField。当我按下后退按钮。这些文字字段空白。

   class FirstScreen extends StatelessWidget {
  TextEditingController charectorsController = new TextEditingController();
  TextEditingController lengthCntroller = new TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('First Screen'),
      ),
      body: Center(
        child: Container(
            margin: EdgeInsets.all(8),
            child: SingleChildScrollView(
              child: Column(
                children: [
                  myEditText(charectorsController, "Enter  charectors Word"),
                  myEditText(lengthCntroller, "Word length"),
                  RaisedButton(
                    child: Text('Launch screen'),
                    onPressed: () {
                      // Navigate to the second screen using a named route
                      // Navigator.pushNamed(context, '/second');
                      print("Rahul");
                      readFile();
                    },
                  )
                ],
              ),
            )),
      ),
    );
  }


}

    myEditText(TextEditingController myController, String s) {
  return new Container(
    margin: EdgeInsets.all(8),
    child: new TextFormField(
      controller: myController,
      decoration: new InputDecoration(
        labelText: s,
        fillColor: Colors.white,
        border: new OutlineInputBorder(
          borderRadius: new BorderRadius.circular(25.0),
          borderSide: new BorderSide(),
        ),
        //fillColor: Colors.green
      ),
      validator: (val) {
        if (val.length == 0) {
          return "Cannot be empty";
        } else {
          return null;
        }
      },
      keyboardType: TextInputType.emailAddress,
      style: new TextStyle(
        fontFamily: "Poppins",
      ),
    ),
  );
}

路由

void main() => runApp(MaterialApp(
  title: 'Named Routes Demo',
  // Start the app with the "/" named route. In our case, the app will start
  // on the FirstScreen Widget
  initialRoute: '/',
  routes: {
    // When we navigate to the "/" route, build the FirstScreen Widget
    '/': (context) => FirstScreen(),
    // When we navigate to the "/second" route, build the SecondScreen Widget
    '/second': (context) => SecondScreen(),
  },
));
提问于
用户回答回答于

把你StatelessWidget变成Stateful一个,它会完成这项工作。问题是,通过声明TextEditingControllera StatelessWidget,它将被'重置',因为小部件的构建函数被调用:'(。所以你应该这样做:

class U extends StatefullWidget
  ....

class _UState extends State<U>
  final TextEditingController controller = TextEditingController();

  Widget build(..) => TextField(controller: controller)

这应该做的工作:)

扫码关注云+社区

领取腾讯云代金券