问题描述
我正在尝试将我的数据添加到收藏夹列表,但我不知道该怎么做,我只是将其保存在收藏夹列表中,但是当重新启动应用程序时,没有任何想法保存在共享首选项中或类似的东西它
加载json的代码如下
List mydata = List();
final _savedata = Set<Map>();
Future<void> getjsondata() async {
final String response = await rootBundle.loadString('assets/data.json');
final data = await json.decode(response);
setState(() {
mydata = data["InfoPlate"];
});
}
这个用于将数据添加到收藏夹列表
void _pushSaved() {
Navigator.of(context).push(
new MaterialPageRoute<void>(
builder: (BuildContext context) {
final Iterable<ListTile> tiles = _savedata.map(
(Myinfo) {
return new ListTile(
title: Text(Myinfo['type']),);
},);
final List<Widget> divided = ListTile.divideTiles(
context: context,tiles: tiles,).toList();
return new Scaffold(
appBar: new AppBar(
title: const Text('Favorited info Plate '),),body: new ListView(children: divided),);
},);
}
Widget _buildDataList() {
return ListView.builder(
itemCount: mydata.length,padding: const EdgeInsets.all(8.0),itemBuilder: (context,int index) {
return _buildrowInfo(mydata[index]);
});
}
Widget _buildrowInfo(Map myinfo) {
final bool favourited = _savedata.contains(myinfo);
void _favorscreen() {
setState(() {
if (favourited) {
_savedata.remove(myinfo);
} else {
_savedata.add(myinfo);
}
});
}
return Directionality(
textDirection: TextDirection.rtl,child: Card(
child: ListTile(
visualDensity: VisualDensity.comfortable,title: Text(myinfo['type']),trailing: new IconButton(
icon: Icon(favourited ? Icons.favorite : Icons.favorite_border),color: favourited ? Colors.red : null,onpressed: _favorscreen,);
}
}
解决方法
可以使用 shared_preferences 在本地存储数据。 您只需要一个 SharedPreferences 实例。
class ExampleWidget extends StatefulWidget {
@override
_ExampleWidgetState createState() => _ExampleWidgetState();
}
class _ExampleWidgetState extends State<ExampleWidget> {
SharedPreferences sharedPreferences;
@override
void initState() {
super.initState();
Future.delayed(Duration.zero,() async {
sharedPreferences = await SharedPreferences.getInstance();
});
}
然后,为了读取或写入数据,sharedPreferences 是一个键值数据库,并公开了 setter 和 getter。它不允许存储 Set,因此您需要根据您执行的操作对数据负载进行编码和解码。
Future<bool> _writeData(Set<Map> setOfMaps) {
return sharedPreferences.setString(
'your_key',jsonEncode(setOfMaps.toList()),);
}
Set<Map> _readData() {
final encodedData = sharedPreferences.getString('your_key');
return jsonDecode(encodedData).toSet();
}