Làm cách nào để lưu vào bộ nhớ cục bộ bằng Flutter?


98

Trong Android, nếu tôi có thông tin mà tôi muốn duy trì qua các phiên, tôi biết tôi có thể sử dụng SharedPreferences hoặc tạo cơ sở dữ liệu SQLite hoặc thậm chí ghi tệp vào thiết bị và đọc nó sau này.

Có cách nào để lưu và khôi phục dữ liệu như thế này chỉ bằng cách sử dụng Flutter không? Hay tôi cần viết mã dành riêng cho thiết bị cho Android và iOS như trong ví dụ về dịch vụ ?

Câu trả lời:


118

Có một vài lựa chọn:


Tôi đã viết một dịch vụ rung để truy cập SQLite, xem github.com/ripple182/FlutterSQLiteSample
ripple182

nó có khả thi nếu tôi sử dụng Room không? điều gì xảy ra với ios nếu tôi sử dụng Room?
MNFS

1
Điều này dường như làm việc tốt hơn cho Shared Preferences: pub.dev/packages/shared_preferences
Yster


53

Nếu bạn đang ở trong tình huống bạn muốn tiết kiệm một giá trị nhỏ mà bạn muốn tham khảo sau. thì bạn nên lưu trữ dữ liệu của mình dưới dạng dữ liệu khóa-giá trị bằng shared_preferences

nhưng nếu bạn muốn lưu trữ dữ liệu lớn, bạn nên sử dụng SQLITE

tuy nhiên, bạn luôn có thể sử dụng cơ sở dữ liệu firebase khả dụng ngoại tuyến

Vì chúng ta đang nói về bộ nhớ cục bộ nên bạn luôn có thể đọc và ghi tệp vào đĩa

Các giải pháp khác:


làm thế nào để quyết định khi nào sử dụng sqflite hoặc firebase?
kẹt lại dòng chảy

1
sqflitechỉ lưu trữ nó trong điện thoại. firebaseđược đồng bộ hóa trong cơ sở dữ liệu trung tâm nơi bạn có thể thực hiện các truy vấn trong phần phụ trợ của mình. firebasecũng giúp đồng bộ hóa dễ dàng giữa các thiết bị.
Feu

Xin lưu ý rằng Firestore của Firebase mặc định là 10MB và có thể được đặt thành không dưới 1MB và tối đa là 100MB. Truy cập ngoại tuyến thuần túy không được khuyến khích. Nếu bạn định chỉ sử dụng tùy chọn này làm tùy chọn lưu trữ cục bộ và dữ liệu lớn, bạn có thể cần phải xem xét lại. firebase.google.com/docs/reference/android/com/google/firebase/…
Lander,

Đây nên là câu trả lời được ưu tiên, bởi vì nó đơn giản giải thích nơi cần xem xét trong các tình huống khác nhau.
janpeterka

12

Bạn có thể sử dụng các tùy chọn được chia sẻ từ các plugin chính thức của Flagship. https://github.com/flutter/plugins/tree/master/packages/shared_preferences

Nó sử dụng Shared Preferences cho Android, NSUserDefaults cho iOS.


1
Điều này có lý tưởng cho cơ sở dữ liệu lớn không?
temp_

1
@temp_ Tôi không biết nhiều về iOS. Tuy nhiên, Shared Preferences trên Android rõ ràng không phù hợp với cơ sở dữ liệu lớn. Chúng được ghi dưới dạng tệp xml thuần túy vào hệ thống tệp và đọc từ hệ thống tệp nếu được yêu cầu. Chúng chủ yếu được sử dụng để lưu trữ các tùy chọn ứng dụng và những thứ tương tự.
forgemo

Điều này dường như hoạt động tốt hơn đối với Tùy chọn được chia sẻ: pub.dev/packages/shared_preferences
Yster 24/09/19

7

Một câu trả lời muộn nhưng tôi hy vọng nó sẽ giúp ích cho những ai ghé thăm đây sau này😁 ..

Tôi sẽ cung cấp các danh mục để lưu và các phương pháp tốt nhất tương ứng ...

  1. Tùy chọn Chia sẻ Sử dụng tùy chọn này khi lưu trữ các giá trị đơn giản trên bộ nhớ, ví dụ: Chủ đề màu, ngôn ngữ ứng dụng, vị trí cuộn cuối cùng (trong ứng dụng đọc) .. đây là những cài đặt đơn giản mà bạn muốn duy trì khi ứng dụng khởi động lại .. Tuy nhiên, bạn có thể sử dụng cài đặt này để lưu trữ những thứ lớn (Danh sách, Bản đồ, Hình ảnh) nhưng điều đó sẽ yêu cầu tuần tự hóa và tuần tự hóa .. Để tìm hiểu thêm về tuần tự hóa và tuần tự hóa này, hãy truy cập vào đây .
  2. Tệp Điều này giúp ích rất nhiều khi bạn có dữ liệu được bạn xác định nhiều hơn, chẳng hạn như tệp nhật ký, tệp hình ảnh và có thể bạn muốn xuất tệp csv .. Tôi nghe nói rằng loại tồn tại này có thể bị xóa bởi trình dọn dẹp lưu trữ khi đĩa hết không gian .. Tôi không chắc vì tôi chưa bao giờ nhìn thấy nó .. Điều này cũng có thể lưu trữ hầu hết mọi thứ nhưng với sự trợ giúp của tuần tự hóa và deserialization ..
  3. Lưu vào cơ sở dữ liệu Điều này cực kỳ hữu ích đối với dữ liệu hơi phức tạp. Và tôi nghĩ rằng điều này không bị làm sạch bởi trình dọn dẹp đĩa vì nó được lưu trữ trong AppData (dành cho android) .. Trong đó, dữ liệu của bạn được lưu trữ trong cơ sở dữ liệu SQLite. Plugin của nó là SQFLite . Các loại dữ liệu mà bạn có thể muốn đưa vào đây giống như mọi thứ có thể được biểu diễn bằng cơ sở dữ liệu.

5

Nếu bạn chỉ cần lưu trữ các giá trị đơn giản như mã thông báo API hoặc dữ liệu đăng nhập (không phải mật khẩu!), Đây là những gì tôi đã sử dụng:

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');

Đừng quên thêm phần shared_preferencesphụ thuộc vào pubspec.yaml của bạn (giữ nguyên định dạng khoảng cách):

dependencies:

  shared_preferences: any



0

Tôi nghĩ Nếu bạn định lưu trữ một lượng lớn dữ liệu trong bộ nhớ cục bộ, bạn có thể sử dụng thư viện sqflite. Nó rất dễ cài đặt và cá nhân tôi đã sử dụng cho một số dự án thử nghiệm và nó hoạt động tốt.

https://github.com/tekartik/sqflite Đây là hướng dẫn - https://proandroiddev.com/flutter-bookshelf-app-part-2-personal-notes-and-database-integration-a3b47a84c57

Nếu bạn muốn lưu trữ dữ liệu trên đám mây, bạn có thể sử dụng firebase. Nó là dịch vụ vững chắc do google cung cấp.

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.