設定の保存 〜 Preferences の利用方法

アプリケーションの各種設定などは、アプリケーションを終了しても消えたら困りますよね。 ちゃんとどこかに設定を保存しておき、次回のアプリケーション起動時に設定を戻す必要があります。

設定の基本的な保存場所を提供するのは iOS では UserDefaults クラス、Android では SharedPreferences です。

Flutter ではこの両方をラップする shared_preferences プラグインが利用でき、簡単に設定値を保存しておくことが可能です。

このページでは、次の画面のようにスイッチをおき、その ON/OFF の状況を保存し、アプリケーションを閉じても次回起動時に設定がまた読み込まれることを確認しましょう。

shared_preferences プラグインのインストールには、pubspec.yaml の dependencies に次のように追加します。 バージョン番号は最新のものを設定してください。(pub.dev を確認してください)

dependencies:
  shared_preferences: ^0.5.3+2

コード例は次の通りです。

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

void main() => runApp(
      MaterialApp(
        home: MyApp(),
      ),
    );

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _State();
  }
}

class _State extends State<MyApp> {
  var _switch1 = false;
  var _switch2 = false;
  var _switch3 = false;

  _saveBool(String key, bool value) async {
    var prefs = await SharedPreferences.getInstance();
    prefs.setBool(key, value);
  }

  _restoreValues() async {
    var prefs = await SharedPreferences.getInstance();
    setState(() {
      _switch1 = prefs.getBool('bool1') ?? false;
      _switch2 = prefs.getBool('bool2') ?? false;
      _switch3 = prefs.getBool('bool3') ?? false;
    });
  }

  @override
  void initState() {
    _restoreValues();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Pref Test'),
      ),
      body: Container(
        padding: EdgeInsets.all(20.0),
        child: Center(
          child: Column(
            children: <Widget>[
              SwitchListTile(
                value: _switch1,
                title: Text('Setting 1'),
                onChanged: (bool value) {
                  setState(() {
                    _switch1 = value;
                    _saveBool('bool1', value);
                  });
                },
              ),
              SwitchListTile(
                value: _switch2,
                title: Text('Setting 2'),
                onChanged: (bool value) {
                  setState(() {
                    _switch2 = value;
                    _saveBool('bool2', value);
                  });
                },
              ),
              SwitchListTile(
                value: _switch3,
                title: Text('Setting 3'),
                onChanged: (bool value) {
                  setState(() {
                    _switch3 = value;
                    _saveBool('bool3', value);
                  });
                },
              ),
            ],
          ),
        ),
      ),
    );
  }
}

SharedPreferences クラスの getInstance() メソッドで、 SharedPreferences を取得して、それの getBool メソッドで Bool 値を読み込み、setBool メソッドで Bool 値を設定しています。

設定値が存在しない場合は、getBool メソッドは null を返しますので、?? 演算子を用いてその場合に備え、デフォルト値を指定しています。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Flutter 入門