Skip to content
Advertisement

Fetching pHp array or map as JSON data in Flutter?

I am trying to fetch some data from server using json in my flutter app. This is the function I am using.

List<String> userFriendList = ["No Friends"];  

Future<http.Response> _fetchSampleData() {
            return http.get('//link/to/server/fetcher/test_fetcher.php');
}

Future<void> getDataFromServer() async {
            final response = await _fetchSampleData();

            if (response.statusCode == 200) {
              Map<String, dynamic> data = json.decode(response.body);    
                userLvl = data["lvl"].toString();
                userName = data["name"];
                userFriendList = List();
                userFriendList = data["friendlist"];  
            } else {
              // If the server did not return a 200 OK response,
              // then throw an exception.
              print('Failed to load data from server');
            }
}

I get the usrLvl and userName right. But for userFriendList, I get the following error:

[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'List<String>'

Code on the server end (test_fetcher.php) :

<?php
    $myObj->name = "JohnDoe";
    $myObj->lvl = 24;

    $friends = array("KumarVishant", "DadaMuni", "BabuBhatt", "BesuraGayak", "BabluKaneria", "MorrisAbhishek", "GoodLuckBaba", "ViratKohli", "LeanderPaes");

    $myObj->friendlist = $friends;

    header('Content-Type: application/json');
    $myJSON = json_encode($myObj);
    echo $myJSON;
?>

Advertisement

Answer

This is a cast error: List<dynamic> != List<String>

You can convert / cast your list in several ways.

I advise you to use this library to simplify your json / Dart object conversion : https://pub.dev/packages/json_serializable

json_serializable will generate the conversion methods (fromJson and toJson) and take care of everything.

It’s easier and safer than doing it manually.

User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement