728x90
반응형
기능 만들기
- hintText : placeholder 역할을 하는 옵션
- obscureText : 비밀번호처럼 보여주는 *** 역할을 하는 옵션
두가지는 필수적으로 필요한 기능이고,,
- autoFocus : 화면 첫 진입 시 ID 입력 바로 할 수 있도록 Focus 하는 기능
- onChanged : 실행될 때마다 수행할 수 있는 기능 틀 제작 기능
final bool obscureText; // 비밀번호인지?
final bool autoFocus; // focus 될 것인지?
final String? hintText; // placeholder
final ValueChanged<String>? onChanged; // 실행 될 때마다 수행할 것
final 로 넣었으니 생성자 생성해준다.
const CustomTextFormField({
this.hintText,
this.obscureText = false,
this.autoFocus = false,
required this.onChanged,
Key? key
}) : super(key: key);
마지막으로 build 에서 어떻게 표현해주는지 파악하면 완료
@override
Widget build(BuildContext context) {
return TextFormField(
obscureText: obscureText,
autofocus: autoFocus,
decoration: InputDecoration(
hintText: hintText,
),
);
}
아래는 전체 코드이다.
import 'package:flutter/material.dart';
class CustomTextFormField extends StatelessWidget {
final bool obscureText; // 비밀번호인지?
final bool autoFocus; // focus 될 것인지?
final String? hintText; // placeholder
final ValueChanged<String>? onChanged; // 실행 될 때마다 수행할 것
const CustomTextFormField({
this.hintText,
this.obscureText = false,
this.autoFocus = false,
required this.onChanged,
Key? key
}) : super(key: key);
@override
Widget build(BuildContext context) {
return TextFormField(
obscureText: obscureText,
autofocus: autoFocus,
decoration: InputDecoration(
hintText: hintText,
),
);
}
}
아래 그림처럼 생성이 되는데, 강의에서는 CSS 까지 입혀서 더 이쁘게 만들 수 있는 방법도 알려준다.
CSS 만들기
@override
Widget build(BuildContext context) {
const border = OutlineInputBorder(
borderSide: BorderSide(
color: INPUT_BG_COLOR,
width: 1.0,
),
);
const hintStyle = TextStyle(fontSize: 13.0);
return TextFormField(
obscureText: obscureText,
autofocus: autoFocus,
decoration: InputDecoration(
hintText: hintText,
contentPadding: const EdgeInsets.all(16.0),
hintStyle: hintStyle,
fillColor: INPUT_BG_COLOR,
filled: true,
border: border,
focusedBorder: border.copyWith(
borderSide: border.borderSide.copyWith(
color: PRIMARY_COLOR,
),
),
),
cursorColor: PRIMARY_COLOR,
);
}
Main 작성
메인 화면은 Component 를 배치하는 용도로 사용된다.
배치할 곳을 아래와 같이 작성해준다.
import 'package:flutter/material.dart';
import 'package:flutter_project_1/common/component/custom_text_form_field.dart';
void main() {
runApp(_App());
}
class _App extends StatelessWidget {
const _App({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CustomTextFormField(
onChanged: (String value) {},
hintText: '아이디 입력',
),
CustomTextFormField(
onChanged: (String value) {},
hintText: '비밀번호 입력',
obscureText: true,
),
],
),
),
);
}
}
컴포넌트를 잘 설계해두면 객체를 블록쌓듯이 붙여놓으면 되는 것 같아 편리하다고 생각했다.
728x90
반응형
'Dev > Flutter' 카테고리의 다른 글
[Flutter] Font, Image 등록 및 사용하기 (0) | 2024.10.11 |
---|---|
[Flutter] 초기 세팅, 환경설정 정리 (0) | 2024.08.23 |