Flutter copyWith Method
- Flutter/Flutter
- 2025. 1. 30.
반응형
* 개인적인 공부 내용을 기록하기 위해 작성한 포스팅이기에 잘못된 내용을 포함하고 있을 수 있습니다.
* Flutter FrameWork의 copyWith 메서드와 사용법에 대한 내용에 대해 정리한 글입니다.
What is copyWith?
copyWith method는 주로 immutable object(불변객체)에서 사용되는 메서드로, 변경하고자 하는 객체를 복사해 특정 필드만 변경할 수 있도록 도와주는 메서드이다.
플러터는 상태를 관리할 때 기존 객체를 직접 수정하는 방식이 아닌 새로운 객체를 생성한 뒤 객체의 필드를 수정하는 방식으로 동작한다.
이때 copyWith method를 사용하면 보다 편리하게 객체의 필드를 변경할 수 있다.
copyWith method Usage Example Code
_Title Widget 내부에 nov, Dev 2개의 텍스트 위젯이 Row Widget에 선언되어있는 간단한 UI이다.
import 'package:flutter/material.dart';
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black,
body: SizedBox(
width: double.infinity,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
_Title(),
],
),
),
);
}
}
class _Title extends StatelessWidget {
const _Title({super.key});
@override
Widget build(BuildContext context) {
final textStyle = TextStyle(
color: Colors.white,
fontSize: 32.0,
fontWeight: FontWeight.w300,
);
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'nov',
style: TextStyle(
color: Colors.white,
fontSize: 32.0,
fontWeight: FontWeight.w300,
),
),
Text(
'Dev',
style: TextStyle(
color: Colors.white,
fontSize: 32.0,
fontWeight: FontWeight.w300,
),
),
],
);
}
}
위 화면에서 Dev 글자를 출력하는 Text Widget의 fontWeight를 700으로 변경하고 싶다면 다음과 같이 리팩토링을 진행하면 된다.
1. TextStyle을 별도의 변수로 추출한다.
2. Dev Text Widget에 copyWith 메서드를 사용해 텍스트 굵기를 700으로 변경한다.
import 'package:flutter/material.dart';
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black,
body: SizedBox(
width: double.infinity,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
_Title(),
],
),
),
);
}
}
class _Title extends StatelessWidget {
const _Title({super.key});
@override
Widget build(BuildContext context) {
final textStyle = TextStyle(
color: Colors.white,
fontSize: 32.0,
fontWeight: FontWeight.w300,
);
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'nov',
style: textStyle,
),
Text(
'Dev',
style: textStyle.copyWith(
fontWeight: FontWeight.w700,
),
),
],
);
}
}
반응형
'Flutter > Flutter' 카테고리의 다른 글
Flutter Constraint 자식 위젯 크기 규칙 (0) | 2024.08.09 |
---|---|
Flutter Navigator 페이지 간 데이터 주고 받기 (0) | 2024.08.07 |
Flutter TextFieldWidget 키보드 자판 OverFlow 현상 해결 방법 (0) | 2023.10.06 |
Android Studio 에뮬레이터 분리 및 항상 맨 앞으로 오도록 설정 (0) | 2023.04.11 |
Dart & Flutter 웹 온라인 IDE 추천 및 사용법 DartPad & FlutLab (0) | 2023.03.04 |