[flutter] Flutter Riverpod에서 달력 일정 관리 앱 만들기

이번에는 Flutter와 Riverpod를 사용하여 달력 일정 관리 앱을 만들어 보겠습니다. Riverpod는 상태 관리를 위한 강력한 도구로, 의존성 주입과 상태 관리를 쉽게 처리할 수 있습니다.

구현할 기능

우리는 이 앱에서 다음과 같은 주요 기능을 구현할 것입니다:

  1. 달력을 표시하여 사용자가 날짜를 선택할 수 있도록 합니다.
  2. 선택한 날짜에 일정을 추가하고, 편집하거나 삭제할 수 있도록 합니다.

사용할 패키지

이번 프로젝트에서는 몇 가지 패키지를 사용할 것입니다:

이외에도 필요한 추가 패키지가 있을 수 있습니다.

달력 UI 만들기

먼저 table_calendar 패키지를 사용하여 Flutter 앱에 달력 UI를 구현하겠습니다. 아래는 간단한 예제 코드입니다:

import 'package:flutter/material.dart';
import 'package:table_calendar/table_calendar.dart';

class CalendarPage extends StatefulWidget {
  @override
  _CalendarPageState createState() => _CalendarPageState();
}

class _CalendarPageState extends State<CalendarPage> {
  CalendarController _calendarController;

  @override
  void initState() {
    super.initState();
    _calendarController = CalendarController();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('일정 관리'),
      ),
      body: TableCalendar(
        calendarController: _calendarController,
      ),
    );
  }
}

상태 관리 및 의존성 주입

이제 riverpod 패키지를 사용하여 일정과 관련된 상태 관리 및 의존성 주입을 처리하겠습니다. 이를 통해 달력과 상태를 연결하고, 사용자가 선택한 날짜에 따라 해당 날짜의 일정을 표시할 수 있습니다.

final selectedDateProvider = StateProvider<DateTime>((ref) => DateTime.now());

final eventsProvider = StateProvider<Map<DateTime, List<Event>>>((ref) => {});

class Event {
  final String title;
  Event(this.title);
}

class EventList extends ConsumerWidget {
  @override
  Widget build(BuildContext context, ScopedReader watch) {
    final selectedDate = watch(selectedDateProvider).state;
    final events = watch(eventsProvider).state;

    final selectedEvents = events[selectedDate] ?? [];

    return ListView(
      children: selectedEvents.map((event) => ListTile(title: Text(event.title))).toList(),
    );
  }
}

마치며

이제 앱이 완성되었습니다. 우리는 Flutter와 Riverpod를 사용하여 달력 일정 관리 앱을 만들었습니다. 이를 통해 Flutter를 사용한 앱 개발과 Riverpod를 사용한 상태 관리에 대한 이해를 높일 수 있었습니다. 만약 더 많은 기능을 추가하고 싶다면, table_calendarriverpod의 공식 문서를 참고해 보세요.

참고 자료