搜尋套件、儲存庫與 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 項

原始碼儲存庫

使用此套件的專案

暫無相關資料。