TextField的屬性
屬性名 | 類型 | 簡介 |
---|---|---|
controller | TextEditingController | 輸入框的控制器熔掺,通常用于獲取輸入的內(nèi)容 |
focusNode | FocusNode | 用于輸入框的焦點管理和監(jiān)聽 |
decoration | InputDecoration | 輸入框的裝飾器省咨,用于修改外觀 |
keyboardType | TextInputType | 設(shè)置輸入類型,不同的輸入類型鍵盤會不一樣 |
textInputAction | TextInputAction | 用于設(shè)置鍵盤動作(一般位于右下角屯耸,默認是完成) |
textCapitalization | TextCapitalization | 配置平臺鍵盤如何選擇大寫或小寫鍵盤。 |
style | TextStyle | 文本樣式 |
textAlign | TextAlign | 文本位置 |
textDirection | TextDirection | 文本顯示方向 |
autofocus | bool | 是否自動獲取焦點 |
obscureText | bool | 是否隱藏輸入的文字聘殖,通常用于密碼框 |
autocorrect | bool | 是否自動校驗 |
maxLines | int | 最大行數(shù) |
maxLength | int | 輸入的最大字符數(shù) |
maxLengthEnforced | bool | 配合maxLength使用瘪菌,達到最大長度時是否阻止輸入 |
onChanged | ValueChanged<String> | 輸入文本發(fā)生變化時回調(diào) |
onEditingComplete | VoidCallback | 點擊鍵盤完成按鈕時觸發(fā)的回調(diào),無參數(shù) |
onSubmitted | ValueChanged<String> | 點擊完成按鈕時觸發(fā)的回調(diào)毫目,該回調(diào)有參數(shù)蔬啡,參數(shù)即為輸入的值 |
inputFormatters | List<TextInputFormatter> | 對輸入文本的校驗 |
cursorWidth | double | 光標的寬度 |
cursorRadius | Radius | 光標的圓角 |
cursorColor | Color | 光標的顏色 |
keyboardAppearance | Brightness | 鍵盤的外觀,僅在iOS設(shè)備上支持 |
onTap | GestureTapCallback | 點擊輸入框時的回調(diào) |
enabled | bool | 輸入框是否可用 |
readOnly | bool | 是否只讀 |
裝飾器 InputDecoration
屬性名 | 類型 | 簡介 |
---|---|---|
icon | Widget | 設(shè)置位于輸入框前的圖標 |
labelText | String | 設(shè)置描述輸入框的標簽 |
labelStyle | TextStyle | 設(shè)置labelText的樣式 |
helperText | String | 幫助文本镀虐,位于輸入框下方箱蟆,如果errorText為空則不會顯示 |
helperStyle | TextStyle | 設(shè)置helperText的樣式 |
hintText | String | 提示文本,位于輸入框內(nèi)部 |
hintStyle | TextStyle | hintText的樣式 |
hintMaxLines | int | 提示文本最大行數(shù) |
errorText | String | 錯誤文本信息提示 |
errorStyle | TextStyle | errorText的樣式 |
hasFloatingPlaceholder | bool | labelText是否浮動刮便,默認為true |
isDense | bool | 輸入框是否為密集型空猜,默認為false,為true時,圖標及間距會變小 |
contentPadding | EdgeInsetsGeometry | 內(nèi)間距 |
isCollapsed | bool | 是否裝飾的大小與輸入字段的大小相同辈毯。 |
prefixIcon | Widget | 位于輸入框內(nèi)部起始位置的圖標 |
prefix | Widget | 預(yù)先填充的Widget坝疼,跟prefixText只能同時出現(xiàn)一個 |
prefixText | String | 預(yù)填充的文本,例如手機號前面預(yù)先加上區(qū)號等 |
prefixStyle | TextStyle | prefixText的樣式 |
suffixIcon | Widget | 位于輸入框尾部的圖標 |
suffix | Widget | 位于輸入框尾部的控件 |
suffixText | String | 位于尾部的填充文字 |
suffixStyle | TextStyle | suffixText的樣式 |
counter | Widget | 輸入框右下方的計數(shù)小控件谆沃,不能和counterText同時使用 |
counterText | String | 右下方顯示的文本钝凶,常用于顯示輸入的字符數(shù)量 |
counterStyle | TextStyle | counterText的樣式 |
filled | bool | 如果為true,則使用fillColor指定的顏色填充 |
fillColor | Color | 輸入框的背景顏色 |
errorBorder | InputBorder | errorText不為空唁影,且輸入框沒有焦點時要顯示的邊框 |
focusedBorder | InputBorder | 輸入框有焦點時的邊框耕陷,errorText必須為空 |
focusedErrorBorder | InputBorder | errorText不為空時,輸入框有焦點時的邊框 |
disabledBorder | InputBorder | 輸入框禁用時顯示的邊框据沈,errorText必須為空 |
enabledBorder | InputBorder | 輸入框可用時顯示的邊框哟沫,errorText必須為空 |
border | InputBorder | 正常情況下的邊框 |
enabled | bool | 輸入框是否可用 |
border的三種值
- InputBorder.none 沒有邊框
- OutlineInputBorder 線框
- UnderlineInputBorder 底邊線,默認的
小技巧
當輸入框的默認線框無法滿足時卓舵,可以使用Container容器自定義邊框南用。這時候可以將裝飾器設(shè)置為InputDecoration.collapsed(hintText: 'hint')表示禁用裝飾線
以登錄為例????????????
1.定義的變量
final phoneTf = TextEditingController();
final pwdTf = TextEditingController();
bool showPhoneClear = false;
bool showPwdClear = false;
final FocusNode phoneFocusNode = FocusNode();
final FocusNode pwdFocusNode = FocusNode();
TextEditingController帶初始值
TextEditingController.fromValue(TextEditingValue(text: '手機號'));
2.輸入手機號
Container(
margin: const EdgeInsets.symmetric(horizontal: 15),
child: TextField(
//關(guān)聯(lián)焦點變量,處理輸入框失去焦點
focusNode: phoneFocusNode,
//關(guān)聯(lián)輸入框變量
controller: phoneTf,
//鍵盤類型
keyboardType: TextInputType.number,
//輸入校驗
inputFormatters: [
//設(shè)置只允許輸入數(shù)字
FilteringTextInputFormatter.allow(RegExp(r'[0-9]')),
],
//最大字符數(shù)
maxLength: 11,
//輸入框獲取焦點的時候
onTap: () {
setState(() {
showPhoneClear = true;
showPwdClear = false;
});
},
//編輯完成掏湾,點擊鍵盤的完成按鈕裹虫,
onEditingComplete: () {
print('onEditingComplete');
//手機號輸入框失去焦點
phoneFocusNode.unfocus();
setState(() {
showPhoneClear = false;
});
},
//裝飾器
decoration: InputDecoration(
//手機號圖標
prefixIcon: const Icon(Icons.phone_android,size: 25, color: Colors.pinkAccent,),
//提示文字
hintText: '請輸入手機號',
//邊框
border: const OutlineInputBorder(
//圓角
borderRadius: BorderRadius.all(Radius.circular(15)),
),
//后面清除按鈕和事件
suffixIcon: Visibility(
visible: showPhoneClear,
child: GestureDetector(
onTap: () {
phoneTf.clear();
print('jj');
},
//清除按鈕
child: const Icon(Icons.clear),
),
),
),
),
),
3.輸入密碼
Container(
margin: const EdgeInsets.symmetric(horizontal: 15),
child: TextField(
focusNode: pwdFocusNode,
controller: pwdTf,
maxLength: 32,
obscureText: true,
//這個鍵盤兼容密碼密碼輸入字符
keyboardType: TextInputType.emailAddress,
onTap: () {
setState(() {
showPhoneClear = false;
showPwdClear = true;
});
},
onEditingComplete: () {
pwdFocusNode.unfocus();
setState(() {
showPwdClear = false;
});
},
decoration: InputDecoration(
prefixIcon: const Icon(Icons.lock,size: 25, color: Colors.pinkAccent),
hintText: '請輸入密碼',
suffixIcon: Visibility(
visible: showPwdClear,
child: GestureDetector(
onTap: () {
pwdTf.clear();
print('jj');
},
child: const Icon(Icons.clear),
),
),
),
),
),
WX20220419-140214.png
本地Flutter 2.10.1,Mac版Android Studio Bumblebee | 2021.1.1 Patch 2
我是小栗子融击,初學(xué)Flutter 筑公,文章會根據(jù)學(xué)習(xí)進度不定時更新,請多多指教~~