Shared Preferences för data
Använd `shared_preferences` för att lokalt lagra små mängder data, till exempel användarinställningar och preferenser, som nyckel-värde-par.
Shared Preferences för data är en gratis lektion i Mobilutveckling med Flutter på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Mobilutveckling med Flutter, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Mobilutveckling med Flutter innehåller totalt 4 lektioner.
Vad är Shared Preferences?
När du bygger mobilappar behöver du ofta lagra små mängder data lokalt på enheten. Det kan vara allt från användarens inställning för mörkt läge till statusen för deras senaste inloggning.
shared_preferences är ett Flutter-paket som hjälper dig med just detta! Det ger ett enkelt sätt att lagra nyckel-värde-par med primitiva datatyper.
Varför använda Shared Preferences?
- Enkla data: Idealiskt för lagring av enkla datatyper som booleska värden, heltal, decimaltal, strängar och listor med strängar.
- Användarinställningar: Perfekt för att spara användarinställningar, appinställningar eller temaval.
- Lättviktigt: Ett snabbt och enkelt sätt att spara små mängder data utan att behöva en fullständig databas.
Se det som ett litet digitalt anteckningsblock för appens tillfälliga minne!
Installera paketet
För att använda shared_preferences måste du först lägga till det bland projektets beroenden.
Öppna filen pubspec.yaml och lägg till följande rad under dependencies:
dependencies:
flutter:
sdk: flutter
shared_preferences: ^2.2.2 # Add this lineSpara din första inställning
När paketet har lagts till kan du börja spara data. Du behöver hämta en instans av SharedPreferences och sedan använda metoder som setBool(), setString() och så vidare.
Kom ihåg att använda await eftersom dessa operationer är asynkrona!
import 'package:shared_preferences/shared_preferences.dart';
Future<void> saveSetting() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setBool('isDarkMode', true);
print('Dark mode setting saved!');
}Kör: Spara ett booleskt värde
Prova att köra det här exemplet för att se hur ett booleskt värde sparas. Vi sätter flaggan 'welcomeShown' till true.
import 'package:flutter/widgets.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
SharedPreferences prefs = await SharedPreferences.getInstance();
// Save a boolean value
await prefs.setBool('welcomeShown', true);
print('welcomeShown saved: ${prefs.getBool('welcomeShown')}');
}Hämta sparade data
För att hämta data använder du motsvarande get-metoder, till exempel getBool() och getString(). Dessa metoder returnerar en nullbar typ (till exempel bool?) eftersom nyckeln kanske inte finns.
Det är god praxis att ange ett standardvärde med operatorn ?? om nyckeln inte hittas.
import 'package:shared_preferences/shared_preferences.dart';
Future<bool> getSetting() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
// Get 'isDarkMode', default to false if not found
bool isDark = prefs.getBool('isDarkMode') ?? false;
return isDark;
}Kör: Läs in ett booleskt värde
Vi läser in inställningen welcomeShown som vi sparade tidigare. Lägg märke till hur vi hanterar fallet där den kanske inte finns genom att ange standardvärdet false.
import 'package:flutter/widgets.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
SharedPreferences prefs = await SharedPreferences.getInstance();
// Load 'welcomeShown', default to false if not present
bool welcomeShown = prefs.getBool('welcomeShown') ?? false;
print('Is welcome screen already shown? $welcomeShown');
// Let's try to load a key that doesn't exist
String? userName = prefs.getString('userName');
print('User Name: ${userName ?? 'Guest'}');
}Spara andra datatyper
shared_preferences stöder flera grundläggande datatyper:
setString(key, value)för textsetInt(key, value)för heltalsetDouble(key, value)för decimaltalsetStringList(key, value)för listor med strängar
Det finns motsvarande get-metoder för varje typ.
Kör: Spara blandade data
Det här exemplet visar hur man sparar och läser in en sträng, ett heltal och en lista med strängar. Se hur olika typer hanteras.
import 'package:flutter/widgets.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
SharedPreferences prefs = await SharedPreferences.getInstance();
// Save different data types
await prefs.setString('userName', 'Coddy');
await prefs.setInt('score', 12345);
await prefs.setStringList('favoriteFoods', ['Pizza', 'Sushi', 'Tacos']);
print('All data saved!');
// Load and print them
String? name = prefs.getString('userName');
int? score = prefs.getInt('score');
List<String>? foods = prefs.getStringList('favoriteFoods');
print('User Name: ${name ?? 'N/A'}');
print('Score: ${score ?? 0}');
print('Favorite Foods: ${foods ?? []}');
}Ta bort inställningar
Du kan också ta bort sparade inställningar:
remove(key): Tar bort ett specifikt nyckel-värde-par.clear(): Tar bort ALLA data som din app har lagrat med hjälp avshared_preferences. Använd med försiktighet!
Båda metoderna är asynkrona och returnerar en Future<bool> som anger om åtgärden lyckades.
Snabb kontroll
Du vill lagra användarens föredragna språk, vilket är en enda sträng som 'en_US' eller 'es_ES'. Vilken metod i shared_preferences är lämpligast för att spara dessa data?
Sammanfattning och nästa steg
Bra jobbat! Du har lärt dig hur du använder shared_preferences för att lagra och hämta små, enkla data lokalt i dina Flutter-appar.
- Det passar utmärkt för användarinställningar och preferenser.
- Stöder grundläggande typer: bool, int, double, string och List<String>.
- Åtgärderna är asynkrona (använd
await). - Kom ihåg att hantera null-värden när du hämtar data.
Härnäst ska du utforska mer strukturerad datalagring med SQLite-databaser!
Lär dig Dart med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 22
- Lektioner
- 88
Vanliga frågor
Är lektionen ”Shared Preferences för data” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Mobilutveckling med Flutter, inklusive ”Shared Preferences för data”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Mobilutveckling med Flutter innehåller totalt 4 lektioner.
Vad lär jag mig i ”Shared Preferences för data”?
Använd `shared_preferences` för att lokalt lagra små mängder data, till exempel användarinställningar och preferenser, som nyckel-värde-par. Ni övar på Mobilutveckling med Flutter med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Mobilutveckling med Flutter?
Du behöver inga förkunskaper. Utbildningen i Mobilutveckling med Flutter på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”Shared Preferences för data”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Mobilutveckling med Flutter-lektionen?
Ja. Varje Mobilutveckling med Flutter-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Shared Preferences för data
- Integration av SQLite-databaser
- Åtgärder i filsystemet
- Hive och lokal NoSQL-lagring