패키지, 저장소 및 앱 카테고리 검색

패키지 상세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 개

소스 저장소

이 패키지를 사용하는 프로젝트

아직 데이터가 없습니다.