관리 메뉴

막내의 막무가내 프로그래밍 & 일상

[Flutter] Function 클래스와 예제 본문

플러터(Flutter) & Dart

[Flutter] Function 클래스와 예제

막무가내막내 2022. 4. 5. 15:31
728x90

 

 

 

 

 

 

 

플러터는 객체지향과 함수형 프로그래밍 특징을 모두 가진 언어이다.

 

 

https://api.flutter.dev/flutter/dart-core/Function-class.html

 

Function class - dart:core library - Dart API

The base class for all function types. The run-time type of a function object is subtype of a function type, and as such, a subtype of Function. Constructors Function() Properties hashCode → int A hash code value that is compatible with operator==. read-

api.flutter.dev

그래서 모든 함수의 기본이 되는 타입이 되는 Function 클래스가 있으며 함수형 프로그래밍이기 때문에 함수도 변수에 담을 수가 있다.

 

 

이에 대해 몇가지 예제를 직접 테스트를 해보았다.

void main() {
  int result = cal(2, 5, multiply);
  print(result);
}

int cal(int n1, int n2, Function func) {
  return func(n1, n2);
}

int add(int n1, int n2) {
  return n1 + n2;
}

int multiply(int n1, int n2) {
  return n1 * n2;
}

 

 

void main() {
  int result = cal(2, 5, add);
  print(result);
}

final Function cal = (int n1, int n2, Function func) {
  return func(n1, n2);
};

int add(int n1, int n2) {
  return n1 + n2;
}

int multiply(int n1, int n2) {
  return n1 * n2;
}

Function에 선언된 Function 이름인 add Function을 매개변수로 전달하여 이 매개변수로 해당 함수를 호출할 수 있다.

또한 함수도 Function 변수타입으로 저장할 수가 있다.

 

 

 

 

 

 

다음은 클래스 객체 테스트다.

void main() {
  Game game = Game(state: play);
  print(game.state);
  game.state = stop;
  print(game.state);
}

class Game {
  Game({this.state});

  Function? state;
}

void play() {
  print('play ~~~~');
}

void stop() {
  print('stop !!!!!');
}

예상대로 흘러감을 볼 수 있다. 예제를 통해 콜백도 이를 통해 구현됨을 알 수 있다.

 

 

 

class ReusableCard extends StatelessWidget {
  // @required로 색상값 매개변수 필요하다고 알려줌 (린트로 잡힘)
  ReusableCard({@required this.colour, this.cardChild, this.onPress});

  final Color colour;
  final Widget cardChild;
  final Function onPress;

  @override
  Widget build(BuildContext context) {
      return GestureDetector(
      onTap: onPress,
      child: Container(
        child: cardChild,
        margin: EdgeInsets.all(15.0),
        decoration: BoxDecoration(
            // 생성자로 받은 컬러 사용
            color: colour,
            borderRadius: BorderRadius.circular(10.0)),
      ),
    );
  }
}
body: Column(
          children: <Widget>[
            Expanded(
                child: Row(
              children: <Widget>[
                Expanded(
                    child: ReusableCard(
                  onPress: () {
                    setState(() {
                      selectedGender = Gender.male;
                    });
                  },
                  colour: selectedGender == Gender.male
                      ? activeCardColour
                      : inactiveCardColour,
                  cardChild: IconContent(
                    icon: FontAwesomeIcons.mars,
                    label: 'MALE',
                  ),
                )),

ReusableCard 클래스를 만들어 Function을 활용하여 GestureDetector의 onPress 콜백함수를 외부에서 매개변수를 받아서 결과를 리턴해주는 기능을 구현한 예제이다.

 

 

 

 

 

 

 

이상 플러터의 Function 클래스를 예제를 통해 학습해봤다.

 

 

댓글과 공감은 큰 힘이 됩니다. 감사합니다. !!!

 

 

 

 

 

728x90
Comments