如何确定 Flutter TextFormField 的高度?

How to determine height of a Flutter TextFormField?

我在 Container 中有 TextFormField,我想将 错误消息 对齐到Container 的底部,但是 错误消息 TextFormField 有点远。 错误消息 应该显示在 Container.

如何确定 TextFormField 的高度?


Form(
     key: _formkey1,
     child:
     Column(children: [
     Stack(
     clipBehavior: Clip.none,
       children:[ Container(
         width: 990.w,
         height: 203.w,
         decoration: BoxDecoration(
           borderRadius: BorderRadius.circular(30.0.w),
           border: Border.all(color: Colors.black12),
         ),
         child: Padding(
           padding: EdgeInsets.fromLTRB(46.w, 38.w, 0, 35.w),
             child:
                 Text(
                   'Current Password',
                   style: FONT_CONST.MEDIUM
                       .copyWith(fontSize: 34.w,
                       color: COLOR_CONST.color_9e9e9e),
                 ),),),
         Positioned(
             left: 46.w,
             top: 105.w,
             child:
                 Container(
                   width: 881.w,
                   height: 187.w,
                     child: TextFormField(
                       obscureText: true,
                       validator: (value) {
                         if (value!.isEmpty) {
                           return "empty";
                         }
                         if (value!=_myInfoProvider.my.password){
                           return "Please enter your current password";
                         }
                         else {
                           return null;
                         }
                       },
                       style: FONT_CONST.MEDIUM.copyWith(
                           fontSize: 46.w),
                       decoration: InputDecoration.collapsed(
                           hintText: 'Enter Current Password',
                           hintStyle: FONT_CONST.MEDIUM
                               .copyWith(fontSize: 46.w,
                               color: COLOR_CONST.color_c8cacb)),
                       controller: _textEditingController1,
                     ),
                   ),)
                 ]),

我使用了 Stack 小部件,因为 Container 中的 Form 小部件不能return 来自 容器 错误消息

如果我理解你的问题,你想在不同的位置显示错误消息。

根据您的代码,您可以使用 setState 在另一个小部件中显示错误消息。

只需为您的错误消息添加一个变量:

Text errorMsg;

并在验证器中调用 setState :

                   child: TextFormField(
                       obscureText: true,
                       validator: (value) {
                         if (value!.isEmpty) {
                            setState(() {
                            errorMsg = Text('empty');
                          });
                           return "";
                         }
                         if (value!=_myInfoProvider.my.password){
                            setState(() {
                            errorMsg = Text('Please enter your current password');
                          });
                           return "";
                         }
                         else {
                            setState(() {
                            errorMsg = null;
                          });
                           return null;
                         }
                       },
                       style: FONT_CONST.MEDIUM.copyWith(
                           fontSize: 46.w),

最后,将错误消息添加到 Stack 中的新 Positioned Widget 中:

                ///your Poisitioned Widget
                Positioned(....),
                /// Add this and change the values to the position that you demand
                if(errorMsg != null)
                Positioned(
                  left: 46.w,
                  top: 120.w,
                  child: errorMsg,
                ),