问题:
无法使用共享首选项将新值附加到
List<String>
。新值的类型为 String
。
这是我的定义和方法:
List<dynamic> deliveryAddressConfirmed = new List(5);
SharedPreferences prefs;
:
: //does something here...& on a specific condition call for gotNewNiceAddress(xxxx);
:
gotNewNiceAddress(dynamic capturedNewAddress) async {
print(capturedNewAddress);
final SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString("deliveryAddressConfirmed", capturedNewAddress);
var x = deliveryAddressConfirmed.length;
print("New length = $x");
setState(() {
deliveryAddressConfirmed =
prefs.getStringList('deliveryAddressConfirmed');
});
}
控制台输出:
D/ViewRootImpl(17086): ViewPostImeInputStage ACTION_DOWN
I/flutter (17086): Mountain valley, north 16th street, JC -20293
I/flutter (17086):
I/flutter (17086):
I/flutter (17086): New length = 0
不确定我在上面的代码中是否做错了什么。有人可以帮忙吗?
您可以使用
prefs.setString
保存单个字符串,但当您使用 prefs.getStringList
读取时,会读取到字符串列表。
那是行不通的。你应该读你写的东西。我不知道你想要什么。单弦?字符串列表?但您只能准确读取您输入的内容。您的决定。
如果您想添加到现有列表,则必须读取该列表,追加到其中,然后再次将其另存为列表。
// read the old list
final formerSavedList = prefs.getStringList('deliveryAddressConfirmed');
// append the new data to it
formerSavedList.add(newElement);
// and save the new list back to storage
await prefs.setStringList('deliveryAddressConfirmed', formerSavedList);
我不知道你想实现什么目标,但要在列表中添加一些东西,然后你 做一些像下面这样的事情
deliveryAddressConfirmed.add(prefs.getStringList('deliveryAddressConfirmed'));
此外,您在向列表添加内容之前先打印列表,所以它总是打印 0。 尝试在 setState 之后调用 print 语句。