[flutter] shared_preferences 를 사용하여 사용자의 최근 검색 기록을 저장하는 방법은 무엇인가요?

Flutter에서 shared_preferences 패키지는 사용자의 기기에 데이터를 저장하기 위한 간단하고 효과적인 방법을 제공합니다. 이를 사용하여 사용자의 최근 검색 기록을 저장하는 방법은 다음과 같습니다:

  1. shared_preferences 패키지를 프로젝트에 추가합니다. 이를 위해 pubspec.yaml 파일을 열고 dependencies 섹션에 다음을 추가합니다:

    dependencies:
      shared_preferences: ^2.0.5
    

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

  2. 최근 검색 기록을 저장하기 위한 SharedPreferences 인스턴스를 생성합니다. 일반적으로 앱의 상태 관리 클래스나 뷰 모델에서 이를 수행합니다. 예를 들어:

    import 'package:shared_preferences/shared_preferences.dart';
    
    class SearchHistoryManager {
      final String _prefsKey = "search_history";
      SharedPreferences _prefs;
    
      Future<void> init() async {
        _prefs = await SharedPreferences.getInstance();
      }
    
      Future<List<String>> getSearchHistory() async {
        return _prefs.getStringList(_prefsKey) ?? [];
      }
    
      Future<void> saveSearchQuery(String query) async {
        List<String> searchHistory = await getSearchHistory();
    
        if (searchHistory.contains(query)) {
          searchHistory.remove(query); // 기존에 있던 쿼리를 삭제하여 중복을 방지합니다.
        }
    
        searchHistory.add(query);
    
        await _prefs.setStringList(_prefsKey, searchHistory);
      }
    }
    

    위의 예제는 SharedPreferences를 사용하여 최근 검색 기록을 저장하거나 검색 기록을 가져오는 방법을 보여줍니다. _prefsKey는 SharedPreferences에서 사용할 키입니다. 앱이 시작될 때 init 함수를 호출하여 SharedPreferences 인스턴스를 초기화해야 합니다.

  3. 앱의 검색 기능과 연결하여 최근 검색 기록을 저장합니다. 예를 들어, 사용자가 검색 창에서 특정 검색어를 입력하면 다음과 같이 SearchHistoryManager를 사용하여 최근 검색 기록을 저장할 수 있습니다:

    void onSearch(String query) {
      // 검색 로직 처리
    
      SearchHistoryManager().saveSearchQuery(query);
    }
    

    위의 예제는 SearchHistoryManagersaveSearchQuery 함수를 호출하여 검색어를 저장합니다. 이를 통해 최근 검색 기록이 사용자의 기기에 저장되고 나중에 가져오거나 업데이트할 수 있습니다.

  4. 앱의 적절한 부분에서 사용자 인터페이스(UI)에 검색 기록을 표시합니다. 예를 들어, 최근 검색 기록을 ListView로 표시하는 방법은 다음과 같습니다:

    class SearchHistoryScreen extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return FutureBuilder<List<String>>(
          future: SearchHistoryManager().getSearchHistory(),
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              List<String> searchHistory = snapshot.data;
    
              return ListView.builder(
                itemCount: searchHistory.length,
                itemBuilder: (context, index) {
                  String query = searchHistory[index];
    
                  return ListTile(
                    title: Text(query),
                    onTap: () => onSearch(query),
                  );
                },
              );
            } else {
              return CircularProgressIndicator();
            }
          },
        );
      }
    }
    

    위의 예제는 SearchHistoryManagergetSearchHistory 함수를 호출하여 검색 기록을 가져오고, 가져온 기록을 ListView로 표시합니다.

이렇게하면 Flutter 앱에서 사용자의 최근 검색 기록을 저장하고 표시할 수 있습니다. shared_preferences는 기기의 로컬 저장소를 사용하므로 앱을 닫고 다시 열어도 검색 기록이 유지됩니다.