[flutter] shared_preferences 를 사용하여 사용자가 좋아하는 음식 목록을 저장하는 방법은 무엇인가요?
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
class FoodPreferencesPage extends StatefulWidget {
@override
_FoodPreferencesPageState createState() => _FoodPreferencesPageState();
}
class _FoodPreferencesPageState extends State<FoodPreferencesPage> {
List<String> selectedFoodList = [];
SharedPreferences prefs;
@override
void initState() {
super.initState();
initPreferences();
}
void initPreferences() async {
prefs = await SharedPreferences.getInstance();
selectedFoodList = prefs.getStringList("foodList") ?? [];
setState(() {});
}
void toggleFoodSelection(String foodName) {
setState(() {
if (selectedFoodList.contains(foodName)) {
selectedFoodList.remove(foodName);
} else {
selectedFoodList.add(foodName);
}
savePreferences();
});
}
void savePreferences() async {
await prefs.setStringList("foodList", selectedFoodList);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("음식 선호도"),
),
body: ListView(
children: <Widget>[
FoodPreferenceItem(
foodName: "피자",
isSelected: selectedFoodList.contains("피자"),
onSelect: toggleFoodSelection,
),
FoodPreferenceItem(
foodName: "스테이크",
isSelected: selectedFoodList.contains("스테이크"),
onSelect: toggleFoodSelection,
),
FoodPreferenceItem(
foodName: "초밥",
isSelected: selectedFoodList.contains("초밥"),
onSelect: toggleFoodSelection,
),
FoodPreferenceItem(
foodName: "치킨",
isSelected: selectedFoodList.contains("치킨"),
onSelect: toggleFoodSelection,
),
FoodPreferenceItem(
foodName: "마라탕",
isSelected: selectedFoodList.contains("마라탕"),
onSelect: toggleFoodSelection,
),
],
),
);
}
}
class FoodPreferenceItem extends StatelessWidget {
final String foodName;
final bool isSelected;
final Function onSelect;
const FoodPreferenceItem({
Key key,
this.foodName,
this.isSelected,
this.onSelect,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return ListTile(
title: Text(foodName),
trailing: Checkbox(
value: isSelected,
onChanged: (newValue) {
onSelect(foodName);
},
),
);
}
}
이 예제에서는 Flutter의 shared_preferences 패키지를 사용하여 사용자가 좋아하는 음식 목록을 저장하는 방법을 보여줍니다. 사용자가 ListView에서 선택한 음식 목록은 SharedPreferences를 사용하여 저장 및 로드되며, 앱이 종료되어도 선택한 음식 목록이 유지됩니다.
먼저, shared_preferences 패키지를 통해 SharedPreferences 인스턴스를 초기화합니다. 그런 다음 initState() 메서드에서 SharedPreferences에서 사용자가 선택한 음식 목록을 로드합니다. 로드할 값이 없는 경우 기본값으로 빈 목록을 사용합니다.
사용자가 음식을 선택/해제할 때마다 toggleFoodSelection() 메서드가 호출됩니다. 이 메서드에서는 선택한 음식을 목록에 추가하거나 제거한 다음, 변경된 목록을 SharedPreferences에 저장합니다.
마지막으로, ListView에서 사용자에게 표시되는 음식 목록을 나타내는 FoodPreferenceItem 위젯을 만듭니다. 각 항목은 선택 상태를 나타내는 Checkbox 위젯과 함께 ListTile로 구성됩니다.
이 예제를 통해 flutter의 shared_preferences 패키지를 사용하여 사용자의 음식 선호도를 저장할 수 있는 방법을 확인할 수 있습니다.