Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以存储地图吗<;字符串,对象>;在dart中的共享首选项中?_Dart_Flutter - Fatal编程技术网

我可以存储地图吗<;字符串,对象>;在dart中的共享首选项中?

我可以存储地图吗<;字符串,对象>;在dart中的共享首选项中?,dart,flutter,Dart,Flutter,有没有一种方法可以将地图对象保存到共享首选项中,这样我们就可以从共享首选项中获取数据,而不是一直听数据库。 实际上我想减少从firebase下载的数据量。因此,我正在考虑一个解决方案,让共享pref有一个侦听器,并从共享pref读取数据 但我看不到用飞镖或飞镖来实现这一点的方法 如果有解决办法,请有人帮助我实现这一目标 非常感谢,, Mahi如果将其转换为字符串,则可以存储它 import 'dart:convert'; ... var s = json.encode(myMap); // or

有没有一种方法可以将地图对象保存到共享首选项中,这样我们就可以从共享首选项中获取数据,而不是一直听数据库。 实际上我想减少从firebase下载的数据量。因此,我正在考虑一个解决方案,让共享pref有一个侦听器,并从共享pref读取数据

但我看不到用飞镖或飞镖来实现这一点的方法

如果有解决办法,请有人帮助我实现这一目标

非常感谢,,
Mahi

如果将其转换为字符串,则可以存储它

import 'dart:convert';
...
var s = json.encode(myMap);
// or var s = jsonEncode(myMap);

json.decode(…)
/
jsonDecode(…)
在加载字符串时从字符串生成映射。

使用此软件包可能更容易:

看看这个例子:

import 'package:pref_dessert/pref_dessert.dart';

/// Person class that you want to serialize:
class Person {
  String name;
  int age;

  Person(this.name, this.age);
}

/// PersonDesSer which extends DesSer<T> and implements two methods which serialize this objects using CSV format:
class PersonDesSer extends DesSer<Person>{
  @override
  Person deserialize(String s) {
    var split = s.split(",");
    return new Person(split[0], int.parse(split[1]));
  }

  @override
  String serialize(Person t) {
    return "${t.name},${t.age}";
  }

}

void main() {
  var repo = new FuturePreferencesRepository<Person>(new PersonDesSer());
  repo.save(new Person("Foo", 42));
  repo.save(new Person("Bar", 1));
  var list = repo.findAll();

}
import'包装:pref_甜点/pref_甜点.dart';
///要序列化的Person类:
班主任{
字符串名;
智力年龄;
人(这个名字,这个年龄);
}
///PersonDesSer,它扩展了DesSer并实现了两种使用CSV格式序列化此对象的方法:
类PersonDesSer扩展了DesSer{
@凌驾
人员反序列化(字符串s){
var split=s.split(“,”);
返回新人(拆分[0],int.parse(拆分[1]);
}
@凌驾
字符串序列化(Person t){
返回“${t.name},${t.age}”;
}
}
void main(){
var回购=新的未来优先权储备(new PersonDesSer());
回购保存(新的人(“Foo”,42));
回购保存(新的人(“酒吧”,1));
var list=repo.findAll();
}

软件包仍在开发中,因此可能会发生变化,但欢迎任何改进和想法!)

对于那些不喜欢将字符串转换为JSON或将字符串转换为JSON的人,我个人建议,这是我发现的在flatter中存储任何
数据的最简单方法

import 'package:localstorage/localstorage.dart';

final LocalStorage store = new LocalStorage('myapp');

...

setLocalStorage() async {
  await store.ready;       // Make sure store is ready
  store.setItem('myMap', myMapData);
}

...


希望这有帮助

在dart的
共享首选项中
无法直接存储地图,但您可以通过将
地图
转换为
字符串
,然后像往常一样保存,并在需要时检索字符串,然后将其转换回
地图
。太简单了

使用
json.encode()
将地图转换为
String
,然后保存它,

需要地图时,使用
json.decode()
从字符串中取回地图

import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';

final yourStr = sharedPreferences.getString("yourkey");
var map = json.decode(yourStr);

sharedPreferences.setString("yourkey", json.encode("value"));

这太棒了,非常感谢@GunterZochbauer,这非常有效。这正是我自己使用的解决方案,很好;)我可以在共享首选项中保存列表吗?不,只有JSON。你需要先对它进行编码。共享首选项是应用程序外部的存储,通常只能在应用程序外部存储序列化数据,而不仅仅是普通对象。无法转换为字符串,您如何获得该字符串?用getItem?