将用户图标输入保存为共享首选项

时间:2020-08-24 14:23:31

标签: flutter icons sharedpreferences

我仍在努力将iconData保存到待办事项应用程序的设备存储中,但出现此错误:

将对象转换为可编码对象失败:“ IconData”的实例

在调试控制台中添加待办事项。

如果我取出iconData,则“待办事项”项已正确保存,当我将其放回时,会收到该错误。

import 'package:flutter/foundation.dart';

class ToDo{
  final String id;
  final String title;
 
 
  final IconData icon;
  

  const ToDo({
    @required this.id, 
    @required this.title,
    @required this.icon,
    
  });

  Category.fromMap(
    Map map,
  )   :
      
        this.id = map['id'],
        this.title = map['title'],
        this.icon = map['icon'],
       

  Map toMap() {
    return {  
      'id': this.id,
      'title': this.title,
      'icon': this.icon,
      
    };
  }
  
}

在我的主脚本中,

  List<ToDo> _userToDo = List<ToDO>();

  SharedPreferences sharedPreferences;
  @override
  void initState() {
    initSharedPreferences();
    super.initState();
  }

  initSharedPreferences() async {
    sharedPreferences = await SharedPreferences.getInstance();
    loadDataTodo();
    
  }

  void saveDataTodo() {
    List<String> spList = _userTodo
        .map((todo) => json.encode(todo.toMap()))
        .toList();
    sharedPreferences.setStringList(todo, spList);
  }

  void loadDataTodo() {
    List<String> spList = sharedPreferences.getStringList(todo);
    _userTodo = spList
        .map((todo) => todo.fromMap(json.decode(todo)))
        .toList();
    setState(() {});
  }

请帮助我-我是新来的人

2 个答案:

答案 0 :(得分:1)

IconData的需求

  • int codePoint;
  • String fontFamily;
  • String fontPackage;
  • bool matchTextDirection;

您可以将它们保存到存储中,并用于(重新)创建IconData。

赞:

Category.fromMap(
    Map map,
  )   :
      
        this.id = map['id'],
        this.title = map['title'],
        this.icon = IconData(icon: map['codePoint'],
                      fontFamily: map['fontFamily'],
                      fontPackage: map['fontPackage'],
                      matchTextDirection: map['matchTextDirection'],
                    ),
),
       

  Map toMap() {
    return {  
      'id': this.id,
      'title': this.title,
      'codePoint': this.icon.codePoint,
      'fontFamily': this.icon.fontFamily,
      'fontPackage': this.icon.fontPackage,
      'matchTextDirection': this.icon.matchTextDirection,
      
    };
  }

答案 1 :(得分:0)

我建议您通过抖动使用localstorage pkg,而不要对图标数据使用sharedPreferences。