일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- identifierForVender
- KakaoMap
- Completer
- RouteObserver
- Raycasting
- node
- react
- uint16array
- androidId
- jszip
- Three js
- Prism.js
- Three-fiber
- Excel
- swagger-typescript-api
- Game js
- babel
- code editor
- FirebaseAnalytics
- web track
- Image Resize typescript
- Babel standalone
- webrtc
- Flutter
- methodChannel
- REST API
- Redux
- uint8array
- typescript
- userevent_tracker
- Today
- Total
Never give up
Flutter 2.0 - Callback Function 본문
기존 프로젝트를 2.0으로 Migration을 하면서 Null safety부분 때문에 변경된 부분이 생각보다 많다는걸 느꼈습니다
그중 하나가 callback이었는데 여러분들은 삽질하지 마시길 바라며 포스트 올립니다..
기존에 우리가 사용하던 방식은 다음과 같습니다
class Button extends StatelessWidget {
//2.0에서는 당연히 null check 해야됩니다 이건 예시로..
final String name;
final Function onTap;
Button({this.name, this.onTap});
@override
Widget build(BuildContext context) {
return ElevatedButton(onPressed: onTap, child: Text(name));
}
}
하지만 2.0에서 이렇게 쓰면 onPressed부분에 빨간줄이 그이며
The argument type 'Function' can't be assigned to the parameter type 'void Function()?'와 같이 안내를 할겁니다
흔히 보는 데이터 타입문제죠 그래서 필자가 시도해본 방법은 무려..
//1번
ElevatedButton(onPressed: () => onTap, child: Text(name));
//2번
final Function? onTap;
네 진짜 말도 안되는짓을 했습니다
1번은 당연히 안되는걸 머리로 알고있었는데 해버렸고..(빨간줄 없애기..)
2번은 null check만 하면 되지않을까 해서 해봤는데 안됐습니다
근데 말이죠.. IDE가 친절하게 다 알려주는데 왜 삽질을 한걸까요..
The argument type 'Function' can't be assigned to the parameter type 'void Function()?'
저거로 바꾸라고 했는데 딴짓했습니다..
일단 IDE가 시키는대로 해봤습니다
class Button extends StatelessWidget {
final String name;
final void Function()? onTap;
Button({required this.name, required this.onTap});
@override
Widget build(BuildContext context) {
return ElevatedButton(onPressed: onTap, child: Text(name));
}
}
이전에 Function만 쓰다가 void Function()? 이렇게 쓰니 이질감이 많이 느껴지더군요
그래서 좀 더 편하게 해보자 하는 나쁜심보(?)로 시도해봤습니다
final Function() onTap;
이런식으로 말이죠
1. required속성을 사용하는데 굳이 한번 더 null check를 해야될까?
2. void를 굳이 붙여줘야될까 하는 나쁜심보(?)
로 한번 시도해봤는데 다행이도 잘 동작이 됩니다
어차피 Null check를 한다면 굳이 nullable을 사용할 필요가 없고
이렇게 사용하는 방법도 있다 정도로 생각하면 될거 같습니다
'해왔던 삽질..' 카테고리의 다른 글
Flutter - Stepper with a problem (0) | 2021.03.24 |
---|---|
Flutter 2.0 - How to use previous version(1.22.6) (2) | 2021.03.16 |
공지 (feat. Flutter 2.0) (0) | 2021.03.04 |
Flutter - Bloc의 이해 with stream (0) | 2021.02.28 |
Flutter - list with paging (0) | 2021.02.24 |