
到目前为止,你写的页面大多是:
但一个真正的 App,一定离不开:
📌 这些能力,都从 TextField 开始。
一句话理解:
TextField = 让用户输入文字的组件
它是 Flutter 中最重要的交互组件之一。
TextField()
运行后你会看到:
📌 但这只是“能用”,还远远不够。
TextField(
decoration: InputDecoration(
hintText: '请输入用户名',
),
)
📌 hintText 的作用:
TextField(
decoration: InputDecoration(
hintText: '请输入用户名',
border: OutlineInputBorder(),
),
)
这就是你最常见到的输入框样式。
光能输入还不够, 我们必须拿到输入的内容。
TextEditingController _controller = TextEditingController();
📌 通常定义在 State 中。
TextField(
controller: _controller,
decoration: InputDecoration(
hintText: '请输入内容',
border: OutlineInputBorder(),
),
)
print(_controller.text);
📌 至此,你已经完成:
用户输入 → 程序读取
class InputDemo extends StatefulWidget {
@override
_InputDemoState createState() => _InputDemoState();
}
class _InputDemoState extends State<InputDemo> {
TextEditingController _controller = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('输入示例')),
body: Padding(
padding: EdgeInsets.all(16),
child: Column(
children: [
TextField(
controller: _controller,
decoration: InputDecoration(
hintText: '请输入内容',
border: OutlineInputBorder(),
),
),
SizedBox(height: 16),
ElevatedButton(
onPressed: () {
print(_controller.text);
},
child: Text('获取输入'),
),
],
),
),
);
}
}
📌 这是 登录 / 搜索 / 编辑页的基础模板。
TextField(
obscureText: true,
decoration: InputDecoration(
hintText: '请输入密码',
border: OutlineInputBorder(),
),
)
TextField(
keyboardType: TextInputType.number,
)
TextField(
maxLines: 4,
)
TextField(
onChanged: (value) {
print(value);
},
)
📌 区别:
方式 | 用途 |
|---|---|
controller | 主动获取 |
onChanged | 实时监听 |
Column(
children: [
TextField(
decoration: InputDecoration(hintText: '用户名'),
),
SizedBox(height: 12),
TextField(
obscureText: true,
decoration: InputDecoration(hintText: '密码'),
),
],
)
📌 到这里,你已经能写 登录页面结构 了。
在 StatefulWidget 中:
@override
void dispose() {
_controller.dispose();
super.dispose();
}
📌 原因:
Controller 是资源,需要手动释放
❌ 忘记加 padding,输入框贴边 ❌ 多个输入框共用一个 controller ❌ 不释放 controller ❌ 在 build 中创建 controller ❌ TextField 放 Column 里溢出不滚动
你已经学会:
📌 从这一篇开始:
你写的已经是“可交互 App 页面”
TextField 是交互的起点 Controller 是输入的桥梁
《Flutter 零基础入门(三十三):表单组件 Form —— 校验与提交》
下一篇我们将学习:
🚀 真正进入“业务页面开发”阶段