Dart & Flutter

[Dart] ValueChanged

ju_young 2023. 2. 16. 02:30
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