0

I have a String List in my shared preferences that's meant to store account numbers which can then be used to make a call from the API:

List<String> accountList = [];

Future _getListData() async {
SharedPreferences myPrefs = await SharedPreferences.getInstance();
for(var i = 0; i < myPrefs.getStringList('accounts').length; i++){
  accountList.add(myPrefs.getStringList('accounts')[i]);
}
//prints values from shared preferences
print(accountList);
}

Future<List<dynamic>> fetchData() async {
_getListData();
//prints an empty list
print(accountList);
try {
  if (accountList == null) {
    var result = await http.get(apiUrl);
    List<dynamic> accountInfo = (json.decode(result.body));
    return accountInfo;
  } else {
    List<dynamic> accountInfo = [];
    for(var i = 0; i < accountList.length; i++){
      var result =
      await http.get(apiUrl + "/api/Data/GetCustomer?accntnum=" + accountList[i]);
      accountInfo.add(json.decode(result.body));
    }
    return accountInfo;
  }
} catch (e) {
  print(e);
}
}

When calling the Future function "fetchData()" from my FutureBuilder in the widget it returns an empty list. However within the scope of the "_getListData()" function it prints the list witht he appropriate values. How can I make it such that "fetchData()" gets the intended list?

Kristin Vernon
  • 155
  • 1
  • 2
  • 20

1 Answers1

1

Just add an await before _getListData() here:

Future<List<dynamic>> fetchData() async {
await _getListData();
//prints an empty list
print(accountList);

croxx5f
  • 5,163
  • 2
  • 15
  • 36