Flutter中TextField 输入内容居中显示,并将光标自动定位到内容后面
1、内容居中 主要有以下几个参数需要设置:
textAlignVertical: TextAlignVertical.center,
counterText: "",
contentPadding: const EdgeInsets.symmetric(vertical: 0.0, horizontal: 8.0),
2、光标移动到内容后面
TextField(controller: TextEditingController(text: regionName)
..selection = TextSelection.fromPosition(TextPosition(offset: regionName.length)),
)
3、项目中使用
class RegionPage extends GetCommonView<RegionLogic> {
const RegionPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomInset: false,
appBar: BrnAppBar(
title: StringStyles.regionConfig.tr,
),
body: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
flex: 1,
child: Obx(
() => ListView.builder(
itemCount: logic.regionList.length,
itemBuilder: (context, index) {
return _itemContainer(context, index);
}),
),
),
DividerStyle.divider1Half,
Container(
height: 116,
color: Colors.amber,
)
],
),
);
}
Container _itemContainer(BuildContext context, int index) {
var regionName = logic.regionList[index].regionName;
var selection = TextSelection.fromPosition(TextPosition(offset: regionName.length));
return Container(
width: double.infinity,
height: 55,
padding: const EdgeInsets.only(left: 22, right: 0),
child: Row(
children: [
Expanded(
child: SizedBox(
height: 45,
child: TextField(
textAlignVertical: TextAlignVertical.center,
maxLength: 20,
maxLines: 1,
controller: TextEditingController(text: regionName)
..selection = selection,
onChanged: (value) {
logic.regionList[index].regionName = value;
logic.update();
},
decoration: InputDecoration(
hintText: '请输入区域名称',
hintStyle: Styles.style_979797_12,
suffix: Text(
'${regionName.length}/20',
style: Styles.style_999999_12,
),
counterText: "",
contentPadding: const EdgeInsets.symmetric(
vertical: 0.0, horizontal: 8.0),
border: const OutlineInputBorder(),
),
),
),
),
IconButton(
onPressed: () {
logic.regionList.removeAt(index);
},
icon: Image.asset(
AssetsRes.IC_REMOVE,
width: 28,
height: 28,
),
)
],
),
);
}
}
4、效果展示

