https://api.flutter.dev/flutter/material/TextField-class.html
공식 문서에는 "텍스트 필드를 사용하면 사용자는 하드웨어 키보드나 화면 키보드를 사용하여 텍스트를 입력할 수 있습니다." 라고 적혀있습니다.
즉, 사용자로부터 텍스트 입력을 받을 수 있는 가장 기본적인 위젯으로 앱에서 검색창, 로그인 창 등 다양한 입력폼에서 활용되고 있습니다.
아래에서는 TextField의 기본적인 사용법부터 주요 속성, 디자인 커스터마이징 방법까지 알아보겠습니다.
기본예제로
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('TextField Example')),
body: const Padding(
padding: EdgeInsets.all(16.0),
child: TextField(
decoration: InputDecoration(
labelText: 'Enter your text',
border: OutlineInputBorder(),
),
),
),
),
);
}
}
이 예제에서는 TextField 위젯을 사용해 단순한 텍스트 입력 창을 만들고 InputDecoration을 통해 텍스트 필드의 레이블과 테두리를 설정하여 기본적인 스타일을 구성했습니다.
실제 코드 TextField 의 레퍼런스를 확인해보면 다양한 속성들이 있으며 디자인, 사용자 편의성을 향상시킬수 있는 옵션들이 있습니다. 오늘은 대표적인 속성들만 알아보겠습니다.
final TextEditingController _controller = TextEditingController();
TextField(
controller: _controller,
);
// 버튼을 눌렀을 때 텍스트 초기화
ElevatedButton(
onPressed: () {
_controller.clear();
},
child: Text('Clear Text'),
);
TextField(
decoration: InputDecoration(
labelText: 'Username',
hintText: 'Enter your username',
icon: Icon(Icons.person),
prefixIcon: Icon(Icons.account_circle),
suffixIcon: Icon(Icons.check_circle),
border: OutlineInputBorder(),
errorText: 'Invalid username',
),
);
InputDecoration을 통해 TextField의 스타일과 디자인을 정의합니다.

keyboardType은 사용자가 어떤 종류의 입력을 할지를 결정하는 속성입니다.
이메일 주소를 입력할 때는 TextInputType.emailAddress, 숫자 입력 필드에는 TextInputType.number를 설정하여 사용자가 더 편리하게 입력할 수 있도록 합니다.

TextField(
obscureText: true,
);
obscureText값을 true로 설정하면 위 사진과 같이 텍스트필드에 입력을 하게 되면 마스킹 처리된것을 확인 할 수 있습니다.
TextField(
maxLength: 10,
);

TextField(
onChanged: (text) {
print("Current text: $text");
},
);

onChanged는 TextField 내의 입력 변화를 실시간으로 추적하여 즉각적인 반응을 필요로 하는 다양한 UI와 로직을 구현하는 데 중요한 역할을 합니다.
ValueChanged는 Flutter에서 사용되는 콜백 함수 타입 중 하나로 입력된 값을 변경할 때 호출하는 콜백 함수의 형식을 정의하는 타입입니다. 이 타입은 단일 인수(T)를 받고 반환값이 없는 함수 형태를 나타냅니다.
예를 들어, ValueChanged은 String 타입의 변화를 처리하는 함수 타입을 의미합니다. 이 콜백 함수는 입력을 받을 때마다 실행되며 이를 통해 입력된 값을 기반으로 UI를 즉시 업데이트하거나 데이터 변경을 처리할 수 있게 해 줍니다.
TextField(
onSubmitted: (text) {
print("Submitted text: $text");
},
);
* 우측 하단에 done 버튼을 클릭하면 onSubmitted의 text의 마지막으로 입력된 값까지 출력하게 된다.
이 글에서는 TextField의 주요 속성들과 예제들을 통해 간략적으로 다뤄보았습니다. 이러한 속성들을 이해하고 활용한다면 사용자 경험을 개선하고 보다 효율적이고 입력 폼을 설계하는 데 큰 도움이 될 것입니다.