จะบันทึกลงในที่จัดเก็บในเครื่องโดยใช้ Flutter ได้อย่างไร?


105

ใน Android หากฉันมีข้อมูลที่ต้องการคงอยู่ในเซสชันต่างๆฉันรู้ว่าฉันสามารถใช้ SharedPreferences หรือสร้างฐานข้อมูล SQLite หรือแม้แต่เขียนไฟล์ลงในอุปกรณ์และอ่านในภายหลัง

มีวิธีบันทึกและกู้คืนข้อมูลเช่นนี้โดยใช้ Flutter หรือไม่? หรือฉันจะต้องเขียนโค้ดเฉพาะอุปกรณ์สำหรับ Android และ iOS เช่นในตัวอย่างเช่นบริการ ?

คำตอบ:


122

มีไม่กี่ตัวเลือก:


ฉันเขียนบริการ flutter เพื่อเข้าถึง SQLite ดูgithub.com/ripple182/FlutterSQLiteSample
ripple182

เป็นไปได้ไหมถ้าฉันใช้ห้อง? จะเกิดอะไรขึ้นกับ iOS ถ้าฉันใช้ Room
MNFS

1
ดูเหมือนว่าจะทำงานได้ดีขึ้นสำหรับ Shared Preferences: pub.dev/packages/shared_preferences
Yster

แพ็คเกจใหม่github.com/lesnitsky/flutter_localstorage
Pablo Díaz

55

หากคุณอยู่ในสถานการณ์ที่คุณต้องการบันทึกมูลค่าเล็กน้อยที่คุณต้องการอ้างอิงในภายหลัง จากนั้นคุณควรจัดเก็บข้อมูลของคุณเป็นข้อมูลคีย์ - ค่าโดยใช้ shared_preferences

แต่ถ้าคุณต้องการจัดเก็บข้อมูลขนาดใหญ่คุณควรใช้ SQLITE

อย่างไรก็ตามคุณสามารถใช้ฐานข้อมูล firebase ซึ่งพร้อมใช้งานแบบออฟไลน์ได้ตลอดเวลา

เนื่องจากเรากำลังพูดถึงพื้นที่จัดเก็บข้อมูลในตัวคุณจึงสามารถอ่านและเขียนไฟล์ลงในดิสก์ได้ตลอดเวลา

โซลูชันอื่น ๆ :


จะตัดสินใจได้อย่างไรว่าจะใช้ sqflite หรือ firebase?
Stuckedoverflow

1
sqfliteเก็บไว้ในโทรศัพท์เท่านั้น firebaseได้รับการซิงค์ในฐานข้อมูลส่วนกลางซึ่งคุณสามารถดำเนินการสืบค้นในแบ็กเอนด์ของคุณ firebaseยังทำให้การซิงโครไนซ์ระหว่างอุปกรณ์ทำได้ง่าย
Feu

โปรดทราบว่า Firestore ของ Firebase มีค่าเริ่มต้นที่ 10MB และอาจกำหนดไว้ที่ไม่น้อยกว่า 1MB และสูงสุด 100MB ไม่แนะนำให้เข้าถึงแบบออฟไลน์อย่างแท้จริง หากคุณวางแผนที่จะใช้สิ่งนี้เป็นตัวเลือกการจัดเก็บในตัวเครื่องเท่านั้นและข้อมูลมีขนาดใหญ่คุณอาจต้องพิจารณาใหม่ firebase.google.com/docs/reference/android/com/google/firebase/…
Lander

นี่ควรเป็นคำตอบที่ต้องการเพราะอธิบายได้ง่ายว่าจะดูที่ไหนในสถานการณ์ต่างๆ
janpeterka

12

คุณสามารถใช้การตั้งค่าที่ใช้ร่วมกันจากปลั๊กอินอย่างเป็นทางการของ Flutter https://github.com/flutter/plugins/tree/master/packages/shared_preferences

ใช้ Shared Preferences สำหรับ Android, NSUserDefaults สำหรับ iOS


