MENU

【Flutter】List<int>の値をSharedPreferencesに保存する方法

記事内に商品プロモーションが含まれる場合があります

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());

処理の流れ

  1. myList.map((e) => e.toString()):
    • myListList<int>型(例: [1, 2, 3, 4, 5])。
    • .map()は、リストの各要素に指定した処理を適用し、変換した新しいリストを作成します。
    • (e) => e.toString()は、myListの各要素(e)を文字列に変換する関数。
      • 例えば、1"1"に、2"2"に変わります。
  2. .toList():
    • .map()が返すのは「イテラブル(反復可能なオブジェクト)」なので、.toList()を使って明示的にリスト形式に変換します。
    • 結果は["1", "2", "3", "4", "5"]という文字列リスト。
  3. prefs.setStringList('myList', ...):
    • SharedPreferencessetStringListメソッドを使って、文字列リスト(["1", "2", "3", "4", "5"])を保存します。
    • 'myList'は保存データを識別するためのキー名。

読み込み処理

stringList?.map((e) => int.parse(e)).toList() ?? [];

処理の流れ

  1. stringList:
    • まず、prefs.getStringList('myList')で、保存された文字列リスト(例: ["1", "2", "3", "4", "5"])を取得します。
    • この処理の結果がstringListに代入されます。
    • getStringListが返す値は、データが見つからない場合nullになる可能性があります。
  2. stringList?.map((e) => int.parse(e)):
    • stringList?:
      • stringListnullの場合、後続の処理(.map(...))をスキップしてnullを返します。
      • これにより、アプリがクラッシュするのを防ぎます。
    • .map((e) => int.parse(e)):
      • stringListの各要素(文字列)を整数に変換します。
      • 例えば、"1"1に、"2"2になります。
  3. .toList():
    • .map()の結果をリスト形式に変換します。
    • 結果は、整数リスト(例: [1, 2, 3, 4, 5])。
  4. ?? []:
    • stringList?.map(...).toList()nullの場合、代わりに空リスト([])を返します。
    • これもアプリのクラッシュを防ぐ安全策です。
Share

Comment

コメントする

目次