创建和设置文本字段的样式

文本字段允许用户在应用程序中输入文本。它们用于构建表单、发送消息、创建搜索体验等。在本食谱中,探索如何创建和设置文本字段的样式。

Flutter 提供了两种文本字段:TextFieldTextFormField

TextField

#

TextField 是最常用的文本输入小部件。

默认情况下,TextField 用下划线装饰。您可以通过提供 InputDecoration 作为 TextFielddecoration 属性来添加标签、图标、内联提示文本和错误文本。要完全删除装饰(包括下划线和为标签保留的空间),请将 decoration 设置为 null。

dart
TextField(
  decoration: InputDecoration(
    border: OutlineInputBorder(),
    hintText: 'Enter a search term',
  ),
),

要检索值更改时的值,请参阅 处理文本字段的更改 食谱。

TextFormField

#

TextFormField 包装 TextField 并将其与封闭的 Form 集成。这提供了额外的功能,例如验证和与其他 FormField 小部件的集成。

dart
TextFormField(
  decoration: const InputDecoration(
    border: UnderlineInputBorder(),
    labelText: 'Enter your username',
  ),
),

交互式示例

#
import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    const appTitle = 'Form Styling Demo';
    return MaterialApp(
      title: appTitle,
      home: Scaffold(
        appBar: AppBar(
          title: const Text(appTitle),
        ),
        body: const MyCustomForm(),
      ),
    );
  }
}

class MyCustomForm extends StatelessWidget {
  const MyCustomForm({super.key});

  @override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: <Widget>[
        const Padding(
          padding: EdgeInsets.symmetric(horizontal: 8, vertical: 16),
          child: TextField(
            decoration: InputDecoration(
              border: OutlineInputBorder(),
              hintText: 'Enter a search term',
            ),
          ),
        ),
        Padding(
          padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 16),
          child: TextFormField(
            decoration: const InputDecoration(
              border: UnderlineInputBorder(),
              labelText: 'Enter your username',
            ),
          ),
        ),
      ],
    );
  }
}

有关输入验证的更多信息,请参阅构建带验证的表单食谱。