今回は外部パッケージ「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ファイルにコピペ
あわせて読みたい


【Flutter】外部パッケージの導入方法|pub.devドキュメントの見方
今回は「外部パッケージの導入方法」と、導入したパッケージの「ドキュメントの見方」について紹介します。 【外部パッケージのインストール方法】 「pub.dev」から導入...
データをローカル保存
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),
),
),
);
}
}
以上です。