'I create flutter with api call but the data not showing at fresh install

So I create an app with rest API, but the data not showing on a fresh install

This is for gettoken and save to shared prefs

getInit() async {
    String myUrl = "$serverUrl/get-token";
    http.Response response = await http.post(Uri.parse(myUrl),
        body: {'secret': 'code'});
    debugPrint(response.statusCode.toString());
    debugPrint(response.body);

    var data = json.decode(response.body)["data"];
    _save(data["access_token"]);
    // return data;
  }

  //SAVE TOKEN
  _save(String token) async {
    final prefs = await SharedPreferences.getInstance();
    const key = 'token';
    final value = token;

    prefs.setString(key, value);
    debugPrint("new token save " + value);
  }

This for getlist item, need bearer access token from shared prefs

getRecList() async {
    final prefs = await SharedPreferences.getInstance();
    const key = 'token';
    final value = prefs.get(key) ?? 0;

    String myUrl = "$serverUrl/home";
    http.Response response = await http.get(Uri.parse(myUrl), headers: {
      'Accept': 'application/json',
      'Authorization': 'Bearer $value'
    });
    debugPrint(response.body);

    if (response.statusCode == 200) {
      List data = jsonDecode(response.body)['data'];
      List<ModelKost> modelkost =
          data.map((item) => ModelKost.fromJson(item)).toList();
      return modelkost;
    } else {
      return <ModelKost>[];
    }
  }

So every time I fresh install, home page does not show any data because getRecList item is forbidden access...

The log says token success, but getRecList fails because not get access token, it only happens on fresh install if I refresh/hot reload the list showing normally ...

so I guess the function getRecList wrong here, but I have no idea to fix it ...

enter image description here



Solution 1:[1]

i think the problem is you are not waiting for token value. use await when geting value from shared preferences

So I create an app with rest API, but the data not showing on a fresh install



getRecList() async {
    final prefs = await SharedPreferences.getInstance();
    const key = 'token';
    final value =await  prefs.get(key) ?? 0; //use await here

    String myUrl = "$serverUrl/home";
    http.Response response = await http.get(Uri.parse(myUrl), headers: {
      'Accept': 'application/json',
      'Authorization': 'Bearer $value'
    });
    debugPrint(response.body);

    if (response.statusCode == 200) {
      List data = jsonDecode(response.body)['data'];
      List<ModelKost> modelkost =
          data.map((item) => ModelKost.fromJson(item)).toList();
      return modelkost;
    } else {
      return <ModelKost>[];
    }
  }

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Ashutosh singh