-
@ nahmkahw
2023-09-13 16:03:56การใช้งาน SharedPreferences ใน Flutter เพื่อเก็บข้อมูลในแคชเป็นวิธีที่ง่ายและมีประสิทธิภาพสำหรับการเก็บข้อมูลชั่วคราว แต่อาจไม่เหมาะสมสำหรับการเก็บข้อมูลการตอบสนองของ API โดยเฉพาะเมื่อมีข้อมูลมากหรือซับซ้อน คุณสามารถใช้ SharedPreferences เพื่อเก็บข้อมูลแคชและดึงข้อมูลนั้นเมื่อไม่มีการเชื่อมต่ออินเทอร์เน็ต ต่อไปนี้คือตัวอย่าง: 1. เพิ่มแพ็คเกจ shared_preferences ลงในไฟล์ pubspec.yaml ของคุณ:
dependencies: flutter: sdk: flutter shared_preferences: ^2.0.8 # ใช้เวอร์ชันล่าสุด
2. นำเข้าแพ็คเกจในไฟล์ Dart ของคุณ:import 'package:shared_preferences/shared_preferences.dart';
3. เพื่อเก็บข้อมูลในแคช บันทึกข้อมูลเมื่อคุณดึงมาจาก API: ``` import 'package:http/http.dart' as http;Future
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'); } } 4. เพื่อดึงข้อมูลแคชเมื่อไม่มีการเชื่อมต่ออินเทอร์เน็ต คุณสามารถทำดังนี้:
FuturegetCachedData() async { final prefs = await SharedPreferences.getInstance(); return prefs.getString('cachedData'); } 5. เมื่อดึงข้อมูล คุณสามารถตรวจสอบว่ามีการเชื่อมต่ออินเทอร์เน็ตโดยใช้แพ็คเกจ connectivity และตัดสินใจว่าจะดึงจาก API หรือใช้ข้อมูลแคช:
import 'package:connectivity/connectivity.dart';Future
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 อาจไม่เหมาะสมสำหรับกรณีการแคชที่ซับซ้อนหรือมีข้อมูลมาก สำหรับการแคชที่ซับซ้อนมากขึ้นคุณควรพิจารณาใช้แพ็คเกจแคชอื่นหรือวิธีการแคชที่มีประสิทธิภาพมากขึ้นแทน.