Flutter——WidgetTextField
Posted Jason Zhang~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter——WidgetTextField相关的知识,希望对你有一定的参考价值。
输入框控件TextField
- 获取输入内容controller
如TextEditingController userNameController = TextEditingController();
,userNameController.text获取对应的TextField控件输入的内容。 - keyboardType
指定输入类型。取值自TextInputType中的text,, number, phone, datetime, emailAddress, url
等。 - textInputAction
指定回车键类型更改。取值自TextInputAction中的done、go、search、send、next
等。还需要设置onEditingComplete来指定点击改过类型的回车键的响应事件。如指定为next,方法指定跳转到密码输入框onEditingComplete: () => FocusScope.of(context).requestFocus(pwdNode)
,其中FocusNode pwdNode = FocusNode();
在密码的输入控件中指定focusNode: pwdNode
。 - obscureText
输入内容是否隐藏。密码输入框设置为true。 - maxLines
最大行数,默认为1。 - maxLength
最大输入字符长度。 - InputDecoration。
- icon
设置输入框的图标。如icon: Icon(Icons.account_box)
表示在输入框左边显示系统自带的账号图标。输入框激活状态下图标也会颜色变更。 - prefixIcon
类似于icon,但是图标显示在输入框下划线线内。 - prefix
类似于prefixIcon,可以自定义控件如显示文本。prefix: Text("用户名")
。 - prefixText
prefix指定为Text,设置固定显示在前面的字符串前缀。如手机号码输入前面固定+86:prefixText: "+86"
。 - suffixIcon、suffix、suffixText
类似于prefixIcon、prefix、prefixText,但是是显示在后面。suffixText能用于设定单位等固定显示在尾部。 - labelText
提示文案,类似于安卓的Hint,在输入框激活时会动画上移到上方。 - helperText
显示在输入框下方的帮助文案。一般不设置。 - hintText
激活输入框但是未输入内容时的提示文案。如果labelText存在,则未激活状态下显示的是labelText,否则未激活状态下也显示hintText。
- icon
过程中解决的bug:
1、有输入框,用SingleChildScrollView嵌套Column。否则弹出输入键盘时有溢出bug:bottom overflowed by X PIXELS。
2、运行安卓报错:Flutter SocketException: Failed to create server socket (OS Error: Permission denied, errno = 13), address = 127.0.0.1, port = 0。在android工程AndroidManifest.xml配置
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
3、AppBar中标题默认靠左显示,设置属性让标题水平居中。
centerTitle: true, //文字title居中
实现登录界面的代码如下:
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
class Login extends StatefulWidget
@override
State<StatefulWidget> createState() => LoginState();
class LoginState extends State<Login>
// 用户名的控制器
final TextEditingController userNameCtrl = TextEditingController();
//密码的控制器
final TextEditingController passwordCtrl = TextEditingController();
// 光标跳转的密码输入框对象
FocusNode pwdNode = FocusNode();
@override
Widget build(BuildContext context)
return new Scaffold(
appBar: AppBar(
title: Text("登录"),
centerTitle: true, //文字title居中
leading: new BackButton()),
// 有输入框,用SingleChildScrollView嵌套Column。否则弹出输入键盘时有溢出bug。bottom overflowed by X PIXELS
body: SingleChildScrollView(
child: Column(
children: <Widget>[
new Padding(
padding: EdgeInsets.fromLTRB(40, 24, 40, 0),
child: TextField(
controller: userNameCtrl,
// 指定该输入框是输入手机号码的
keyboardType: TextInputType.phone,
// 回车键用途,输入下一项。还需要具体实现。
textInputAction: TextInputAction.next,
// 键盘动作按钮点击之后执行的代码:光标切换到指定的输入框
onEditingComplete: () =>
FocusScope.of(context).requestFocus(pwdNode),
maxLength: 11,
decoration: InputDecoration(
icon: Icon(Icons.account_circle),
labelText: "请输入用户名",
// helperText: "一般为手机号码", // 一般不设置
hintText: "11位手机号码",
// prefixIcon: Icon(Icons.account_circle), // 输入框线内
// prefix: Text("用户名"),
// prefixText: "+86",
),
),
),
new Padding(
padding: EdgeInsets.fromLTRB(40, 4, 40, 0),
child: TextField(
controller: passwordCtrl,
focusNode: pwdNode,
keyboardType: TextInputType.text,
// 回车键用途,完成输入
textInputAction: TextInputAction.done,
maxLength: 11,
obscureText: true,
// 密码输入,隐藏
decoration: InputDecoration(
icon: Icon(Icons.lock_outline),
labelText: "请输入密码",
// suffixIcon: Icon(Icons.visibility_off),
// suffixText: "(元)",
),
),
),
Padding(
padding: EdgeInsets.fromLTRB(40, 36, 40, 0),
child: Row(children: <Widget>[
new Expanded(
child: RaisedButton(
color: Colors.blue,
onPressed: ()
doLogin();
,
child: new Text(
"登录",
style: TextStyle(
color: Colors.white,
),
),
))
]),
),
],
)));
void doLogin()
if (userNameCtrl.text.isEmpty || passwordCtrl.text.isEmpty)
Fluttertoast.showToast(msg: "请输入用户名和密码");
else
Fluttertoast.showToast(
msg: "用户名: $userNameCtrl.text,密码: $passwordCtrl.text");
实现效果:
本文源码:TAG,下载源码需指定tag。
以上是关于Flutter——WidgetTextField的主要内容,如果未能解决你的问题,请参考以下文章