Flutter本地存储远程数据的最佳策略
Posted
技术标签:
【中文标题】Flutter本地存储远程数据的最佳策略【英文标题】:Best strategy for locally storing remote data in Flutter 【发布时间】:2021-10-26 18:30:55 【问题描述】:我有一个 Flutter 应用程序,它必须从网络请求大量 JSON 数据。必须将这些数据转换为地图。
远程数据每周左右变化,因此我正在寻找一种“缓存”或永久存储它的方法,以便不必在用户每次打开应用程序时都请求它。
实现这一目标的最佳方法是什么?
【问题讨论】:
【参考方案1】:您可以使用 Hive lib 来保存您的数据
import 'dart:io';
import 'package:hive/hive.dart';
part 'main.g.dart';
@HiveType(typeId: 1)
class Person
Person(required this.name, required this.age, required this.friends);
@HiveField(0)
String name;
@HiveField(1)
int age;
@HiveField(2)
List<String> friends;
@override
String toString()
return '$name: $age';
void main() async
var path = Directory.current.path;
Hive
..init(path)
..registerAdapter(PersonAdapter());
var box = await Hive.openBox('testBox');
var person = Person(
name: 'Dave',
age: 22,
friends: ['Linda', 'Marc', 'Anne'],
);
await box.put('dave', person);
print(box.get('dave')); // Dave: 22
【讨论】:
请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。【参考方案2】:如果您想快速做某事,可以使用 path_provider 将该数据存储在文件 (source) 中
创建对文件位置的引用:
Future<File> get _localFile async
final path = await getApplicationDocumentsDirectory();
return File('$path/counter.txt');
写入数据:
Future<File> writeCounter(int counter) async
final file = await _localFile;
return file.writeAsString('$counter');
读取数据:
Future<int> readCounter() async
try
final file = await _localFile;
final contents = await file.readAsString();
return int.parse(contents);
catch (e)
return 0;
如果您想了解所有选项,我建议您阅读以下内容:https://flutter.dev/docs/development/data-and-backend/state-mgmt/intro
【讨论】:
以上是关于Flutter本地存储远程数据的最佳策略的主要内容,如果未能解决你的问题,请参考以下文章
flutter 本地存储数据(shared_preferences)