无法使用共享首选项将新值附加到列表<String>。新值将是 String 类型

问题描述 投票:0回答:2

问题:

无法使用共享首选项将新值附加到

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

不确定我在上面的代码中是否做错了什么。有人可以帮忙吗?

android flutter dart flutter-dependencies dart-pub
2个回答
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);

0
投票

我不知道你想实现什么目标,但要在列表中添加一些东西,然后你 做一些像下面这样的事情

deliveryAddressConfirmed.add(prefs.getStringList('deliveryAddressConfirmed'));

此外,您在向列表添加内容之前先打印列表,所以它总是打印 0。 尝试在 setState 之后调用 print 语句。

© www.soinside.com 2019 - 2024. All rights reserved.