0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Flutter shared_preferencesで保存し取り出す

Posted at

Providerは親のWidgetからProvider<T>.value()でデータを飛ばして、子Widget内でProvider.of<T>()を使用しキャッチするFlutterの状態を管理するパッケージとは違い、
Shared preferences plugin
prefs.setXXXXX('key', 保存する値);で保存したものをprefs.getXXXXX('key')で取り出すことができます。
XXXXXにはそれぞれ型があり、

XXXXXに入る型 SET(保存) GET(取得)
int型 setInt('i', 1) getInt('i')
bool型 setBool('b', true) getBool('b')
double型 setDouble('d', 0.5) getDouble('d')
string型 setString('s', 'abc') getString('s')
list型  setStringList('l', ['abc', 'efg', 'hij']) getStringList('l')

を適用。使用例として、

import 'dart:async';

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:shared_preferences/shared_preferences.dart';

// getInstance()はFuture型を返すのでasync awaitさせる
Future<double> getDoubleState() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  double isDouble = await prefs.getDouble("double") ?? 0.0;
  print(isDouble);
  return isDouble;
}

Future<bool> getBoolState() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  bool isBool = await prefs.getBool("bool") ?? true;
  print(isBool);
  return isBool;
}

Future<double> saveDoubleState(double value) async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setDouble("double", value);
  print('saved $value');
  return value;
}

Future<bool> saveBoolState(bool value) async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setBool("bool", value);
  print('saved $value');
  return prefs.setBool("bool", value);
}

class BoolAndDouble extends HookConsumerWidget {
  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final snapShotdouble = useMemoized(() => getDoubleState());
    var d = useFuture(snapShotDouble);     
    final doubleValue = useState<double>(0.1);

    useEffect(() {
      if (d.hasData) {
        doubleValue.value = d.data!;
      }
      return null;
    }, [d.data]);

    final snapShotBool = useMemoized(() => getBoolState());
    var b = useFuture(snapShotBool);
    final boolValue = useState<bool>(true);

    useEffect(() {
      if (b.hasData) {
        boolValue.value = b.data!;
      }
      return null;
    }, [b.data]);

で、useStateのvalueを渡します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?