パッケージ、リポジトリ、アプリカテゴリを検索

パッケージ詳細v0.3.0

shared_preferences_riverpod

riverpod と shared_preferences を使う方法のヘルプ

AndroidiOSWebmacOSWindowsLinux
30日間ダウンロード
269
いいね数
29
Pub ポイント
130

パッケージをインストール

flutter pub add shared_preferences_riverpod

パッケージ概要

公開情報に基づく選定ガイドです。参考としてご利用ください。

shared_preferences を Riverpod と統合する Flutter パッケージで、永続的なキー値ストレージへの簡単かつリアクティブなアクセスを可能にします。アプリ再起動後のデータの読み書きに、明確で依存性注入されたアプローチを提供し、Riverpod の状態管理機能を活用しています。現代的な Flutter の実践と互換性があり、最小限のボイラープレートで型安全な非同期操作を保証します。ユーザーの設定や小規模な永続データの保存に最適です。

用途

  • ユーザーの設定を保存する
  • アプリ設定の永続化
  • ログイン状態の保存
  • テーマ選択の処理
  • ローカルキャッシュの管理
  • ユーザーのオンボーディング進捗の追跡

主な機能

  • Riverpod インテグレーション
  • 型安全なストレージ
  • 非同期操作
  • リアクティブな更新
  • 最小限のボイラープレート
  • クロスプラットフォーム対応

適している対象

  • Riverpod を使用する Flutter アプリ
  • 恒久的なローカルストレージを必要とするアプリ
  • クリーンな状態管理を求める開発者
  • 軽量な永続性を必要とするプロジェクト
  • 現代のFlutterアーキテクチャに従うチーム

注意事項

  • 大規模なデータセットには適していません
  • Riverpod の設定が必要です
  • シンプルなキーと値のペアに限定
  • デフォルトではデータは暗号化されていません
  • 組み込みのマイグレーションサポートなし
  • 小規模で頻繁にアクセスされるデータに最適

元の README

関連するソースリポジトリの README 原文のスナップショットです。最新の内容はリポジトリをご覧ください。

SharedPreferences_riverpod

Make it easier to access SharePreferences using Riverpod's Provider.

  • https://pub.dev/packages/shared_preferences
  • https://pub.dev/packages/riverpod

Usage

Primitive type or List<String>
  • Create Provider with createPrefProvider and generics parameter.
final booPrefProvider = createPrefProvider<bool>(
  prefs: (_) => prefs,
  prefKey: "boolValue",
  defaultValue: false,
);
  • Refer values with ref.watch(provider).
  • Update value with await ref.read(provider).update(newValue);.
Consumer(builder: (context, ref, _) {
  return CheckboxListTile(
    title: Text('checkbox'),
    value: ref.watch(booPrefProvider),
    onChanged: (v) async {
        if (v != null) await ref.read(booPrefProvider.notifier).update(v);
    },
  );
}
Other types
  • Create Provider with createPrefProvider and map functions.
enum EnumValues {
  foo,
  bar,
}

final enumPrefProvider = createMapPrefProvider<EnumValues>(
  prefs: (_) => prefs,
  prefKey: "enumValue",
  mapFrom: (v) => EnumValues.values
      .firstWhere((e) => e.toString() == v, orElse: () => EnumValues.foo),
  mapTo: (v) => v.toString(),
);

  • Refer values with ref.watch(provider).
  • Update value with await ref.read(provider).update(newValue);.
Consumer(builder: (context, ref, _) {
  return RadioListTile(
    title: Text('value1'),
    value: EnumValues.foo,
    groupValue: ref.watch(enumPrefProvider),
    onChanged: (EnumValues? v) async {
      if (v != null) await ref.read(enumPrefProvider.notifier).update(v);
    },
  );
}
Example

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

late SharedPreferences prefs;

final booPrefProvider = createPrefProvider<bool>(
  prefs: (_) => prefs,
  prefKey: "boolValue",
  defaultValue: false,
);

enum EnumValues {
  foo,
  bar,
}

final enumPrefProvider = createMapPrefProvider<EnumValues>(
  prefs: (_) => prefs,
  prefKey: "enumValue",
  mapFrom: (v) => EnumValues.values
      .firstWhere((e) => e.toString() == v, orElse: () => EnumValues.foo),
  mapTo: (v) => v.toString(),
);

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  prefs = await SharedPreferences.getInstance();

  runApp(ProviderScope(child: MyApp()));
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Sample',
      home: Scaffold(
        appBar: AppBar(),
        body: Consumer(builder: (context, ref, _) {
          return ListView(children: [
            CheckboxListTile(
              title: Text('BoolPrefNotifier ${ref.watch(booPrefProvider)}'),
              value: ref.watch(booPrefProvider),
              onChanged: (v) async {
                if (v != null)
                  await ref.read(booPrefProvider.notifier).update(v);
              },
            ),
            RadioListTile(
              title: Text('${EnumValues.foo.toString()}'),
              value: EnumValues.foo,
              groupValue: ref.watch(enumPrefProvider),
              onChanged: (EnumValues? v) async {
                if (v != null)
                  await ref.read(enumPrefProvider.notifier).update(v);
              },
            ),
            RadioListTile(
              title: Text('${EnumValues.bar.toString()}'),
              value: EnumValues.bar,
              groupValue: ref.watch(enumPrefProvider),
              onChanged: (EnumValues? v) async {
                if (v != null)
                  await ref.read(enumPrefProvider.notifier).update(v);
              },
            ),
          ]);
        }),
      ),
    );
  }
}

カテゴリー

依存関係

依存関係一覧 2 件

ソースリポジトリ

このパッケージを使用しているプロジェクト

データはまだありません。