Bu yazımda Flutter üzerinde Shared Preferences kullanımı üzerine biraz bahsedeceğim. Shared Preferences verilerinizi basit yapılar üzerinde telefonda lokal olarak saklamanızı sağlayan bir pakettir. Verilerinizi (key,value) biçiminde saklar ve key üzerinden bu değere ulaşmanıza olanak sağlar. Oldukça basit kullanımı olan Shared Preferences, iOS’ta User Defaults olarak bilinir.
Shared Preferences, yalnızca bool, double, int, string ve list<String> değişken tiplerini lokal veritabanına kaydetmenize ve okumanıza izin verir. Yalnızca kritik olmayan verileri saklamanız gereken bu veritabanında eğer kullanıcı uygulamanızı silerse tüm kaydedilen veriler kaybolur.
Shared Preferences ile uygulamada kullanıcıların yaptığı seçimler saklanabilir. Örneğin kullanıcının dark mode aktif edip etmediğinin verisi böyle bir yapı ile saklanabilir. Kullanıcının uygulamaya daha önce giriş yapıp yapmadığı eğer yaptıysa kendisine ait unique ID’nin uygulama içerisinde ve veritabanında saklanıp, bu ID’nin varlığına göre kullanıcının uygulamaya giriş yapabileceğini veya kendisinin kayıt sayfasına yönlendirilmesi sağlanabilir.
Yukarıda bahsettiğim her iki örneğin de benzerlerini daha önce yazdığım Flutter ile to-do list uygulaması yazmak konulu basit projemde göstermiştim. İsterseniz kodlarını inceleyebilirsiniz.
Shared Preferences fonksiyonları ve kullanım şekilleri
Öncelikle Shared Preferences ile yazacağınız fonksiyonların hepsini shared_preferences_manager.dart gibi bir isme sahip bir dosya altında toplayın. Burada yazacağınız fonksiyonlar uygulamanın her kısmından erişileceği için tekrar tekrar yazmak yerine modüler yazmanız sizin açınızdan daha iyi olacaktır.
setAppLevelUserData(User user) async {
SharedPreferences pref = await SharedPreferences.getInstance();
pref.setString("name", user.name);
pref.setString("mail", user.mail);
pref.setString("city", user.city);
pref.setString("date", user.date);
}
Örneğin yukarıdaki kodda yeni kaydolan kullanıcının uygulama içerisinde kullanılabilecek bilgilerini sürekli sunucudan çekmek yerine kayıt olduktan hemen sonra Shared Preferences ile uygulamaya kaydedebilir ve daha sonra kullanabilirisiniz.
getAppLevelUserData() async {
SharedPreferences pref = await SharedPreferences.getInstance();
User user = User(
mail: pref.getString("mail"),
name: pref.getString("name"),
city: pref.getString("city"),
date: pref.getString("date"));
return user;
}
Yukarıdaki kodda ise bu kullanıcıya dair bilgileri Shared Preferences ile alıp, User adındaki objenize kaydedip, bu objeyi uygulamanın farklı yerlerinde kullanmak için döndürebilirsiniz.
getLogin() async {
String uid = await getUserLoginInfo();
print(uid);
if (uid != null) {
Navigator.push(context,
MaterialPageRoute(builder: (BuildContext context) {
return FadedWelcomeScreen();
}));
}
}
@override
void initState() {
getLogin();
super.initState();
}
Shared Preferences ile çekeceğiniz veriler veya oluşturacağınız if blokları initState içerisinde çağırılmalıdır. Widgetlar render edilmeden veri çekme işleminin tamamlanıp, bu verinin uygun yerlere yerleştirilmesi veya bu veriye uygun aksiyon alınması gerekir. Eğer onPressed veya onTap gibi fonksiyonlarla birlikte veriye erişim sağlanacaksa, mutlaka erişim sonrasında onTap veya onPressed gibi fonksiyonların kendi alanları içerisinde en son setState çağırılmalıdır ki yaptığınız değişiklik Widget Tree’ye eklenebilsin.
Gördüğünüz üzere Shared Preferences kullanımı çok kolay! Siz de bu basit yapıyı kullanarak hayati olmayan verileri uygulama içerisinde saklayarak karmaşık veritabanlarına erişmek için yapacağınız isteklerden kurtulabilirsiniz! 🙂
Flutter ile HTTP istekleri nasıl atılır daha önce merak ettiniz mi? Bu yazıma göz atmayı unutmayın.
2 Comments