Flutter 颤振将一些值添加到具有共享首选项的列表中

Flutter 颤振将一些值添加到具有共享首选项的列表中,flutter,Flutter,我想创建一个ToDo应用程序。我将任务输入textField并使用setString保存任务,使用getString获取任务并将其添加到我的列表中,但当我将新任务输入textField时,我以前的值丢失,只显示我的新值。我怎样才能解决这个问题 我的getString class TodoListState extends State<TodoList> { List<String> _todoItems = []; @override void initSt

我想创建一个ToDo应用程序。我将任务输入textField并使用setString保存任务,使用getString获取任务并将其添加到我的列表中,但当我将新任务输入textField时,我以前的值丢失,只显示我的新值。我怎样才能解决这个问题

我的getString

class TodoListState extends State<TodoList> {
  List<String> _todoItems = [];

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    getLocalData();
  }

  Future getLocalData() async {
    SharedPreferences preferences = await SharedPreferences.getInstance();
    setState(() => _todoItems.add(preferences.getString("key")));
  }

让我们看看你在做什么:

您可以从获取SharedReferences上的内容开始。为了举例,让我们从零开始。然后,在文本字段中输入一个值。按下该按钮后,将在SharedReferences上保存一个字符串。然后,输入另一个任务,通过保存该值,您将覆盖正在使用的键

那么,你应该怎么做? 将您提交的任务添加到列表中,然后才将该列表保存到SharedReferences

因此,您应该这样做:

void savetask()异步{
_添加(itemcontroller.text);
SharedReferences首选项=等待SharedReferences.getInstance();
wait preferences.setString(“key”,_todoItems.toString());
}

但要当心!SharedReferences不支持列表!它将其保存为字符串。因此,我建议您使用,以便持久保存信息。但是这个决定取决于你。

我知道问题出在哪里了

SharedPreferences是Android中sharePreference store api和iOS中UsersDefaults的包装器。这两个API仅将密钥、值方案中的某些类型的简单数据存储到文件中

以下是两个API的文档:

下面是颤振插件的文档:

关于您的问题,值是相同的,因为您使用相同的键存储数据。(“关键”)

您总是为同一个键重写相同的值。要存储所有任务,每次保存时必须使用不同的键

您需要使用以下方法:getStringList()和setStringList()

下面是一个如何修改getLocalData()的示例:

这里是saveTask方法:

Future savetask() async {
    SharedPreferences preferences = await SharedPreferences.getInstance();
    var list = prefereces.getStringList("key");
    list.add(itemcontroller.text);
    await preferences.setStringList("key", list);
  }
} 
我希望这些解决方案和评论能够帮助您应对挑战


让我知道这是否对您有效。

谢谢您的评论。实际上我有两个不同的班。我的待办事项是头等舱。我怎样才能把待办事项传给二等?我知道sqflite通常用于大数据,但我认为我的数据很小。谢谢你的评论。我复制粘贴了您为getLocalData编写的内容,并没有任何错误,但如何使用getStringList中的两项呢。var list=prefereces.getStringList(“key”,itemcontroller.text);有一个错误。@Timurturbil很抱歉,我在编写代码时犯了一个错误,我修复了它。它不再工作了错误是_TypeError(type'String'不是type'List'的子类型)我可以与您共享我的所有项目吗
Future getLocalData() async {
    SharedPreferences preferences = await SharedPreferences.getInstance();

    setState((){ 
     
      _todoItems.clear();
      _todoItems.addAll(preferences.getStringList("key"));
});

}
Future savetask() async {
    SharedPreferences preferences = await SharedPreferences.getInstance();
    var list = prefereces.getStringList("key");
    list.add(itemcontroller.text);
    await preferences.setStringList("key", list);
  }
}