Temel Flutter SharedPreferences Eğitimi

Çoğu zaman, uygulamada belirli küçük verileri kalıcı olarak saklamanın gerekli olacağı yerler olacaktır. SharedPreferences paketini kullanmak, bunu yapmanın mükemmel bir yoludur!

sharedprefrences

Flutter’da SharedPreferences ​​Nasıl Kullanılır?

#1 Projemizin ana klasöründe bulunan pubspec.yaml dosyasına shared_preferences eklentisini eklemek gerekmektedir.

dependencies:
  shared_preferences: ^2.0.13 //pub.dev/packages/shared_preferences yeni sürümü çıkmış olabilir.

#2 Projede SharedPreferences kullanmak için paket import edilmelidir.

import 'package:shared_preferences/shared_preferences.dart';

Eklentinin kurulumu bu kadar. Şimdi SharedPreferences ile verilerin nasıl kaydedileceğini, okunacağını ve silineceğini göreceğiz.

 

Flutter’da SharedPreferences ile Veri Kaydetme İşlemi

Flutter’da SharedPreferences’a verileri kaydetmek için SharedPreferences sınıfından bir nesne declare edilmelidir. Nesneyi  başlattıktan sonra verileri kaydetmek için setter metotlarını çağırmamız gerekmektedir. Sharedpreferences kullanarak int , string , double , bool tipinde değerler kaydedilmektedir. Dolayısıyla, bu veri türlerini kaydetmek için her biri için setter metodu bulunmaktadır. Her setter metoduna bir anahtar(key) ve bir değer(value) sağlamalıyız.

  • setString()
  • setInt()
  • setDouble()
  • setBool()

İlk olarak, nesneyi declare ederek işlemlere başlıyoruz.

SharedPreferences prefs;

Daha sonra nesneyi initialize ediyoruz. (Başlatıyoruz)

getSharedPreferences () async
{
    prefs = await SharedPreferences.getInstance();
}

Şimdi setter metotlarını çağırmak ve verileri kaydetmek için yukarıdaki nesneyi kullanacağız.

SharedPreferences’ta String Değerini Kaydetme

String değeri kaydetmek için setString() metodunu çağırın ve anahtarı ve değeri ayarlayın.

saveStringValue () async
  {
    prefs = await SharedPreferences.getInstance();
    prefs.setString("username", "imonursahin");
  }

Yukarıdaki kod, anahtar => username, değer => imonursahin ekleyecektir.

SharedPreferences’ta Int Değerini Kaydetme

Int değeri kaydetmek için setInt() metodunu çağırın ve anahtarı ve değeri ayarlayın.

saveIntValue () async
  {
    prefs = await SharedPreferences.getInstance();
    prefs.setInt("status", 2);
  }

Yukarıdaki kod, anahtar => status, değer => 2 ekleyecektir.

SharedPreferences’ta DoubleDeğer Kaydetme

Double değeri kaydetmek için setDouble() metodunu çağırın ve anahtarı ve değeri ayarlayın.

saveDoubleValue () async
  {
    prefs = await SharedPreferences.getInstance();
    prefs.setDouble("price", 9.99);
  }

Yukarıdaki kod, anahtar => price, değer => 9.99 ekleyecektir.

Boole Değerini SharedPreferences’ta Kaydetme

Bool değeri kaydetmek için setBool() metodunu çağırın ve anahtarı ve değeri ayarlayın.

saveBoolValue () async
  {
    prefs = await SharedPreferences.getInstance();
    prefs.setBool("isVerify", false);
  }

Yukarıdaki kod, anahtar => isVerify, değer => false ekleyecektir.

 

Flutter’da SharedPreferences’tan Nasıl Veri Okunur?

Flutter’da SharedPreferencesdan verileri  almak veya okumak için, SharedPreferences sınıfının getter (alıcı) metotları kullanılmaktadır. Getter metoduna sadece anahtarı sağlamalıyız. Metot, ilgili anahtarın değerini return eder.

  • getSring()
  • getInt()
  • getDouble()
  • getBool()

