Pakete, Repositories und App-Kategorien suchen

Paketdetailsv0.3.0

shared_preferences_riverpod

Hilfe beim Verwenden von shared_preferences mit riverpod

AndroidiOSWebmacOSWindowsLinux
30-Tage-Downloads
269
Likes
29
Pub-Punkte
130

Paket installieren

flutter pub add shared_preferences_riverpod

Paketübersicht

Aus öffentlichen Paketdaten erstellte Orientierung.

Ein Flutter-Paket, das shared_preferences mit Riverpod integriert und eine einfache und reaktive Zugriffsmöglichkeit auf dauerhafte Schlüssel-Wert-Speicher ermöglicht. Es bietet einen sauberen, abhängigkeitsinjizierten Ansatz zum Lesen und Schreiben von Daten über App-Neustarts hinweg und nutzt die Zustandsverwaltungsfähigkeiten von Riverpod. Für Einfachheit und Kompatibilität mit modernen Flutter-Praktiken konzipiert, stellt es typensichere, asynchrone Operationen mit minimalem Boilerplate sicher. Ideal für die Speicherung von Benutzereinstellungen, Einstellungen oder geringen Mengen an persistierter Daten.

Anwendungsfälle

  • Speichern von Benutzereinstellungen
  • App-Einstellungen beibehalten
  • Anmeldestatus speichern
  • Themenauswahl verwalten
  • Lokalen Cache verwalten
  • Verfolgung des Onboarding-Fortschritts des Benutzers

Hauptmerkmale

  • Riverpod-Integration
  • Typsichere Speicherung
  • Asynchrone Operationen
  • Reaktive Aktualisierungen
  • Minimale Boilerplate
  • Plattformübergreifende Unterstützung

Geeignet für

  • Flutter-Apps mit Riverpod
  • Apps, die persistenten lokalen Speicher benötigen
  • Entwickler, die saubere Zustandsverwaltung suchen
  • Projekte, die leichte Persistenz erfordern
  • Teams, die moderne Flutter-Architektur befolgen

Hinweise

  • Nicht geeignet für große Datensätze
  • Riverpod-Setup erforderlich
  • Beschränkt auf einfache Schlüssel-Wert-Paare
  • Daten sind standardmäßig nicht verschlüsselt
  • Kein integrierter Migrations-Support
  • Am besten geeignet für kleine, häufig zugegriffene Daten

Original-README

Originaler README-Schnappschuss aus dem verknüpften Quell-Repository. Aktuelle Inhalte finden Sie im Repository.

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);
              },
            ),
          ]);
        }),
      ),
    );
  }
}

Kategorien

Abhängigkeiten

Abhängigkeiten 2 Einträge

Quell-Repository

Projekte, die dieses Paket verwenden

Noch keine Daten verfügbar.