Storing key-value data on disk:

If we have a relatively small collection of key-values that we’d like to save, we can use the shared_preferences plugin.

Normally we would have to write native platform integrations for storing data on both platforms. Fortunately, the shared_preferences plugin can be used to persist key-value data on disk. The shared preferences plugin wraps NSUserDefaults on iOS and SharedPreferences on Android, providing a persistent store for simple data.

Using Shared Preferences In Flutter App:

  • Add the dependency
  • Save Data
  • Read Data
  • Remove Data

Adding the dependency:

Add this to your package’s pubspec.yaml file:

shared_preferences: ^0.4.3

Save data:

To save data, we can use the setter methods provided by the SharedPreferences class. Setter methods are available for various st methods types / primitive types, such as setIntsetBool, and setString.

Setter methods do two things: First, it synchronously update the key-value pair in-memory. Then, save/persist the data to disk.

// obtain shared preferences
final prefs = await SharedPreferences.getInstance();

// set value
prefs.setInt('counter', counter);

Read data:

To read data from the disk, we can use the appropriate getter method provided by the SharedPreferences class. For each setter there is a corresponding getter. For example, we can use the getIntgetBool, and getString methods.

final prefs = await SharedPreferences.getInstance();

// Try reading data from the counter key. If it does not exist, return 0.
final counter = prefs.getInt('counter') ?? 0;

Remove data:

To delete data, we can use the remove method provided bySharedPreferences class.

final prefs = await SharedPreferences.getInstance();


Supported types:

We know that  it is easy and convenient to use key-value storage, But it has limitations:

  • Only primitive types can be used: intdoubleboolstring and stringList
  • It’s not designed to store a lot of data.


Testing support:

It can be a good idea to test code that persists data using shared_preferences. To do so, we’ll need to mock out the MethodChannel used by the shared_preferences library.

const MethodChannel('')
.setMockMethodCallHandler((MethodCall methodCall) async {
if (methodCall.method == 'getAll') {
return {}; // set initial values here if desired
return null;

Below is the Complete example code :


import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
// This widget is the root of our application.
Widget build(BuildContext context) {
return MaterialApp(
title: 'Shared preferences demo',
theme: ThemeData(
home: MyHomePage(title: 'Shared preferences demo'),

class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;

_MyHomePageState createState() => _MyHomePageState();

class _MyHomePageState extends State {
int _counter = 0;

void initState() {

//Loading counter value on start
_loadCounter() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
_counter = (prefs.getInt('counter') ?? 0);

//Incrementing counter after click
_incrementCounter() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
_counter = (prefs.getInt('counter') ?? 0) + 1;
prefs.setInt('counter', _counter);

Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
body: Center(
child: Column(
children: [
'You have pushed the button this many times:',
style: Theme.of(context).textTheme.display1,
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
), // This trailing comma makes auto-formatting nicer for build methods.


Congratulations You Have Learned Using Sharedpreferences Key Value Paires In Flutter

If It Is Useful Share It With Your Friends….!!!

If  You Have Any Query Please make A Comment….!!!

Leave a Reply


Myles [CPS] IN
Shein WW