티스토리 뷰
Flutter 앱에서 텍스트 필드는 사용자 입력을 수집하는 데 필수적인 요소입니다. 이 글에서는 Flutter의 TextField
와 TextFormField
를 사용해 텍스트 필드를 만드는 방법과, 다양한 스타일링 옵션을 활용하는 방법을 알아보겠습니다. 또한 InputDecoration
속성을 활용해 필드에 레이블, 힌트 텍스트, 에러 메시지를 표시하는 방법도 함께 다룹니다.
참고. Create and style a text field
Flutter에서 텍스트 입력 필드 사용하기
1. TextField와 TextFormField란?
Flutter에서 텍스트 입력 필드를 만들 때 가장 많이 사용하는 두 가지 위젯은 TextField
와 TextFormField
입니다.
- TextField: 기본 텍스트 입력 필드로, 사용자에게 정보를 입력받는 필드를 제공합니다.
- TextFormField:
TextField
의 기능에 폼과의 통합 및 유효성 검사를 추가한 위젯으로, 폼 내에서 유효성 검사와 같은 추가 기능을 필요로 하는 경우에 사용됩니다.
2. 기본적인 TextField 구현
TextField
는 가장 기본적인 텍스트 입력 위젯으로, InputDecoration
속성을 사용해 다양한 UI 요소를 추가할 수 있습니다. 예를 들어, 텍스트 필드에 외곽선을 추가하고 힌트 텍스트를 표시하려면 다음과 같이 설정할 수 있습니다.
TextField(
decoration: InputDecoration(
border: OutlineInputBorder(),
hintText: '검색어를 입력하세요',
),
),
InputDecoration으로 가능한 다양한 설정
- border: 외곽선 스타일을 설정합니다. 기본값은 밑줄이지만,
OutlineInputBorder()
를 사용해 외곽선으로 변경할 수 있습니다. - hintText: 사용자가 텍스트 필드에 입력해야 할 내용을 안내하는 힌트 텍스트입니다.
- labelText: 필드에 제목을 추가하여 필드의 용도를 명확하게 합니다.
- errorText: 입력값이 유효하지 않을 경우 오류 메시지를 표시하는 데 사용됩니다.
3. TextFormField로 폼에 유효성 검사 추가하기
TextFormField
는 폼과 연동되어 추가적인 기능을 제공합니다. validator
속성을 사용해 유효성 검사를 추가할 수 있으며, TextField
와 동일한 InputDecoration
을 사용하여 필드를 스타일링할 수 있습니다.
TextFormField(
decoration: const InputDecoration(
border: UnderlineInputBorder(),
labelText: '사용자 이름을 입력하세요',
),
validator: (value) {
if (value == null || value.isEmpty) {
return '이 필드는 비워둘 수 없습니다';
}
return null;
},
),
4. 사용자의 입력값 관리하기
Flutter에서는 사용자가 텍스트 필드에 입력한 값을 관리할 수 있습니다. TextEditingController
를 사용하면 텍스트 필드에 입력된 값을 쉽게 추적하고 변경할 수 있으며, 이를 통해 사용자가 입력한 텍스트를 가져오거나 필드를 초기화할 수 있습니다.
final TextEditingController _controller = TextEditingController();
@override
void dispose() {
_controller.dispose();
super.dispose();
}
// 텍스트 필드 설정
TextField(
controller: _controller,
decoration: const InputDecoration(
hintText: '이름을 입력하세요',
),
),
TextEditingController 사용 시 주의사항
TextEditingController
는 텍스트 필드가 사라질 때 반드시 해제해야 합니다. 이를 위해 dispose()
메서드를 호출해 메모리 누수를 방지합니다.
5. TextField와 TextFormField의 차이점
TextField
와 TextFormField
는 겉으로 보기엔 비슷해 보일 수 있지만, TextFormField
는 Form
과 함께 사용될 때 유효성 검사와 같은 기능을 추가적으로 지원합니다. 일반적으로 단순한 입력만 필요한 경우에는 TextField
를 사용하고, 폼에 포함된 텍스트 필드에서는 TextFormField
를 사용하는 것이 좋습니다.
구분 | TextField | TextFormField |
---|---|---|
용도 | 기본 텍스트 입력 필드 | 폼과 통합되어 유효성 검사 지원 |
유효성 검사 | 지원하지 않음 | validator 속성으로 유효성 검사 가능 |
Form과의 통합 | 지원하지 않음 | Form 위젯과 통합 가능 |
Flutter 텍스트 입력 필드 활용 팁
- UI/UX 향상:
InputDecoration
을 통해 사용자가 이해하기 쉬운 인터페이스를 제공하세요. - 유효성 검사:
TextFormField
와validator
속성을 통해 사용자의 입력 오류를 사전에 방지할 수 있습니다. - 컨트롤러 활용:
TextEditingController
로 입력된 텍스트를 실시간으로 확인하고, 필요 시 데이터를 즉시 변경하거나 초기화할 수 있습니다.
Flutter에서 텍스트 필드는 사용자 경험을 크게 좌우하는 중요한 UI 요소입니다. 텍스트 필드의 기능과 스타일링을 적절히 활용하여 사용자 친화적인 입력 인터페이스를 만들어 보세요.
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',
),
),
),
],
);
}
}
'Flutter Cookbook' 카테고리의 다른 글
Flutter에서 텍스트 필드 변경 사항 감지하기: 실시간 입력 제어의 모든 것 (2) | 2024.11.06 |
---|---|
Flutter에서 텍스트 필드 포커스 관리하기: 효과적인 사용자 경험 만들기 (2) | 2024.11.05 |
Flutter 폼 유효성 검증: 쉽게 구현하는 방법 (1) | 2024.11.03 |
Flutter에서 드래그 가능한 UI 요소 구현하기 (0) | 2024.11.02 |
Flutter에서 그라디언트 채팅 말풍선 구현하기: 사용자 경험을 향상시키는 방법 (1) | 2024.11.01 |