การใช้งาน SharedPreferences ใน Flutter
การใช้งาน SharedPreferences ใน Flutter เพื่อเก็บข้อมูลในแคชเป็นวิธีที่ง่ายและมีประสิทธิภาพสำหรับการเก็บข้อมูลชั่วคราว แต่อาจไม่เหมาะสมสำหรับการเก็บข้อมูลการตอบสนองของ API โดยเฉพาะเมื่อมีข้อมูลมากหรือซับซ้อน คุณสามารถใช้ SharedPreferences เพื่อเก็บข้อมูลแคชและดึงข้อมูลนั้นเมื่อไม่มีการเชื่อมต่ออินเทอร์เน็ต ต่อไปนี้คือตัวอย่าง:
- เพิ่มแพ็คเกจ shared_preferences ลงในไฟล์ pubspec.yaml ของคุณ:
dependencies:
flutter:
sdk: flutter
shared_preferences: ^2.0.8 # ใช้เวอร์ชันล่าสุด
- นำเข้าแพ็คเกจในไฟล์ Dart ของคุณ:
import 'package:shared_preferences/shared_preferences.dart';
- เพื่อเก็บข้อมูลในแคช บันทึกข้อมูลเมื่อคุณดึงมาจาก API:
import 'package:http/http.dart' as http;
Future<void> fetchAndCacheData(String apiUrl) async {
try {
final response = await http.get(Uri.parse(apiUrl));
if (response.statusCode == 200) {
final responseData = response.body;
// บันทึกข้อมูลตอบสนองจาก API ไว้ใน SharedPreferences
final prefs = await SharedPreferences.getInstance();
prefs.setString('cachedData', responseData);
} else {
throw Exception('การดึงข้อมูลล้มเหลว');
}
} catch (e) {
print('ข้อผิดพลาด: $e');
}
}
- เพื่อดึงข้อมูลแคชเมื่อไม่มีการเชื่อมต่ออินเทอร์เน็ต คุณสามารถทำดังนี้:
Future<String?> getCachedData() async {
final prefs = await SharedPreferences.getInstance();
return prefs.getString('cachedData');
}
- เมื่อดึงข้อมูล คุณสามารถตรวจสอบว่ามีการเชื่อมต่ออินเทอร์เน็ตโดยใช้แพ็คเกจ connectivity และตัดสินใจว่าจะดึงจาก API หรือใช้ข้อมูลแคช:
import 'package:connectivity/connectivity.dart';
Future<void> fetchData() async {
final connectivityResult = await Connectivity().checkConnectivity();
if (connectivityResult == ConnectivityResult.none) {
// ไม่มีการเชื่อมต่ออินเทอร์เน็ต ดึงข้อมูลจากแคช
final cachedData = await getCachedData();
if (cachedData != null) {
// ใช้ข้อมูลแคช
print('ใช้ข้อมูลแคช: $cachedData');
} else {
print('ไม่มีข้อมูลแคช');
}
} else {
// มีการเชื่อมต่ออินเทอร์เน็ต ดึงข้อมูลจาก API
final apiUrl = 'URL_API_ของคุณ_ที่นี่';
await fetchAndCacheData(apiUrl);
}
}
วิธีนี้ช่วยให้คุณสามารถเก็บข้อมูลใน SharedPreferences และดึงข้อมูลเมื่อไม่มีการเชื่อมต่ออินเทอร์เน็ต อย่างไรก็ตาม โปรดทราบว่า SharedPreferences อาจไม่เหมาะสมสำหรับกรณีการแคชที่ซับซ้อนหรือมีข้อมูลมาก สำหรับการแคชที่ซับซ้อนมากขึ้นคุณควรพิจารณาใช้แพ็คเกจแคชอื่นหรือวิธีการแคชที่มีประสิทธิภาพมากขึ้นแทน.
Write a comment