【问题标题】:Getting null value for _getVin.text获取 _getVin.text 的空值
【发布时间】:2021-12-25 16:53:58
【问题描述】:

在下面的代码中,我实现了一个文本字段,它的值将由 _getVin 存储。但是在用户能够输入值之前,我收到了空值。那么什么是正确的解决方案?有哪些改变?

 @override
  Widget build(BuildContext context) {
    TextEditingController _getVin = TextEditingController();
     var vin =  VIN(number: _getVin.text, extended: true);


return new Scaffold (

             body:  Container(
                padding: new EdgeInsets.only(top: 16.0),
              child: TextField(
                controller: _getVin,
                decoration:InputDecoration(
                  border :OutlineInputBorder(
                      borderRadius: BorderRadius.all(Radius.circular(5.0)),
                      borderSide: BorderSide(color:Colors.black)
                  ),
                  labelText: "Enter VIN",
                  labelStyle: TextStyle(
                      fontSize: 15,
                      color:Colors.black
                  ),
                ),

              ),
            ),
               GestureDetector(
                   onTap:() {
                     print(_getVin);

                     print(vin.modelYear());

                         },


                child:Card(
                 child: Text( "Press Here"),
                                    )
                 ),

【问题讨论】:

    标签: android flutter android-studio textfield


    【解决方案1】:

    糟糕,您不应该在构建方法中创建控制器,每次颤振重建该小部件时,您将有效地创建一个新控制器,并且您不会丢弃它。正确的做法是使用 Stateful 小部件:

    class VinWidget extends StatefulWidget {
      const VinWidget({Key? key}) : super(key: key);
    
      @override
      _VinWidgetState createState() => _VinWidgetState();
    }
    
    class _VinWidgetState extends State<VinWidget> {
      late TextEditingController _getVin = TextEditingController();
    
      @override
      Widget build(BuildContext context) {
        
     return  Scaffold (
    
                 body:  Container(
                    padding:  EdgeInsets.only(top: 16.0),
                  child: TextField(
                    controller: _getVin,
                    decoration:InputDecoration(
                      border :OutlineInputBorder(
                          borderRadius: BorderRadius.all(Radius.circular(5.0)),
                          borderSide: BorderSide(color:Colors.black)
                      ),
                      labelText: "Enter VIN",
                      labelStyle: TextStyle(
                          fontSize: 15,
                          color:Colors.black
                      ),
                    ),
    
                  ),
                ),
                   GestureDetector(
                       onTap:() {
    var vin = VIN(number: _getVin.text, extended: true);
                         print(_getVin);
    
                         print(vin.modelYear());
    
                             },
    
    
                    child:Card(
                     child: Text( "Press Here"),
                                        )
                     ),
      }
    
      @override
      void dispose() {
        super.dispose();
        _getVin.dispose();
      }
    }
    
    

    【讨论】:

    • 谢谢我做了同样的事情,但我遇到了同样的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多