7. Penyimpanan Shared Preferences
Seringkali kita perlu menyimpan beberapa data bersama dengan sebuah aplikasi. SharedPreferences
memberikan sebuah opsi penyimpanan yang mungkin cocok dengan data yang kita ingin simpan. Tutorial kali ini akan membahas bagaimana mengakses dan menyimpan data menggunakan SharedPreferences
.
Perlu dicatat bahwa SharedPreferences
hanya bisa menyimpan bentuk data sederhana seperti String, Double, Integer, Boolean, atau Long. Jika data yang ingin disimpan lebih kompleks, gunakan sistem database lain seperti SQL.
Install Package
Install terlebih dahulu shared preferences
Setelah menginstall package yang kita ingin gunakan selanjutnya kita akan memulai menerapkan shared_preferences.
Menerapkan Package Pada Introduction
Kita akan membuat aksi untuk skip & done. Jadi halaman introduction ini akan muncul ketika aplikasi baru pertama kali diinstall saja. Caranya adalah seperti berikut :
- Ubahlah class
Introduction
yang sebelumnya stateless menjadi state full dengan menekan lampu kuning pada classIntroduction
- Buatlah proses untuk menjalankan SharedPreferences nya
class _IntroductionState extends State<Introduction> {
SaveAction() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool('isIntro', true);
Navigator.pushNamedAndRemoveUntil(context, '/login', (route) => false);
}
@override
Widget build(BuildContext context) {
return Scaffold(
- Jalankan prosesnya pada aksi onskip & ondone
introduction.dart
showSkipButton: true, skip: const Text("Skip", style: TextStyle(color: Colors.white)), next: const Text("Next", style: TextStyle(color: Colors.white)), done: const Text("Done", style: TextStyle(fontWeight: FontWeight.w700, color: Colors.white)), onDone: () => SaveAction(), onSkip: () => SaveAction(), dotsDecorator: DotsDecorator( size: const Size.square(10.0), activeSize: const Size(50.0, 10.0), activeColor: const Color.fromARGB(255, 224, 214, 214), color: Colors.white, spacing: const EdgeInsets.symmetric(horizontal: 3.0), activeShape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(25.0)), ),
Pada main.dart kita akan setting ketika mempunyai data isIntro
yang bernilai true maka akan langsung dilarikan ke login & jika belum ada data isIntro
maka akan dilarikan ke introduction. Caranya adalah seperti berikut:
- Ubah class
MyApp
yang sebelumnya stateless menjadi state full dengan menekan lampu kuning pada classMyApp
- Lalu kita akan membuat proses untuk pengecekan datanya yang sudah disimpan pada
SharedPreferences
class _MyAppState extends State<MyApp> {
bool? intro;
cekData() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
if (prefs.getBool('isIntro') != null) {
intro = prefs.getBool('isIntro');
}
});
}
@override
void initState() {
cekData();
super.initState();
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
.....
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
initialRoute: intro == null || intro == false
? "/intro"
: "/login",
routes: {
'/': (context) => Home(),
'/splash': (context) => SplashScreen(),
'/intro': (context) => Introduction(),
'/login': (context) => Login(),
'/register': (context) => Register(),
},
);
Keterangan
- Buat variabel untuk mengecek data yang nantinya kita panggil, dan kita berikan
?
agar bisa diisi dengan null terlebih dahulu getInstance
: untuk mengambil data yang disimpan pada SharedPreferences- Lalu data tersebut kita cek jika data intro belum tersimpan maka variabel intro masih null dan jika sudah tersimpan maka variabel intro akan berisikan true
initState
: proses yang akan dijalankan sebelum tampilan di render / di tampilkan
Latihan Shared Preferences
- Pada proses login buatlah variabel shared preferences untuk menyimpan data response login (buat variabel tersebut dengan nama
isLogin
) - Pada route buat aksi dimana ketika ada data
isLogin
akan diarahkan langsung ke home dan tidak perlu lagi ke login