반응형
Flutter 에서 기본으로 제공되는 위젯들이 있다.
버튼도 그렇고 텍스트 위젯도 그렇고
하지만 프로젝트를 진행하다 보면
매번 버튼을 만들수는 없다. 더구나 기본으로 제공하는 위젯의 디자인이
내가 만들고 싶은 프로젝트에 결이 안맞을 수 있다.
보통 그럴 때 아래와 같이 프로젝트에 쓰일 위젯들을 따로 만들어 둔다.
이렇게 되면 한가지 어려움이 발생한다.
예를 들어 내가 버튼 위젯을 만들었고
그것을 메인 페이지에 쓰려고 한다면
버튼에 함수들을 메인페이지에 선언을 할지
버튼 위젯에 선언을 할지 고민이 된다.
위젯을 만드는 이유가 깔끔한 코드를 위해서이다.
그래서 버튼 위젯에서 VoidCallBack을 선언을 해준다.
해당 버튼 위젯에 들어갈 onPressed를 메인페이지 함수와 연결 시켜주기만 하면 된다.
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class Mybutton extends StatelessWidget {
final VoidCallback onPressed; //다른 클래스에서 쓸 때 해당 함수를 연결할 변수 VoidCallback 선언
final String title;
final IconData icon;
final double height;
final Color? color;
Mybutton({Key? key,required this.title,required this.icon,required this.onPressed,
this.color,this.height=40}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
child: Row(
children: [
Expanded(child: Container(
height: height,
child: ElevatedButton.icon(
onPressed: onPressed, //이 부분이 다른 클래스에서 쓸 때 해당 클래스에서 쓰일 함수를 바로 적으면 된다.
icon: Icon(icon),
style: ElevatedButton.styleFrom(backgroundColor: color ??
Theme.of(context).primaryColor),
label: Text(title,style: TextStyle(color: Colors.white),)),
))
],
),
);
}
}
반응형