Text 文本字段中的文本垂直居中对齐颤振

Text 文本字段中的文本垂直居中对齐颤振,text,flutter,textfield,vertical-alignment,Text,Flutter,Textfield,Vertical Alignment,我尝试在大量资源中查找,但不幸的是,我找不到一种方法来对齐文本字段中的文本垂直中心。我也试着用suffixIcon来代替后缀,但还是不走运。这是我的密码: import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { re

我尝试在大量资源中查找,但不幸的是,我找不到一种方法来对齐文本字段中的文本垂直中心。我也试着用suffixIcon来代替后缀,但还是不走运。这是我的密码:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _HomePageState();
  }
}

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        leading: Icon(
          Icons.menu,
          color: Colors.black,
        ),
        backgroundColor: Colors.white,
        title: Container(
          margin: EdgeInsets.only(bottom: 10),
          child: Image.asset(
            "icons/logo.png",
          ),
        ),
        bottom: PreferredSize(
          child: Padding(
            padding: EdgeInsets.only(
              left: 10,
              right: 10,
              bottom: 10,
            ),
            child: Container(
              height: 40,
              child: TextField(
                textAlignVertical: TextAlignVertical.center,
                textAlign: TextAlign.left,
                maxLines: 1,
                style: TextStyle(
                  fontSize: 13,
                ),
                decoration: InputDecoration(
                    suffixIcon: IconButton(icon: Icon(Icons.search, color: Colors.black,), onPressed: (){}),
                    border: OutlineInputBorder(
                      borderSide: BorderSide(
                        color: Colors.black,
                      ),
                      borderRadius: BorderRadius.all(Radius.circular(15)),
                    )
                ),
              ),
            ),
          ),
          preferredSize: Size(MediaQuery.of(context).size.width, 50),
        ),
      ),
      body: Container(
        margin: EdgeInsets.only(top: 11),
        child: Column(
          children: <Widget>[
            Carousel(),
          ],
        ),
      ),
    );
  }
}

class Carousel extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _CarouselState();
  }
}

class _CarouselState extends State<Carousel> {
  List<String> urls = [];

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: EdgeInsets.symmetric(horizontal: 10),
      child: Stack(
        children: <Widget>[
          Image.network(
              "someImageUrlHere."),
          Positioned(
            bottom: 5,
            width: MediaQuery.of(context).size.width - 20,
            child: Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text("•"),
                Text("•"),
                Text("•"),
                Text("•"),
                Text("•"),
              ],
            ),
          ),
        ],
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主页:主页(),
);
}
}
类主页扩展了StatefulWidget{
@凌驾
状态createState(){
返回_HomePageState();
}
}
类_HomePageState扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
领先:图标(
图标菜单,
颜色:颜色,黑色,
),
背景颜色:Colors.white,
标题:集装箱(
页边距:仅限边集(底部:10),
子:Image.asset(
“icons/logo.png”,
),
),
底部:首选尺寸(
孩子:填充(
填充:仅限边缘设置(
左:10,,
右:10,,
底部:10,
),
子:容器(
身高:40,
孩子:TextField(
textAlignVertical:textAlignVertical.center,
textAlign:textAlign.left,
maxLines:1,
样式:TextStyle(
尺寸:13,
),
装饰:输入装饰(
后缀:图标按钮(图标:图标(Icons.search,颜色:Colors.black,),ON按下:(){}),
边框:大纲输入边框(
边界边(
颜色:颜色,黑色,
),
borderRadius:borderRadius.all(半径.圆形(15)),
)
),
),
),
),
preferredSize:Size(MediaQuery.of(context).Size.width,50),
),
),
主体:容器(
页边距:仅限边缘集(顶部:11),
子:列(
儿童:[
转盘(),
],
),
),
);
}
}
类Carousel扩展StatefulWidget{
@凌驾
状态createState(){
返回_CarouselState();
}
}
类_CarouselState扩展状态{
列出URL=[];
@凌驾
小部件构建(构建上下文){
返回填充(
填充:边缘组。对称(水平:10),
子:堆栈(
儿童:[
图像网络(
“这里有一些图像。”),
定位(
底部:5,
宽度:MediaQuery.of(context).size.width-20,
孩子:排(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
文本(“•”),
文本(“•”),
文本(“•”),
文本(“•”),
文本(“•”),
],
),
),
],
),
);
}
}

是什么问题导致了这个问题?如何解决此问题?

请尝试按列换行,并将“mainAxisAlignment”属性添加到“mainAxisAlignment.center”中

    Container(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.start, // If you want align text to left
          children: <Widget>[
            TextField(
                textAlignVertical: TextAlignVertical.center,
                textAlign: TextAlign.left,
                maxLines: 1,
                style: TextStyle(
                  fontSize: 13,
                ),
                decoration: InputDecoration(
                    suffixIcon: IconButton(icon: Icon(Icons.search, color: Colors.black,), onPressed: (){}),
                    border: OutlineInputBorder(
                      borderSide: BorderSide(
                        color: Colors.black,
                      ),
                      borderRadius: BorderRadius.all(Radius.circular(15)),
                    )
                ),
              ),
          ],
        ),
      )
容器(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.start,//如果要将文本向左对齐
儿童:[
文本字段(
textAlignVertical:textAlignVertical.center,
textAlign:textAlign.left,
maxLines:1,
样式:TextStyle(
尺寸:13,
),
装饰:输入装饰(
后缀:图标按钮(图标:图标(Icons.search,颜色:Colors.black,),ON按下:(){}),
边框:大纲输入边框(
边界边(
颜色:颜色,黑色,
),
borderRadius:borderRadius.all(半径.圆形(15)),
)
),
),
],
),
)

我有单行文本字段的解决方案。将TextField放置在一个具有height属性的容器中(在我的例子中,也是width),然后在装饰内部提供一个contentPadding值,该值为height/2

代码如下:

          Container(
            height: textfieldDimension,
            width: textfieldDimension,
            alignment: Alignment.center,

            child: TextField(
              decoration: InputDecoration(
                border: InputBorder.none,
                contentPadding: EdgeInsets.only(
                  bottom: textfieldDimension / 2,  // HERE THE IMPORTANT PART
                )

              ),
              // textAlignVertical: TextAlignVertical.center,  THIS DOES NOT WORK



              textAlign: TextAlign.center,
              style: TextStyle(
                fontSize: 10,   // This is not so important
              ),
            ),
          ),

日期时间很完美,但提示对齐和日期值不在同一位置对齐

容器(
孩子:填充(
填充:仅限常量边设置(
左:15.0,右:15.0,顶部:15.0,底部:10.0),
孩子:排(
crossAxisAlignment:crossAxisAlignment.start,
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
居中(
子:Image.asset(
“assets/images/date.png”,
//宽度:20,
宽度:SizeConfig.safeBlockHorizontal*4,
),
),
大小盒子(
宽度:15,
),
灵活的(
儿童:中心(
孩子:DateTimeField(
装饰:输入装饰(
hintText:“开始日期和时间”,
hintStyle:TextStyle(
//尺寸:14,
fontSize:SizeConfig.safeBlockHorizontal*3,
),
边框:InputBorder.none,
),
验证人:validateStartDate,
TextField(
  decoration: InputDecoration(
    contentPadding: EdgeInsets.zero,
    hintText: "password",
  ),
)
TextField(
   textAlign: TextAlign.center,
   decoration: InputDecoration(
     hintText: "Centered Hint",
   ),
)