如何对对象列表进行编码和解码,以便以后将它们存储在sharedpreferences中?

Bountx

我的代码:

import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:multi_select_flutter/multi_select_flutter.dart';
import 'package:shared_preferences/shared_preferences.dart';

class Item {
  final int id;
  final String name;

  Item({
    this.id,
    this.name,
  });

  Item.fromJson(Map<String, dynamic> json)
    : id = json['i'],
      name = json['n'];

  Map<String, dynamic> toJson() {
    return {
      'i' : id,
      'n' : name,
    };
  }
}

class ProfileScreen extends StatefulWidget {
  @override
  _ProfileScreenState createState() => _ProfileScreenState();
}

class _ProfileScreenState extends State<ProfileScreen> {
  List<Item> selectedDogSizes = [];

  @override
  void initState() {
    getData("dogSizes");
  }

  getData(String key) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    var myList;
    setState(() {
      myList = prefs.getString(key);
    });
    selectedDogSizes = jsonDecode(myList) ?? [];
  }

  setData(List<Item> items, String key) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    var myList = jsonEncode(items);
    prefs.setString(key, myList);
  }

  List<Item> dogSizes = [
    Item(id: 1, name: "Small"),
    Item(id: 2, name: "Medium"),
    Item(id: 3, name: "Big"),
  ];

  @override
  Widget build(BuildContext context) {
    return ListView(
      children: [
        MultiSelectChipField<Item>(
          items: dogSizes
              .map((item) => MultiSelectItem<Item>(item, item.name))
              .toList(),
          initialValue: selectedDogSizes,
          icon: Icon(Icons.check),
          onTap: (values) {
            selectedDogSizes = values;
            setData(selectedDogSizes, "dogSizes");
          },
        ),
      ],
    );
  }
}

我正在尝试存储是否用户选择了选项之一。为此,我使用了对象“项”的列表,每次更改选定元素的列表时,我都尝试对列表进行编码并存储它。

E/flutter (10651): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'List<Item>'
E/flutter (10651): #0      _ProfileScreenState.getData (package:woofdates/screens/profileScreen.dart:47:5)
E/flutter (10651): <asynchronous suspension>
E/flutter (10651): #1      _ProfileScreenState.initState (package:woofdates/screens/profileScreen.dart:38:5)
E/flutter (10651): #2      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4765:58)
E/flutter (10651): #3      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
E/flutter (10651): #4      Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
E/flutter (10651): #5      Element.updateChild (package:flutter/src/widgets/framework.dart:3324:20)
E/flutter (10651): #6      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter (10651): #7      Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter (10651): #8      StatelessElement.update (package:flutter/src/widgets/framework.dart:4708:5)
E/flutter (10651): #9      Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
E/flutter (10651): #10     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter (10651): #11     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter (10651): #12     ProxyElement.update (package:flutter/src/widgets/framework.dart:4987:5)
E/flutter (10651): #13     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
E/flutter (10651): #14     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter (10651): #15     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter (10651): #16     ProxyElement.update (package:flutter/src/widgets/framework.dart:4987:5)
E/flutter (10651): #17     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
E/flutter (10651): #18     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5647:32)
E/flutter (10651): #19     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6246:17)
E/flutter (10651): #20     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
E/flutter (10651): #21     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter (10651): #22     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
E/flutter (10651): #23     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter (10651): #24     StatefulElement.update (package:flutter/src/widgets/framework.dart:4832:5)
E/flutter (10651): #25     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
E/flutter (10651): #26     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter (10651): #27     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter (10651): #28     ProxyElement.update (package:flutter/src/widgets/framework.dart:4987:5)
E/flutter (10651): #29     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
E/flutter (10651): #30     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter (10651): #31     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
E/flutter (10651): #32     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter (10651): #33     StatefulElement.update (package:flutter/src/widgets/framework.dart:4832:5)
E/flutter (10651): #34     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
E/flutter (10651): #35     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6125:14)
E/flutter (10651): #36     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
E/flutter (10651): #37     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter (10651): #38     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter (10651): #39     StatelessElement.update (package:flutter/src/widgets/framework.dart:4708:5)
E/flutter (10651): #40     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
E/flutter (10651): #41     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6125:14)
E/flutter (10651): #42     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
E/flutter (10651): #43     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter (10651): #44     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
E/flutter (10651): #45     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter (10651): #46     StatefulElement.update (package:flutter/src/widgets/framework.dart:4832:5)
E/flutter (10651): #47     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
E/flutter (10651): #48     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter (10651): #49     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
E/flutter (10651): #50     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter (10651): #51     StatefulElement.update (package:flutter/src/widgets/framework.dart:4832:5)
E/flutter (10651): #52     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
E/flutter (10651): #53     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter (10651): #54     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter (10651): #55     ProxyElement.update (package:flutter/src/widgets/framework.dart:4987:5)
E/flutter (10651): #56     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
E/flutter (10651): #57     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter (10651): #58     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter (10651): #59     ProxyElement.update (package:flutter/src/widgets/framework.dart:4987:5)
E/flutter (10651): #60     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
E/flutter (10651): #61     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter (10651): #62     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
E/flutter (10651): #63     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter (10651): #64     StatefulElement.update (package:flutter/src/widgets/framework.dart:4832:5)
E/flutter (10651): #65     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
E/flutter (10651): #66     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter (10651): #67     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
E/flutter (10651): #68     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter (10651): #69     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2730:33)
E/flutter (10651): #70     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:913:20)
E/flutter (10651): #71     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:302:5)
E/flutter (10651): #72     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1117:15)
E/flutter (10651): #73     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1055:9)
E/flutter (10651): #74     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:971:5)
E/flutter (10651): #75     _rootRun (dart:async/zone.dart:1190:13)
E/flutter (10651): #76     _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter (10651): #77     _CustomZone.runGuarded (dart:async/zone.dart:997:7)
E/flutter (10651): #78     _invoke (dart:ui/hooks.dart:251:10)
E/flutter (10651): #79     _drawFrame (dart:ui/hooks.dart:209:3)
E/flutter (10651): 

