[flutter] shared_preferences 를 사용하여 사용자가 참여한 이벤트 목록을 저장하는 방법은 무엇인가요?

이벤트 목록을 사용자가 참여한 이벤트를 저장할 때, Flutter 앱에서 shared_preferences 패키지를 사용할 수 있습니다. shared_preferences를 통해 앱에서 간단한 키-값 쌍을 지속적으로 저장하고 검색할 수 있습니다.

1. shared_preferences 패키지 추가

먼저, shared_preferences 패키지를 프로젝트에 추가해야 합니다. pubspec.yaml 파일의 dependencies 섹션에 아래의 코드를 추가하고, 패키지를 가져옵니다.

dependencies:
  flutter:
    sdk: flutter
  shared_preferences: ^2.0.5

그리고나서 터미널에서 flutter pub get 명령을 실행하여 패키지를 가져옵니다.

2. 이벤트 목록 저장하기

이제 shared_preferences를 사용하여 사용자가 참여한 이벤트 목록을 저장하는 방법을 알아봅시다.

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

class EventListPage extends StatefulWidget {
  @override
  _EventListPageState createState() => _EventListPageState();
}

class _EventListPageState extends State<EventListPage> {
  List<String> _eventList = [];

  @override
  void initState() {
    super.initState();
    _loadEventList();
  }

  Future<void> _loadEventList() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    List<String> eventList = prefs.getStringList('eventList') ?? [];
    setState(() {
      _eventList = eventList;
    });
  }

  Future<void> _saveEventList(List<String> eventList) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    await prefs.setStringList('eventList', eventList);
  }

  void _addEvent(String eventName) {
    setState(() {
      _eventList.add(eventName);
      _saveEventList(_eventList);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('이벤트 목록'),
      ),
      body: Column(
        children: [
          Text('참여한 이벤트 목록:'),
          ListView.builder(
            shrinkWrap: true,
            itemCount: _eventList.length,
            itemBuilder: (context, index) {
              return ListTile(
                title: Text(_eventList[index]),
              );
            },
          ),
        ],
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          _addEvent('새로운 이벤트');
        },
        child: Icon(Icons.add),
      ),
    );
  }
}

위의 코드에서 EventListPage는 사용자가 참여한 이벤트 목록을 보여주는 페이지입니다. SharedPreferences를 사용하여 _eventList라는 이벤트 목록을 로드하고, _addEvent 함수를 통해 새로운 이벤트를 추가하고 _saveEventList를 호출하여 eventList를 저장합니다.

3. 사용자가 이벤트 목록에 접근하는 방법

이제 저장된 이벤트 목록에 접근하는 방법을 알아봅시다. 다른 페이지나 위젯에서 이벤트 목록을 사용하려면 SharedPreferences를 사용하여 이벤트 목록을 로드하면 됩니다.

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

class AnotherWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder<List<String>>(
      future: _loadEventList(),
      builder: (context, snapshot) {
        if (snapshot.hasData) {
          List<String> eventList = snapshot.data!;
          // 이벤트 목록 사용
          return ListView.builder(
            itemCount: eventList.length,
            itemBuilder: (context, index) {
              return ListTile(
                title: Text(eventList[index]),
              );
            },
          );
        } else if (snapshot.hasError) {
          return Text('이벤트 목록 로드 실패');
        } else {
          return CircularProgressIndicator(); // 로딩 표시기
        }
      },
    );
  }

  Future<List<String>> _loadEventList() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    List<String> eventList = prefs.getStringList('eventList') ?? [];
    return eventList;
  }
}

위의 코드에서 AnotherWidgetFutureBuilder를 사용하여 _loadEventList 함수를 호출하고 이벤트 목록을 표시합니다. 로딩 상태일 때는 CircularProgressIndicator를 표시하고, 데이터가 없을 때나 오류가 발생했을 때는 각각 메시지를 표시합니다.

이제 shared_preferences를 사용하여 사용자가 참여한 이벤트 목록을 저장하고 액세스하는 방법을 알게 되었습니다.

더 자세한 정보는 shared_preferences 패키지의 공식 문서를 참고하세요.