shared_preferencesには、List<int>型はないため、List<int>を文字列リストとして保存し、呼び出す際にList<int>に変換して読み込みます。
このページではそのやり方を紹介します。
目次
List<int>の保存方法
import 'package:shared_preferences/shared_preferences.dart';
// SharedPreferencesにList<int>を保存する関数
Future<void> saveListToSharedPreferences(List<int> list) async {
final prefs = await SharedPreferences.getInstance();
// List<int>をList<String>に変換して保存
prefs.setStringList('myList', list.map((e) => e.toString()).toList());
}
// SharedPreferencesからList<int>を読み込む関数
Future<List<int>> loadListFromSharedPreferences() async {
final prefs = await SharedPreferences.getInstance();
// 保存されたList<String>を取得
final stringList = prefs.getStringList('myList');
// List<String>をList<int>に変換
return stringList?.map((e) => int.parse(e)).toList() ?? [];
}
// 使用例
void main() async {
// List<int>を保存
await saveListToSharedPreferences([1, 2, 3, 4, 5]);
// List<int>を読み込み
List<int> loadedList = await loadListFromSharedPreferences();
print(loadedList); // Output: [1, 2, 3, 4, 5]
}解説
1. 保存処理
prefs.setStringList('myList', myList.map((e) => e.toString()).toList());処理の流れ
myList.map((e) => e.toString()):myListはList<int>型(例:[1, 2, 3, 4, 5])。.map()は、リストの各要素に指定した処理を適用し、変換した新しいリストを作成します。(e) => e.toString()は、myListの各要素(e)を文字列に変換する関数。- 例えば、
1が"1"に、2が"2"に変わります。
- 例えば、
.toList():.map()が返すのは「イテラブル(反復可能なオブジェクト)」なので、.toList()を使って明示的にリスト形式に変換します。- 結果は
["1", "2", "3", "4", "5"]という文字列リスト。
prefs.setStringList('myList', ...):SharedPreferencesのsetStringListメソッドを使って、文字列リスト(["1", "2", "3", "4", "5"])を保存します。'myList'は保存データを識別するためのキー名。
読み込み処理
stringList?.map((e) => int.parse(e)).toList() ?? [];処理の流れ
stringList:- まず、
prefs.getStringList('myList')で、保存された文字列リスト(例:["1", "2", "3", "4", "5"])を取得します。 - この処理の結果が
stringListに代入されます。 getStringListが返す値は、データが見つからない場合nullになる可能性があります。
- まず、
stringList?.map((e) => int.parse(e)):stringList?:stringListがnullの場合、後続の処理(.map(...))をスキップしてnullを返します。- これにより、アプリがクラッシュするのを防ぎます。
.map((e) => int.parse(e)):stringListの各要素(文字列)を整数に変換します。- 例えば、
"1"が1に、"2"が2になります。
.toList():.map()の結果をリスト形式に変換します。- 結果は、整数リスト(例:
[1, 2, 3, 4, 5])。
?? []:stringList?.map(...).toList()がnullの場合、代わりに空リスト([])を返します。- これもアプリのクラッシュを防ぐ安全策です。


Comment