코드 리팩토링이란?
코드를 유지 보수하기 좋게 바꾸는 것
가독성도 높일 수 있고 불필요한 중복을 피할 수 있다.
이는 결국 다른 사람과의 협업에도 도움이 된다.
로그인 페이지를 통한 코드 리팩토링
main.dart
import 'package:flutter/material.dart';
import 'login_app/login.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Firebase login app',
home: LogIn(),
);
}
}
my_button.dart
유사한 모양의 버튼을 여러개 사용하는 상황에서
MyButton이라는 클래스를 만들어서 변경요소인 image, text, color, radius, VoidCallback 함수 를 매개변수로 생성자를 호출하면 동일한 버튼을 찍어낼 수 있도록 함.
required 문법에 대한 이해 필요
import 'package:coderefactoring/login_app/login.dart';
import 'package:flutter/material.dart';
class MyButton extends StatelessWidget {
MyButton({Key? key, required this.image, required this.text, required this.color, required this.radius, required this.onPressed}) : super(key: key);
final Widget image;
final Widget text;
final Color color;
final double radius;
final VoidCallback onPressed;
@override
Widget build(BuildContext context) {
return ButtonTheme(
height: 50.0,
child: ElevatedButton(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
image,
text,
Opacity(
opacity: 0.0,
child: Image.asset('images/glogo.png'),
),
],
),
style: ElevatedButton.styleFrom(
backgroundColor: color
),
onPressed: onPressed,
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(
Radius.circular(radius),
),
),
);
}
}
login.dart
MyButton객체를 이용해서 버튼을 쉽게 생성
import 'package:coderefactoring/my_button/my_button.dart';
import 'package:flutter/material.dart';
class LogIn extends StatelessWidget {
const LogIn({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.blue,
title: Text(
'Sign In',
style: TextStyle(color: Colors.white),
),
centerTitle: true,
elevation: 0.2,
),
body: buildButton(),
);
}
Widget buildButton() {
return Padding(
padding: EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
MyButton(
image: Image.asset('images/glogo.png'),
text: Text(
'Login with Google',
style: TextStyle(color: Colors.black87, fontSize: 15.0),
),
color: Colors.white,
radius: 4.0,
onPressed: () {}),
SizedBox(
height: 10.0,
),
MyButton(
image: Image.asset('images/flogo.png'),
text: Text(
'Login with Facebook',
style: TextStyle(color: Colors.white, fontSize: 15.0),
),
color: Color(0xFF334D92),
radius: 4.0,
onPressed: () {}),
SizedBox(
height: 10.0,
),
MyButton(
image: Icon(
Icons.mail,
color: Colors.white,
),
text: Text(
'Login with Email',
style: TextStyle(color: Colors.white, fontSize: 15.0),
),
radius: 4.0,
color: Colors.green,
onPressed: () {},
),
SizedBox(
height: 10.0,
),
],
),
);
}
}
'플로터(Flutter) > 기본' 카테고리의 다른 글
(코딩쉐프) 조금 매운 맛 10강 (loop) (0) | 2023.02.03 |
---|---|
(코딩쉐프) 조금 매운 맛 3강 ~ 5강 (로그인과 주사위앱) (0) | 2023.01.17 |
(코딩쉐프) 조금 매운 맛 2강 (버튼에 따라 증감하는 앱) (0) | 2023.01.16 |
(코딩쉐프) 조금 매운 맛 1강 (상속) (0) | 2023.01.13 |
(코딩쉐프) 순한 맛 시즌 2 - 반응형으로 만드는 유튜브(모바일,데스크톱) (0) | 2023.01.12 |