1
สิ่งนี้เหมาะสำหรับฐานข้อมูลขนาดใหญ่หรือไม่
temp_

1
@temp_ ฉันไม่รู้เกี่ยวกับ iOS มากนัก อย่างไรก็ตามการตั้งค่าที่ใช้ร่วมกันบน Android นั้นไม่เหมาะกับฐานข้อมูลขนาดใหญ่ ไฟล์เหล่านี้ถูกเขียนเป็นไฟล์ xml ธรรมดาไปยังระบบไฟล์และอ่านจากระบบไฟล์หากมีการร้องขอ ส่วนใหญ่จะใช้สำหรับจัดเก็บค่ากำหนดของแอปและสิ่งที่คล้ายกัน
forgemo

ดูเหมือนว่าจะทำงานได้ดีขึ้นสำหรับ Shared Preferences: pub.dev/packages/shared_preferences
Yster

10

หากคุณต้องการเก็บค่าง่ายๆเช่นโทเค็น API หรือข้อมูลการเข้าสู่ระบบ (ไม่ใช่รหัสผ่าน!) นี่คือสิ่งที่ฉันใช้:

import 'package:shared_preferences/shared_preferences.dart';

asyncFunc() async { // Async func to handle Futures easier; or use Future.then
  SharedPreferences prefs = await SharedPreferences.getInstance();
}
...

// Set
prefs.setString('apiToken', token);

// Get
String token = prefs.getString('apiToken');

// Remove
prefs.remove('apiToken');

อย่าลืมเพิ่มการshared_preferencesพึ่งพาใน pubspec.yaml ของคุณ (รักษารูปแบบระยะห่าง):

dependencies:

  shared_preferences: any

8

ตอบช้า แต่หวังว่าจะช่วยให้ทุกคนที่มาเยี่ยมชมที่นี่ในภายหลังด้วยนะคะ ..

ฉันจะจัดเตรียมหมวดหมู่เพื่อบันทึกและวิธีการที่ดีที่สุดตามลำดับ ...

  1. การตั้งค่าที่ ใช้ร่วมกันใช้สิ่งนี้เมื่อจัดเก็บค่าง่ายๆในที่จัดเก็บเช่นธีมสีภาษาของแอปตำแหน่งเลื่อนสุดท้าย (ในการอ่านแอป) .. นี่คือการตั้งค่าง่ายๆที่คุณต้องการคงอยู่เมื่อแอปรีสตาร์ท .. อย่างไรก็ตามคุณสามารถใช้สิ่งนี้ได้ เพื่อจัดเก็บสิ่งที่มีขนาดใหญ่ (รายการแผนที่รูปภาพ) แต่ต้องมีการทำให้เป็นอนุกรมและการดีซีเรียลไลเซชั่น .. หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการดีซีเรียลไลเซชันและการทำให้เป็นอนุกรมโปรดไปที่นี่ไลเซชัน
  2. ไฟล์ สิ่งนี้ช่วยได้มากเมื่อคุณมีข้อมูลที่คุณกำหนดมากขึ้นเช่นไฟล์บันทึกไฟล์รูปภาพและบางทีคุณอาจต้องการส่งออกไฟล์ csv .. ฉันได้ยินมาว่าการคงอยู่ประเภทนี้สามารถล้างได้ด้วยตัวล้างที่เก็บข้อมูลเมื่อดิสก์หมด space .. ไม่แน่ใจเพราะไม่เคยเห็นมาก่อน .. นอกจากนี้ยังเก็บได้เกือบทุกอย่าง แต่ด้วยความช่วยเหลือของ serialization และ deserialization ..
  3. การบันทึกลงในฐานข้อมูล สิ่งนี้มีประโยชน์อย่างมากในข้อมูลที่มีความซับซ้อนเล็กน้อย และฉันคิดว่าสิ่งนี้ไม่ได้ถูกล้างโดยเครื่องล้างดิสก์เนื่องจากเก็บไว้ในAppData (สำหรับ Android) .. ในสิ่งนี้ข้อมูลของคุณจะถูกเก็บไว้ในฐานข้อมูล SQLite ปลั๊กอินของมันคือSQFLite ชนิดของข้อมูลที่คุณอาจต้องการใส่ไว้ที่นี่ก็เหมือนกับทุกสิ่งที่สามารถแสดงโดยฐานข้อมูลได้

