👋

[Flutter] SharedPreferences でデータを保存

に公開

はじめに

今回はDBを使わずに永続的に情報を入力する方法である、Sharedpreferences についてまとめてみようと思います。

使い方

導入方法を簡単です。
まずは以下のコマンドをターミナルで打ちます。

flutter pub add shared_preferences

これで準備は整ったので実際にコードを書いていきます。
まずは以下のコードを追加することで使えるようになります。

import 'package:shared_preferences/shared_preferences.dart';

データを保存する

データを保存する場合のコードに例を以下に示します。

final prefs = await SharedPreferences.getInstance();
await prefs.setString(SharedPreferencesKeys.MOVIETITLE.key, 'Your Name');

このような形を利用して保存できるデータはほかにもあります。
key と value を使うことでさまざまな情報を保存することができます。
setBool(String key, bool value)
setInt(String key, int value)
setDouble(String key, double value)
setString(String key, String value)
setStringList(String key, List<String> value)

データを取得する

保存しているデータを取得する際のコードは以下の通りです。

final prefs = await SharedPreferences.getInstance();
String? movietitle = prefs.getString(SharedPreferencesKeys.MOVIETITLE.key);
print(movietitle);

データを削除する

  • データを指定して削除する場合
await prefs.remove(SharedPreferencesKeys.MOVIETITLE.key);`
  • データを全削除する場合
await prefs.clear();

ダークモード

ダークモードの設定をユーザー自身がアプリ内でして、次回以降アプリを開いたときにも設定を引き継ぎたい場合にもSharedpreferences は有効な手段です。
以下はchatGPTを用いて生成してもらったコード例です。
データを保存する際に bool で保存して、アプリを開いた際にその情報を取得します。

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final prefs = await SharedPreferences.getInstance();
  final isDark = prefs.getBool('isDarkMode') ?? false;
  runApp(MyApp(isDarkMode: isDark));
}

class MyApp extends StatefulWidget {
  final bool isDarkMode;
  const MyApp({super.key, required this.isDarkMode});

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

class _MyAppState extends State<MyApp> {
  late bool _isDarkMode;

  @override
  void initState() {
    super.initState();
    _isDarkMode = widget.isDarkMode;
  }

  Future<void> _toggleDarkMode(bool value) async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.setBool('isDarkMode', value);
    setState(() {
      _isDarkMode = value;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      themeMode: _isDarkMode ? ThemeMode.dark : ThemeMode.light,
      theme: ThemeData.light(),
      darkTheme: ThemeData.dark(),
      home: Scaffold(
        appBar: AppBar(title: Text("ダークモード設定")),
        body: Center(
          child: SwitchListTile(
            title: Text("ダークモード"),
            value: _isDarkMode,
            onChanged: _toggleDarkMode,
          ),
        ),
      ),
    );
  }
}

メモアプリ

調べる中で Sharedpreferences をつかって簡単なメモアプリをつくっている人の記事も見つけました。
良かったら以下を読んでみてください。

https://qiita.com/shake12/items/5d5e84c323b4560e8e60

最後に

今回はデータベースを使わずにデータを保存する方法について書きました。
Sharedpreferences は名前こそ知っているもののどういうものなのか、何に便利なのかを知らなかったのでとてもいい機会になりました。
時間が限られるハッカソン等では、データベースをわざわざ用いなくてもデータの保存ができるため、取り入れやすいものだと感じました。

ぽちぽちのつどい

Discussion