【Flutter】shared_preferences|端末(ローカルストレージ)にデータを保存

今回はSharedPreferencesの基本的な使い方を紹介します。

SharedPreferencesを使えばアプリを使用している端末のローカルストレージにデータ(キーと値のペア)を保存できます。

\ 世界最大級のオンライン学習サービス /

目次

事前準備|shared_preferencesの導入

flutter pub add shared_preferences
import 'package:shared_preferences/shared_preferences.dart';

shared_preferencesを導入します。

SharedPreferencesで保存できるデータ

  • int
  • double
  • bool
  • String
  • List<String>

SharedPreferencesで端末に保存できるデータの型は上記の5つのみです。

いずれの型のデータも同様に保存・更新・読み込み・削除できます。今回はint型のデータでSharedPreferencesの使い方を紹介していきます。

データの保存・更新

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

int型のデータの保存・更新にはsetIntを使用します。(String型の場合はsetString)

第一引数に保存するデータのキー、第二引数に保存する値を渡します。

データの読み込み

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

端末に保存されているint型のデータの読み込みにはgetIntを使用します。(String型の場合はgetString)

第一引数に保存しているデータのキーを渡します。

データの削除

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

保存しているデータを削除するにはremoveを使用します。

第一引数に削除するデータのキーを渡します。

サンプルコード

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

  Future _loadCounter() async {
    final prefs = await SharedPreferences.getInstance();
    setState(() {
      _counter = (prefs.getInt('counter') ?? 0);
    });
  }

  Future _incrementCounter() async {
    final prefs = await SharedPreferences.getInstance();
    setState(() {
      _counter = (prefs.getInt('counter') ?? 0) + 1;
      prefs.setInt('counter', _counter);
    });
  }

  Future _deleteCounter() async {
    final prefs = await SharedPreferences.getInstance();
    setState(() {
      prefs.remove('counter');
      _loadCounter();
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('FlutterZero'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(
                '$_counter',
                style: const TextStyle(fontSize: 40),
              ),
              ElevatedButton(
                onPressed: _deleteCounter,
                child: const Text('Reset Counter'),
              ),
            ],
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: _incrementCounter,
          child: const Icon(Icons.add),
        ),
      ),
    );
  }
}

一緒に読みたい

参考

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