5

มีไม่กี่ตัวเลือก:

Moor: ห้องสมุด Persistence สำหรับ Dart

อ่านและเขียนไฟล์

ปลั๊กอินการตั้งค่าที่ใช้ร่วมกันสำหรับการกระพือ

SQlite สำหรับกระพือปีก


1

คุณสามารถใช้Localstorage

1-เพิ่มการอ้างอิงถึงpubspec.yaml( เปลี่ยนรุ่นตามล่าสุด )

dependencies:
  ...
  localstorage: ^3.0.0

2-จากนั้นเรียกใช้คำสั่งต่อไปนี้

flutter packages get

3- นำเข้าที่เก็บข้อมูลในเครื่อง:

import 'package:localstorage/localstorage.dart';

4-สร้างอินสแตนซ์

class MainApp extends StatelessWidget {
  final LocalStorage storage = new LocalStorage('localstorage_app');
  ...
}

เพิ่มรายการใน lcoalstorage:

void addItemsToLocalStorage() {
  storage.setItem('name', 'Abolfazl');
  storage.setItem('family', 'Roshanzamir');

  final info = json.encode({'name': 'Darush', 'family': 'Roshanzami'});
  storage.setItem('info', info);
}

รับรายการจาก lcoalstorage นี้:

void getitemFromLocalStorage() {
  final name = storage.getItem('name'); // Abolfazl
  final family = storage.getItem('family'); // Roshanzamir
  
  Map<String, dynamic> info = json.decode(storage.getItem('info'));
  final info_name=info['name'];
  final info_family=info['family'];
}

ลบรายการจากที่เก็บข้อมูลในเครื่อง:

void removeItemFromLocalStorage() {
  storage.deleteItem('name');
  storage.deleteItem('family');
  storage.deleteItem('info');
}

0

ฉันคิดว่าถ้าคุณจะจัดเก็บข้อมูลจำนวนมากในที่จัดเก็บในตัวเครื่องคุณสามารถใช้ไลบรารี sqflite ได้ มันง่ายมากในการติดตั้งและฉันได้ใช้สำหรับโครงการทดสอบบางอย่างเป็นการส่วนตัวและมันก็ใช้ได้ดี

https://github.com/tekartik/sqflite นี่คือบทช่วยสอน - https://proandroiddev.com/flutter-bookshelf-app-part-2-personal-notes-and-database-integration-a3b47a84c57

หากคุณต้องการจัดเก็บข้อมูลในระบบคลาวด์คุณสามารถใช้ firebase ได้ เป็นบริการที่มั่นคงโดย Google

https://firebase.google.com/docs/flutter/setup


0

คุณสามารถใช้SharedPreferencesสำหรับข้อมูลจำนวนเล็กน้อย แต่ถ้าคุณมีข้อมูลขนาดใหญ่และซับซ้อนคุณควรใช้Sqlite Databaseสำหรับการจัดเก็บในตัวเครื่องในแอปพลิเคชัน Flutter


0

ฉันกำลังมองหาพื้นที่จัดเก็บข้อมูลในเครื่องที่เรียบง่ายเหมือนกัน แต่ยังมีระดับความปลอดภัยที่เหมาะสมด้วย วิธีแก้ปัญหาสองวิธีที่ฉันพบว่าเหมาะสมที่สุดคือflutter_secure_storage (ตามที่Raoufกล่าวไว้) สำหรับเรื่องเล็ก ๆ และกลุ่มสำหรับชุดข้อมูลขนาดใหญ่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.