SharedPreferences veri alırken veya okurken değer olarak null alınabilmektedir. Sağlanan anahtar için değer mevcut değilse veya yanlış bir anahtar sağlanırsa, null değerini return eder ve hata verecektir. Bu sorunu ‘if null ‘ ( ?? ) kullanarak çözülebilmektedir.

prefs = await SharedPreferences.getInstance();
int users = prefs.getInt("count") ?? 0;

prefs.getInt(“count”) boş olmayan bir değer döndürürse, users değişkenine atanır. Değer olarak null döndürürse, users değişkenine ‘ 0 ‘ atanır. Prefs.getInt(“count”), ‘count’ anahtarı için herhangi bir değer bulunmazsa veya anahtarın kendisi yoksa null değerini return eder.

SharedPreferences’tan String Değeri Alma veya Okuma

String değeri okumak için getString() metodunu çağırın ve anahtarı ayarlayın.

retrieveStringValue () async
 {
   prefs = await SharedPreferences.getInstance();
   String value = prefs.getString("username");
   print(value);
 }

Çıktı: imonursahin

SharedPreferences’tan Int Değeri Alma veya Okuma

Int değeri okumak için getInt() metodunu çağırın ve anahtarı ayarlayın.

retrieveIntValue () async
  {
    prefs = await SharedPreferences.getInstance();
    int value = prefs.getInt("status");
    print(value);
  }

Çıktı: 2

SharedPreferences’tan Double Değer Alma veya Okuma

Double değeri okumak için getDouble() metodunu çağırın ve anahtarı ayarlayın.

retrieveDoubleValue () async
  {
    prefs = await SharedPreferences.getInstance();
    double value = prefs.getDouble("price");
    print(value);
  }

Çıktı: 9.99

SharedPreferences’tan Bool Değeri Alma veya Okuma

Bool değeri okumak için getBool() metodunu çağırın ve anahtarı ayarlayın.

retrieveBooleanValue () async
  {
    prefs = await SharedPreferences.getInstance();
    bool value = prefs.getBool("isVerify");
    print(value);
  }

Çıktı: false

 

Flutter’da SharedPreferences’tan Nasıl Veri Silinir?

Flutter’da SharedPreferencesdaki verileri silmek veya kaldırmak için remove() metodu kullanılmaktadır. Kaydı silmek için sadece anahtarı sağlamak gerekmektedir.

deleteValue () async
  {
    prefs = await SharedPreferences.getInstance();
    prefs.remove("username");
  }

SharedPreferences’ta Anahtarın Var Olup Olmadığı Nasıl Kontrol Edilir?

SharedPreferences de bir anahtarın veya verinin var olup olmadığını kontrol etmek için includeKey() metodu kullanılmaktadır. Bu metot, anahtarı değer olarak alır ve anahtarın SharedPreferences’de var olup olmadığını kontrol eder. Anahtar varsa, true değerini, aksi takdirde false değerini döndürmektedir.

checkKey () async
  {
    prefs = await SharedPreferences.getInstance();
    bool hasKey = prefs.containsKey("username");
    print(hasKey);
  }

Çıktı: true

checkKey () async
  {
    prefs = await SharedPreferences.getInstance();
    bool hasKey = prefs.containsKey("email");
    print(hasKey);
  }

Çıktı: false

 

Flutter SharedPreferences Örneği

Flutter’da SharedPreferencesi ​kullanacağımız, kullanıcının girdiği değerin kaydetme,okuma ve silme işlemlerini yapacak örnek bir uygulama yapacağız.

Uygulamada, 1 textfield, 1 text ve 3 buton bulunmaktadır.

#1 SharedPreferences paketini yükleyip sayfamıza import edelim.

