일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- MainAxisAlignment
- ListTile
- Image.network
- CrossAxisAlignment
- 반석천
- Row
- HTTP
- Cached Image
- FutureBuilder
- Flutter 앱 배포
- Flutter Tutorial
- Flutter 강좌
- Load Image
- Column Widget
- Scaffold
- WillPopScope
- Flutter Example
- navigator
- node.js
- Flutter 예제
- AppBar
- Networking
- flutter
- listview
- InkWell
- Hello World
- Snackbar
- Row Widget
- sqlite
- ListView.builder
- Today
- Total
꿈꾸는 시스템 디자이너
Flutter 강좌 - [Form] 텍스트필드 생성 및 스타일 적용 본문
Flutter 강좌 목록 : https://here4you.tistory.com/120
지난 강좌에서 폼과 텍스트폼필드의 사용법에 대해서 살펴보았다. 이번에는 텍스트필드에 스타일을 적용하는 방법에 대해서 알아본다.
Flutter에서는 사용자로부터 텍스트의 입력을 받기 위해 TextField와 TextFormField를 제공한다. 이 두 텍스트 필드는 거의 유사한데 TextFormField 의 경우 폼 안에 넣어 사용하면서 추가적으로 입력값을 유효성 검증이나 다른 폼필드와의 연동 등의 기능을 제공한다.
지난 강좌에서 이용한 소스코드를 활용해서 다음과 같이 수정한다.
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
final appTitle = 'Form Validation Demo';
return MaterialApp(
title: appTitle,
home: Scaffold(
appBar: AppBar(title: Text(appTitle)),
// StatefulWidget인 MyCustomForm을 body로 설정
body: MyCustomForm(),
),
);
}
}
// 커스텀 폼 위젯을 정의
class MyCustomForm extends StatefulWidget {
@override
MyCustomFormState createState() {
return MyCustomFormState();
}
}
// 펌 위젯에 상응하는 상태 클래스
class MyCustomFormState extends State<MyCustomForm> {
// 폼에 부여할 수 있는 유니크한 글로벌 키를 생성한다.
// MyCustomFormState의 키가 아닌 FormState의 키를 생성해야함을 유의
final _formKey = GlobalKey<FormState>();
@override
Widget build(BuildContext context) {
// 폼 위젯 생성
// 폼 위젯은 컨테이너처럼 동작하면서, 복수의 폼 필드를 그룹화하고 적합성을 확인함
return Form(
// 필드에 부여했단 글러벌키를 폼에 할당함
key: _formKey,
child: Column(
// 컬럼내 위젯들을 왼쪽부터 정렬함
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
// 텍스트폼필드 추가
TextFormField(
// 텍스트폼필드에 validator 추가
validator: (value) {
// 입력값이 없으면 메시지 출력
if (value.isEmpty) {
return 'Enter some text';
} else
return null;
},
// 텍스트폼필드에 스타일 적용
decoration: InputDecoration(
// 텍스트필드의 외각선
border: InputBorder.none,
// 텍스트필드상에 출력되는 텍스트. 실제 값이 되진 않음
hintText: 'Enter a search term',
// 텍스트필드의 상단에 출력되는 레이블 텍스트
labelText: "Enter your username"),
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 16.0),
child: RaisedButton(
onPressed: () {
// 텍스트폼필드의 상태가 적함하는
if (_formKey.currentState.validate()) {
// 스낵바를 통해 메시지 출력
Scaffold.of(context)
.showSnackBar(SnackBar(content: Text('Processing Data')));
}
},
// 버튼에 텍스트 부여
child: Text('Submit'),
),
)
],
),
);
}
}
수정된 부분은 line 58부터 64까지 이다. TextFormField의 decoration 항목에 InputDecoration 위챗을 구현하여 스타일을 적용할 수 있다.
border는 텍스트필드의 외각선을 설정하는 항목이고, hintText는 텍스트필드에 출력되는 안내문구이다. hintText는 실제 텍스트 입력값이 되진 않는다. labelText는 텍스트필드 상단에 출력되는 레이블로서 포커싱 될 때 출력된다.
실행화면은 다음과 같다.
앱이 실행되면 텍스트필드에 hintText로 설정한 'Enter a search term'이란 문구가 출력된다. 또한 border값을 InputBorder.none으로 설정하였기 때문에 밑줄이 생략되어 출력된다.
텍스트필드를 누르면 가상키보드가 올라오고, 텍스트필드 상단에 labelText로 설정한 Enter your username'이란 문구가 파란색으로 출력된다. 이 상태에서 Submit 버튼을 누르면 labelText 문구가 빨간색으로 변경되고, 텍스트필드 하단에 에러 메시지가 출력된다.
정상적으로 텍스트를 입력한 후 다시 Submit 버튼을 누르면 labeText 문구가 다시 파란색으로 변경되면서 스낵바가 나타난다.
Flutter Code Examples 강좌를 추천합니다.
- 제 블로그에서 Flutter Code Examples 프로젝트를 시작합니다.
- Flutter의 다양한 예제를 소스코드와 실행화면으로 제공합니다.
- 또한 모든 예제는 Flutter Code Examples 앱을 통해 테스트 가능합니다.
Flutter Code Examples 강좌로 메뉴로 이동
'Development > Flutter' 카테고리의 다른 글
Flutter 강좌 - [Form] 텍스트필드의 변화를 핸들링하는 방법 (2) | 2019.07.03 |
---|---|
Flutter 강좌 - [Form] 텍스트필드에 포커스 주기 (1) | 2019.07.03 |
Flutter 강좌 - [Form] Form 사용법과 적합성 검증법 (1) | 2019.07.02 |
Flutter 강좌 - 탭 사용법 | Work with tabs (2) | 2019.07.02 |
Flutter 강좌 - 커스텀 폰트 사용법 | Use a custom font (0) | 2019.07.02 |