搜索插件、代码仓与 APP 分类

插件详情v0.3.0

shared_preferences_riverpod

帮助使用 shared_preferences 与 riverpod

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 项

源码仓库

使用此插件的项目

暂无相关数据。