#2 Uygulamamızın görünümünü ve işlevlerini tanımlayalım.

body: Container(
    margin: EdgeInsets.all(20),
    child: Column(
      children: [
        TextField(
          controller: userController,
          decoration: InputDecoration(
            border: OutlineInputBorder(),
          ),
        ),
        SizedBox(
          height: 30,
        ),
        Text(
          userName,
          style: TextStyle(fontSize: 20),
        ),
        SizedBox(
          height: 30,
        ),
        ElevatedButton(
          child: Text("Kaydet", style: TextStyle(color: Colors.white)),
          onPressed: () {
            save();
          },
        ),
        ElevatedButton(
          child: Text("Oku", style: TextStyle(color: Colors.white)),
          onPressed: () {
            read();
          },
        ),
        ElevatedButton(
          child: Text("Sil", style: TextStyle(color: Colors.white)),
          onPressed: () {
            delete();
          },
        )
      ],
    )),

Yukarıdaki kodda 1 textfield, 1 text ve 3 buton oluşturduk.

late SharedPreferences prefs;
TextEditingController userController = new TextEditingController();
String userName = "";

Kullanıcından aldığımız değeri kaydetmeyi sağlayan butonun fonksiyonu yazalım.

save() async {
  prefs = await SharedPreferences.getInstance();
  prefs.setString("username", userController.text.toString());
}

Kullanıcından aldığımız değeri silmeyi sağlayan butonun fonksiyonu yazalım.

delete() async {
  prefs = await SharedPreferences.getInstance();
  prefs.remove("username");
  userName = "";
  setState(() {});
}

Kullanıcından aldığımız değeri okumayı sağlayan butonun fonksiyonu yazalım.

read() async {
  prefs = await SharedPreferences.getInstance();
  userName = prefs.getString("username") ?? "Değer Yok";
  setState(() {});
}

Yukarıda veri okuma bölümünde bahsettiğimiz null bir değeri döndürdüğümüzde bize hata vereceğini söylemiştik. Kodda ilgili alana  ?? “Değer Yok” yazarak, boş bir değer döndürüldüğünde ekranda Değer Yok yazısı yazdırılacaktır.

Tam Kod

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'SharedPreferences',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.orange,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() {
    return _MyHomePageState();
  }
}

class _MyHomePageState extends State<MyHomePage> {
  late SharedPreferences prefs;
  TextEditingController userController = new TextEditingController();
  String userName = "";
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: AppBar(
        title: Text("SharedPreferences", style: TextStyle(color: Colors.white)),
      ),
      body: Container(
          margin: EdgeInsets.all(20),
          child: Column(
            children: [
              TextField(
                controller: userController,
                decoration: InputDecoration(
                  border: OutlineInputBorder(),
                ),
              ),
              SizedBox(
                height: 30,
              ),
              Text(
                userName,
                style: TextStyle(fontSize: 20),
              ),
              SizedBox(
                height: 30,
              ),
              ElevatedButton(
                child: Text("Kaydet", style: TextStyle(color: Colors.white)),
                onPressed: () {
                  save();
                },
              ),
              ElevatedButton(
                child: Text("Oku", style: TextStyle(color: Colors.white)),
                onPressed: () {
                  read();
                },
              ),
              ElevatedButton(
                child: Text("Sil", style: TextStyle(color: Colors.white)),
                onPressed: () {
                  delete();
                },
              )
            ],
          )),
    );
  }

  save() async {
    prefs = await SharedPreferences.getInstance();
    prefs.setString("username", userController.text.toString());
  }

  read() async {
    prefs = await SharedPreferences.getInstance();
    userName = prefs.getString("username") ?? "Değer Yok";
    setState(() {});
  }

  delete() async {
    prefs = await SharedPreferences.getInstance();
    prefs.remove("username");
    userName = "";
    setState(() {});
  }
}

Kod Çıktısı (video)

Yorum Yap