728x90
flutter의 doc에서는 다음과 같이 설명되어있다.
Signature for callbacks that report that an underlying value has changed.
typedef ValueChanged<T> = void Function(T value);
간단히 말하면 value 값이 변경되면 함수가 실행된다는 의미이다.
아래 코드를 예시로 확인해보면 onToggleCompleted가 ValueChanged로 사용되는 부분이다.
return CupertinoScrollbar(
child: ListView(
children: [
for (final todo in state.filteredTodos)
TodoListTile(
todo: todo,
onToggleCompleted: (isCompleted) {
context.read<TodosOverviewBloc>().add(
TodosOverviewTodoCompletionToggled(
todo: todo,
isCompleted: isCompleted,
),
);
},
onDismissed: (_) {
context
.read<TodosOverviewBloc>()
.add(TodosOverviewTodoDeleted(todo));
},
onTap: () {
Navigator.of(context).push(
EditTodoPage.route(initialTodo: todo),
);
},
),
],
),
);
isCompleted 값이 변경되면 TodosOverviewTodoCompletionToggled()이라는 Event가 추가된다.
TodoListTile 클래스 내에는 onToggleCompleted를 다음과 같이 정의해준다.
final ValueChanged<bool>? onToggleCompleted;
그리고 이것은 checkbox의 onChanged에서 사용되었고 value라는 값을 받는다.
Checkbox(
shape: const ContinuousRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(8)),
),
value: todo.isCompleted,
onChanged: onToggleCompleted == null
? null
: (value) => onToggleCompleted!(value!),
)
value 값은 checkbox에 check가 되었는지 안되어있는지의 bool 값을 말하며 이 값이 변함에 따라 함수가 실행되는 것이다.
('onToggleCompleted == null ? null'은 null safety로 인해 작성된 코드로 본 글과는 상관없다.)
[Reference]
https://bloclibrary.dev/#/fluttertodostutorial?id=edittodo
https://api.flutter.dev/flutter/foundation/ValueChanged.html
728x90
'Dart & Flutter' 카테고리의 다른 글
[Dart] PublishSubject와 BehaviorSubject (0) | 2023.02.19 |
---|---|
[Flutter] 빈 공간을 tap했을 때 textfield focus 해제 (0) | 2023.02.16 |
[Flutter] Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'List<String>?' in type cast (0) | 2023.02.15 |
[Flutter] BLOC: state management (0) | 2023.02.07 |
[Flutter] The number of method references in a .dex file cannot exceed 64K. (0) | 2023.02.04 |