我还尝试将包json_serializable与相同错误的结果一起使用。我也可以将其设为id的整数列表,然后将其编码为json,但是我也不知道如何从多个对象中获取整数。

javachipper

像这样解码:

getData(String key) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    var myList;
    setState(() {
      myList = prefs.getString(key);
    });
    var decodedString= jsonDecode(myList) ?? [];
     selectedDogSizes  = (decodedString as List).map((i) => Item.fromJson(i)).toList();
  }

然后:

 onTap: (values) {
            selectedDogSizes = values;
            setData(selectedDogSizes, "dogSizes");
            getData("dogSizes");
            setState((){});
          },

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

AngularJS如何对对象中的项目进行分组/组织以便在视图中显示它们

如何在flutter中对对象列表中的json字符串进行编码

如何基于列表中的属性对对象列表进行排序

如何在Objective-C中对数字数组进行编码和解码?

如何快速对NSData进行结构编码和解码?

在字符串中编码和解码javascript对象

如何编码和解码此类

如何在JSP中对对象列表进行排序

如何在Java 8中对对象列表进行分页?

如何按Typescript中的键值对对象列表进行排序

如何对对象中包含的列表进行排序

如何存储列表/数组/任何类型的集合。或键入名称,以便可以将它们作为类型传递给函数

如何编码和解码 QueryString 中包含特殊字符的 Url?

如何在python中编码和解码路径?

如何在C#中编码和解码特殊字符

如何在 google protobuff 中编码和解码向量

Mongodb:如何对 $lookup 的结果进行分组并将它们映射到包含匹配键的列表对象?

如何对对象列表进行排序

Python,如何对对象列表进行排序?

如何对对象的数组列表进行排序?

如何对对象列表进行排序

如何动态存储 .json 文件中的值并将它们与 python 中的用户输入进行比较?

如何在文件中写入非序列化对象(例如Shapes),以便以后可以读取它们

从URL角度,编码和解码对象

如何以 JSON 格式从多个对象中获取值并将它们存储在数组中?

Java 8:惯用地创建一个Comparator以便根据对象在列表中的索引对对象进行排序

如何正确地按降序对对象数组进行排序并在Java中搜索它们?

如何在反应中对对象数组进行排序并渲染它们?

在React中对对象数组进行排序并渲染它们