【Flutter】ローカルにデータを保存する

プログラミング

はじめに

Flutterアプリ開発時にアプリ全体で共通の値を保持しておきたいことはないでしょうか?
今回はshared_preferencesパッケージを使ってローカルにデータを保存する方法をご紹介します。

 

パッケージ導入

今回使用するshared_preferencesのバージョンは下記です。
最新版は公式サイトのVersionsページからご確認ください。

pubspec.yamlに記載してpub getします。

dependencies:
  shared_preferences: ^2.0.13

準備

SharedPreferencesパッケージを使う準備をします。

パッケージをインポートします。

import 'package:shared_preferences/shared_preferences.dart';

続いて、SharedPreferencesインスタンスを取得します。
取得したインスタンスに対して値をsetしたりgetしたりすることで値を保存、取得することができます。
インスタンスはFuture型で返却されるため、awaitで同期をとります。

var prefs = await SharedPreferences.getInstance(); // インスタンスを取得

データを保存する

データを保存するにはSharedPreferencesインスタンスに対してsetメソッドを実行します。
保存したいデータ型に応じてsetString()setInt()などの種類があります。

var prefs = await SharedPreferences.getInstance(); // インスタンスを取得
// Key-Value形式で保存していく。
await prefs.setString('sample1', 'value1');
await prefs.setBool('isValid', true);
await prefs.setDouble('pi', 3.14);
await prefs.setInt('maxValue', 100);
  • set00()メソッド
    SharedPreferencesインスタンスにデータを保存するメソッドです。
    データはKey-Value形式で保存されるため、第一引数にKeyとなる文字列を指定します。

データを参照する

保存したデータを参照するにはSharedPreferencesインスタンスに対してgetメソッドを実行します。
参照したいデータ型に応じてgetString()getInt()などの種類があります。

var prefs = await SharedPreferences.getInstance(); // インスタンスを取得
// Key-Value形式で保存していく。
await prefs.getString('sample1');
await prefs.getBool('isValid');
await prefs.getDouble('pi');
await prefs.getInt('maxValue');
  • get00()メソッド
    SharedPreferencesインスタンスからデータを参照するメソッドです。
    引数にはsetメソッドで保存する際に指定したKeyとなる文字列を指定します。

実行してみる

これまでご紹介したメソッドを実際に試してみます。

サンプルコードを実行してみましょう。下記を新規dartファイルとして追加してmain.dartから呼び出してください。

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart'; //

class SharedSample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        TextButton(
            // 保存ボタン
            onPressed: () async {
              var prefs = await SharedPreferences.getInstance(); // インスタンスを取得
              // Key-Value形式で保存していく。
              await prefs.setString('sample1', 'value1');
              await prefs.setBool('isValid', true);
              await prefs.setDouble('pi', 3.14);
              await prefs.setInt('maxValue', 100);
              print('######保存完了######');
            },
            child: Text('保存する')),
        TextButton(
            onPressed: () async {
              var prefs = await SharedPreferences.getInstance();
              print('######取出開始######');
              print(await prefs.getString('sample1'));
              print(await prefs.getBool('isValid'));
              print(await prefs.getDouble('pi'));
              print(await prefs.getInt('maxValue'));
              print('######取出完了######');
            },
            child: Text('取り出す'))
      ],
    );
  }
}

ボタンを二つ並べていて、上が保存、下がデータを取り出すボタンになっています。
取り出したデータはコンソールに出力されているのがわかるかと思います。

データはいつ消える?

Sharedpreferencesで保存したデータはアプリに紐づいているため、アプリが端末から削除された時点で一緒に消えます。
明示的に削除したい場合はremove(Key)メソッドで消すことができます。

おわりに

今回は端末のローカルにデータを保存できるSharedPreferencesについてご紹介しました。
アプリ内で持っておきたい設定値を保存しておくケースなどで活用できるかと思います。

アプリが消えても残しておきたいデータについては別途firebase等のクラウド上に保存するのが良いでしょう。

タイトルとURLをコピーしました