Buscar pacotes, repositórios e categorias de apps

Detalhes do pacotev0.3.0

shared_preferences_riverpod

ajuda a usar shared_preferences com riverpod

AndroidiOSWebmacOSWindowsLinux
Downloads em 30 dias
269
Curtidas
29
Pontos Pub
130

Instalar pacote

flutter pub add shared_preferences_riverpod

Visão geral do pacote

Orientação gerada a partir de informações públicas. Apenas para referência.

Um pacote Flutter que integra o shared_preferences com o Riverpod, permitindo acesso fácil e reativo ao armazenamento persistente de pares chave-valor. Ele oferece uma abordagem limpa com injeção de dependência para leitura e escrita de dados entre reinícios do aplicativo, aproveitando as capacidades de gerenciamento de estado do Riverpod. Projetado para simplicidade e compatibilidade com práticas modernas do Flutter, garante operações assíncronas seguras por tipo com mínimo código repetitivo. Ideal para armazenar preferências do usuário, configurações ou pequenas quantidades de dados persistentes.

Casos de uso

  • Armazenando preferências do usuário
  • Persistindo configurações do aplicativo
  • Salvar status de login
  • Gerenciamento da seleção de tema
  • Gerenciando cache local
  • Rastrear o progresso de onboarding do usuário

Principais recursos

  • Integração com Riverpod
  • Armazenamento seguro por tipo
  • Operações assíncronas
  • Atualizações reativas
  • Mínimo boilerplate
  • Suporte multiplataforma

Indicado para

  • Aplicativos Flutter usando Riverpod
  • Aplicativos que precisam de armazenamento local persistente
  • Desenvolvedores procurando gerenciamento de estado limpo
  • Projetos que exigem persistência leve
  • Equipes seguindo a arquitetura moderna do Flutter

Considerações

  • Não adequado para grandes conjuntos de dados
  • Requer configuração do Riverpod
  • Limitado a pares simples de chave-valor
  • Dados não criptografados por padrão
  • Sem suporte de migração embutido
  • Melhor para dados pequenos e frequentemente acessados

README original

Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.

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

Categorias

Dependências

Lista de dependências 2 itens

Repositório-fonte

Projetos que usam este pacote

Ainda não há dados.