[flutter] Flutter Riverpod에서 토도 리스트 앱 만들기

개요

이번 포스트에서는 Flutter와 Riverpod을 사용하여 간단한 투두 리스트 앱을 만드는 방법을 알아볼 것입니다.

Riverpod이란?

Riverpod은 Flutter 어플리케이션에 상태 관리와 종속성 관리를 위한 강력한 라이브러리입니다.

프로젝트 설정

우선 flutter 프로젝트를 생성합니다. 그리고, flutter_riverpod 패키지를 pubspec.yaml 파일에 추가해줍니다.

dependencies:
  flutter_riverpod: ^1.0.0

이제 flutter pub get 명령어를 통해 패키지를 설치합니다.

투두 리스트 앱 구현

이제 간단한 투두 리스트 앱을 만들어보겠습니다.

상태 모델 정의

먼저, 투두 아이템의 상태를 나타내는 모델을 정의합니다.

class Todo {
  final String title;
  final bool isCompleted;

  Todo({
    required this.title,
    this.isCompleted = false,
  });
}

상태 관리 설정

그 다음, Riverpod을 사용하여 투두 리스트 상태를 관리합니다.

final todoListProvider = StateNotifierProvider<TodoList, List<Todo>>((ref) => TodoList());

class TodoList extends StateNotifier<List<Todo>> {
  TodoList() : super([]);

  void add(String title) {
    state = [...state, Todo(title: title)];
  }

  void toggleCompletion(int index) {
    state = [
      for (var i = 0; i < state.length; i++)
        i == index ? state[i].copyWith(isCompleted: !state[i].isCompleted) : state[i]
    ];
  }
}

UI 구성

마지막으로, 투두 리스트 앱의 UI를 구성합니다.

class TodoApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Todo List'),
        ),
        body: Consumer(
          builder: (context, watch, child) {
            final todos = watch(todoListProvider);
            return ListView.builder(
              itemCount: todos.length,
              itemBuilder: (context, index) {
                final todo = todos[index];
                return ListTile(
                  title: Text(todo.title),
                  trailing: Checkbox(
                    value: todo.isCompleted,
                    onChanged: (_) => context.read(todoListProvider.notifier).toggleCompletion(index),
                  ),
                );
              },
            );
          },
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () => Navigator.push(context, MaterialPageRoute(builder: (_) => AddTodoScreen())),
          child: Icon(Icons.add),
        ),
      ),
    );
  }
}

앱 실행

위의 코드를 포함하여 앱을 실행하면, 투두 리스트 앱을 사용할 수 있게 됩니다.

마치며

이렇게 Flutter와 Riverpod을 사용하여 간단한 투두 리스트 앱을 만들어보았습니다. Riverpod은 상태 관리와 종속성 관리를 효율적으로 처리할 수 있도록 도와줍니다. 만약 더 복잡한 앱을 구현할 때에도 Riverpod은 효율적인 상태 관리를 지원할 것입니다.

더 많은 정보는 Riverpod 공식 홈페이지에서 확인할 수 있습니다.