現在作成しているアプリで、お気に入り機能をつけるところまでは来たのですが、それをshared_preferencesを利用してデータを保持する方法がなかなか掴めません。
具体的にはアプリを終了してもデータを保持したいと考えております。
(現状ですとアプリを再起動すると、お気に入りリストがリセットされてしまいますので、、)
ちなみに、providerを用いて、リストにお気に入り項目をリスト表示するところまではできているのですが、、
どなたか解決できる方はいらっしゃいませんでしょうか。
こちらで試したshared_preferencesの箇所はコメントアウトしております。
まだまだ初心者で初歩的なところかもしれませんが、どなたかわかる方がいらっしゃいましたら教えていただけると幸いです。
以下GitのURL
https://github.com/nannantown/flutter_lang
import 'dart:collection'; import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; enum EventLoadingStatus { NotLoaded, Loading, Loaded } class Course with ChangeNotifier { var id; var title; var type; var color; bool isFavorite; var name = []; final List<Course> _favorite = []; // final SharedPreferences prefs = await SharedPreferences.getInstance(); // prefs.setStringList(favoriteCourse, List<Course> _favorite); EventLoadingStatus _eventLoadingStatus = EventLoadingStatus.Loading; UnmodifiableListView<Course> get favorite => UnmodifiableListView(_favorite.where((course) => course.isFavorite)); UnmodifiableListView<Course> get beginnerList => UnmodifiableListView( _favorite.where((course) => course.type == "BEGINNER")); UnmodifiableListView<Course> get intermediateList => UnmodifiableListView( _favorite.where((course) => course.type == "INTERMEDIATE")); UnmodifiableListView<Course> get advanceList => UnmodifiableListView( _favorite.where((course) => course.type == "ADVANCED")); UnmodifiableListView<Course> get packsList => UnmodifiableListView(_favorite.where((course) => course.type == "PACKS")); numOfFavorite() => _favorite.length; // final SharedPreferences prefs = await SharedPreferences.getInstance(); // prefs.getStringList('my_favorite_list') ?? []; Course({ this.name, }) { addData(this.name); } addData(name) async { if (name != null) { for (final item in name) { Course course = Course(); course.id = item.id; course.title = item.title; course.type = item.type; course.isFavorite = false; _favorite.add(course); } } notifyListeners(); } void favoriteToggle() { isFavorite = !isFavorite; notifyListeners(); } void toggleFavorite(Course course) { final taskIndex = _favorite.indexOf(course); print("------------- course.isFavorite $taskIndex"); print(_favorite[taskIndex].id); _favorite[taskIndex].favoriteToggle(); notifyListeners(); } void favoriteToggleWithId(String id) { for (final item in _favorite) { if (item.id == id) { item.isFavorite = false; } } notifyListeners(); } // // Future<Void> addDataCourse(Course course) async { // _eventLoadingStatus = EventLoadingStatus.Loading; // notifyListeners(); // _favorite.add(course); // _eventLoadingStatus = EventLoadingStatus.Loaded; // notifyListeners(); // } // void addData(Course course) { // _favorite.add(course); // notifyListeners(); // } } class Contents { final String course; final String title; final String speakerJA; final String speakerJB; final String speakerEA; final String speakerEB; final String soundNameA; final String soundNameB; const Contents({ @required this.course, this.title, @required this.speakerJA, @required this.speakerJB, @required this.speakerEA, @required this.speakerEB, @required this.soundNameA, @required this.soundNameB, }); }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/05 22:38
2020/03/06 04:41 編集
2020/03/06 11:03 編集
2020/03/06 13:22
2020/03/07 13:34
2020/03/07 20:28
2020/03/10 20:01