Udemyセール開催中! 対象コースが1,220円から

【Flutter】shared_preferencesの使い方|データをローカル保存する

今回は外部パッケージ「shared_preferences」の使い方について紹介します。

shared_preferencesを使えば「int」「double」「bool」「String」「List<String>」型のデータをローカル保存して管理できます!

目次

「shared_preferences」の導入

$ flutter pub add shared_preferences
$ flutter pub get

pubspec.yamlにパッケージを追加・更新

import 'package:shared_preferences/shared_preferences.dart';

dartファイルにコピペ

データをローカル保存

final prefs = await SharedPreferences.getInstance();
prefs.setInt('counter', _counter); //_counterは「int型」
  • setInt:int型の値をキーと保存
  • setDouble:double型の値をキーと保存
  • setBool:bool型の値をキーと保存
  • setString:String型の値をキーと保存
  • setStringList:List<String>型の値をキーと保存

SharedPreferencesをインスタンス化したら、setメソッドを使ってデータをキーと一緒に保存します。

データの読み込み

final prefs = await SharedPreferences.getInstance();
final counter = prefs.getInt('counter') ?? 0;
  • setInt:保存したデータint型の値をキーと保存
  • setDouble:double型の値をキーと保存
  • setBool:bool型の値をキーと保存
  • setString:String型の値をキーと保存
  • setStringList:List<String>型の値をキーと保存

SharedPreferencesをインスタンス化したら、getメソッドを使ってsetメソッドで保存したデータをキーを使用して取得できます。

指定したキーの値がNullの場合の返り値を「??」の後で指定します。

データを削除

final prefs = await SharedPreferences.getInstance();
prefs.remove('counter');

SharedPreferencesをインスタンス化したら、setメソッドで保存したデータのキーをremoveメソッドで使用して保存してあるデータを削除できます。

サンプルコード

initStateでgetIntメソッドが実行され、保存されたカウンターの値が読み込まれます。

FloatingActionButtonがクリックされるとsetIntメソッドが実行され、カウンターが1増えたデータが保存された後読み込まれます。

削除ボタンがクリックされるとremoveメソッドが実行され、getメソッドでカウンターの値が読み込まれます。(「??」の後で指定した「0」が読み込まれる)

//ソース
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  int _counter = 0;

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

  //保存
  Future<void> _setData() async {
    final prefs = await SharedPreferences.getInstance();
    _counter = (prefs.getInt('counter') ?? 0) + 1;
    setState(() {
      prefs.setInt('counter', _counter);
    });
  }

  //読み込み
  Future<void> _getData() async {
    final prefs = await SharedPreferences.getInstance();
    setState(() {
      _counter = prefs.getInt('counter') ?? 0;
    });
  }

  //削除
  Future<void> _removeData() async {
    final prefs = await SharedPreferences.getInstance();
    setState(() {
      prefs.remove('counter');
      _getData();
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(
                '$_counter',
                style: TextStyle(
                  fontSize: 30,
                ),
              ),
              ElevatedButton(
                onPressed: () {
                  _removeData();
                },
                child: Text('削除'),
              ),
            ],
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () {
            _setData();
          },
          child: Icon(Icons.add),
        ),
      ),
    );
  }
}

以上です。

参考

  • URLをコピーしました!
目次
閉じる