文字框的建立和設定

文字框作為一個接收使用者輸入的元件,被廣泛應用於表單建立、即時通訊、搜尋等場景中。

Flutter 提供了兩個開箱即用的文字框元件: TextFieldTextFormField

文字框

TextField 是最常用的文字輸入元件。

TextField 元件的預設樣式是帶有下劃線的裝飾樣式。如果需要自定義裝飾樣式(新增標籤、圖示、提示文字和錯誤文字),可以將 InputDecoration 應用到 TextFielddecoration 屬性上。如果需要完全移除下劃線和標籤預留空間,可以將 decoration 屬性設定為 null。

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

要在內容發生變化時收到此內容,請參見 回應文字框內容的更改

表單文字框

TextFormField 內部封裝了一個 TextField 並被整合在表單元件 Form 中。如果需要對文字輸入進行驗證或者需要與其他表單元件 FormField 互動聯動,可以考慮使用 TextFormField

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

Interactive example

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',
            ),
          ),
        ),
      ],
    );
  }
}

檢視章節 建立一個有驗證判斷的表單 獲取更多關於輸入驗證的內容。