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 并将数据保存到本地存储

flutter 本地存储数据(shared_preferences)

如何在flutter中保护本地存储的数据

本地机密存储是敏感数据的最佳做法吗? [关闭]

在本地管理 Flutter 应用和 Flutter Web 数据

将当前用户数据从本地存储存储到vue存储的最佳实践?