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