본문 바로가기
Flutter/Flutter FAQ

Flutter 널 안전성 이후에는 'Function' 인수 유형이 'void Function()?' 매개 변수 유형에 할당될 수 없습니다., The argument type 'Function' can't be assigned to the parameter type 'void Function()?' after null safety

by 베타코드 2023. 5. 26.
반응형

질문


저는 서랍에 다른 항목들을 만들고 싶어서, DrawerItems를 위한 별도의 파일을 만들고 생성자를 통해 데이터를 메인 파일로 전달하려고 합니다. 그러나 onPressed 함수에서 다음과 같은 오류가 발생합니다:

"The argument type 'Function' can't be assigned to the parameter type 'void Function()'"
class DrawerItem extends StatelessWidget {
    
      final String text;
      final Function onPressed;
    
      const DrawerItem({Key key, this.text, this.onPressed}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return FlatButton(
          child: Text(
            text,
            style: TextStyle(
              fontWeight: FontWeight.w600,
              fontSize: 18.0,
            ),
          ),
          onPressed: onPressed,
        );
      }
    }

누구든지 이유를 알고 있나요?


답변


코드를 변경하여 onPressed에 대해 Function 대신 VoidCallback을 수용하도록합니다.
그런데 VoidCallbackvoid Function()의 약칭일 뿐이므로 final void Function() onPressed;으로 정의할 수도 있습니다.

업데이트된 코드:

class DrawerItem extends StatelessWidget {
    
      final String text;
      final VoidCallback onPressed;
    
      const DrawerItem({Key key, this.text, this.onPressed}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return FlatButton(
          child: Text(
            text,
            style: TextStyle(
              fontWeight: FontWeight.w600,
              fontSize: 18.0,
            ),
          ),
          onPressed: onPressed,
        );
      }
    }
반응형

댓글