做(zuò)自(zì)由與創造的先行(xíng)者

Flutter 文本輸入

Flutter開(kāi)發手冊

介紹

本頁面介紹如(rú)何在Flutter應用程序中輸入文本

選擇一(yī)個widget

TextField 是最常用的文本輸入widget.

默認情況下(xià),TextField有一(yī)個下(xià)劃線裝飾(decoration)。您可(kě)以通(tōng)過提供給decoration屬性設置一(yī)個InputDecoration來添加一(yī)個标簽、一(yī)個圖标、提示文字和(hé)錯誤文本。 要(yào)完全删除裝飾(包括下(xià)劃線和(hé)為(wèi)标簽保留的空間(jiān)),将decoration明(míng)确設置為(wèi)空即可(kě)。

TextFormField包裹一(yī)個TextField 并将其集成在Form中。你要(yào)提供一(yī)個驗證函數(shù)來檢查用戶的輸入是否滿足一(yī)定的約束(例如(rú),一(yī)個電話号碼)或當你想将TextField與其他(tā)FormField集成時(shí),使用TextFormField。

獲取用戶輸入

有兩種獲取用戶輸入的主要(yào)方法:

處理 onChanged回調

提供一(yī)個TextEditingController.

onChanged

每當用戶輸入時(shí),TextField會調用它的onChanged回調。 您可(kě)以處理此回調以查看(kàn)用戶輸入的內(nèi)容。例如(rú),如(rú)果您正在輸入搜索字段,則可(kě)能(néng)需要(yào)在用戶輸入時(shí)更新搜索結果。

TextEditingController

一(yī)個更強大(但(dàn)更精細)的方法是提供一(yī)個TextEditingController作(zuò)為(wèi)TextField的controller屬性。 在用戶輸入時(shí),controller的text和(hé)selection屬性不斷的更新。要(yào)在這(zhè)些屬性更改時(shí)得到通(tōng)知,請(qǐng)使用controller的addListener方法監聽控制器 。 (如(rú)果你添加了(le)一(yī)個監聽器,記得在你的State對象的dispose方法中删除監聽器 )。

該TextEditingController還可(kě)以讓您控制TextField的內(nèi)容。如(rú)果修改controller的text或selection的屬性,TextField将更新,以顯示修改後的文本或選中區(qū)間(jiān)。 例如(rú),您可(kě)以使用此功能(néng)來實現推薦內(nèi)容的自(zì)動補全。

例子

以下(xià)是使用一(yī)個TextEditingController讀取TextField中用戶輸入的值的示例:

/// Opens an [AlertDialog] showing what the user typed.

class ExampleWidget extends StatefulWidget {

ExampleWidget({Key key}) : super(key: key);

@override

_ExampleWidgetState createState() => new _ExampleWidgetState();

}

/// State for [ExampleWidget] widgets.

class _ExampleWidgetState extends State {

final TextEditingController _controller = new TextEditingController();

@override

Widget build(BuildContext context) {

return new Column(

mainAxisAlignment: MainAxisAlignment.center,

children: [

new TextField(

controller: _controller,

decoration: new InputDecoration(

hintText: 'Type something',

),

),

new RaisedButton(

onPressed: () {

showDialog(

context: context,

child: new AlertDialog(

title: new Text('What you typed'),

content: new Text(_controller.text),

),

);

},

child: new Text('DONE'),

),

],

);

}

}

網站建設開(kāi)發|APP設計開(kāi)發|小程序建設開(kāi)發
下(xià)一(yī)篇:Flutter 路由和(hé)導航
上(shàng)一(yī)篇:Flutter 資源和(hé)圖片