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