длина ответа сервера в http-пакете flutter

Я использую future builder для просмотра списка. Я получаю ответ от сервера. Я получаю именно то, что мне нужно. Есть единственная ошибка, которую я пытаюсь исправить. Ошибка возникает, когда я получаю данные с сервера, используяhttp.get метод: String data=response.body; Я получаю нужный мне ответ и разбираю его как String catagoeryId=jsonDecode(data)["data"][i]["_id"];

Теперь проблема, с которой я столкнулся, когда я декодировал этот json, я передал эту строку внутри своего конструктора, используя цикл for. Но я должен указать длину для остановки цикла. длина, которую я использую:data.length. Он декодирует мой ответ json и передается в мой конструктор. Но после того, как длина json закончилась, он перестал работать и разбился. Я проверил длину data.length это что-то около 344. Но у меня всего 3 объекта. Вот код, который я использую для синтаксического анализа:

Future<List<ProductCatagoery>> getCatagories()async{
http.Response response = await http.get("http://138.68.134.226:3020/api/category/");
 List<ProductCatagoery> products=[];
  String data=response.body;
  for (int i=0;i<=data.length;i++) {
String catagoeryId=jsonDecode(data)["data"][i]["_id"];
String catagoeryThumb=jsonDecode(data)["data"][i]["thumb"];
String catagoeryName=jsonDecode(data)["data"][i]["name"];
bool catagoeryActive=jsonDecode(data)["data"][i]["active"];


print('name is: $catagoeryId : $catagoeryThumb : $catagoeryName : $catagoeryActive');
  ProductCatagoery newUser= 
  ProductCatagoery(catagoeryId,catagoeryThumb,catagoeryName,catagoeryActive);
  products.add(newUser);
  print('added ${newUser.id}');
  print('length is${products.length}');
  print('last length data: ${data.length}');
 } 
   return products;
 }

Класс модели:

class ProductCatagoery {
final String id;
 final String thumb;
 final String name;
 final bool active;
  ProductCatagoery(this.id,this.thumb,this.name,this.active);
 }

Ответ:

{"success": true, "data": [{"_ id": "5f13cc94c63abc03522eff41", "thumb": "category/fresh-meat.jpg","name":"Fresh Meat", "active": true}, {"_ id": "5f13cc73c63abc03522eff40", "thumb": "category/fruit-овощ.jpg","name":"Фрукты и овощи","active":true},{"_id":"5f13cca5c63abc03522eff42","thumb":"category/grocery.jpg","name":"Бакалея","active":true}]}

Примечание: мне просто нужно String data=response.body;длина данных. Я не использую карту и т. Д. Я также показывал продукты в списке, если я возвращаю список продуктов после 1, 2 или 3-й итерации.

1 ответ

Решение

Сначала расшифруйте полученный ответ

final responseFormat = json.decode(response.body);

Затем вы можете получить список, который хотите прокрутить, с помощью этого

final data = responseFormat["data"];

Наконец, вы можете получить длину списка: data.length.

Полный код

List<ProductCatagoery> products = [];
  final responseFormat = json.decode(response.body);
  final data = responseFormat["data"];
  for (int i = 0; i < data.length; i++) {
    String catagoeryId = data[i]["_id"];
    String catagoeryThumb = data[i]["thumb"];
    String catagoeryName = data[i]["name"];
    bool catagoeryActive = data[i]["active"];

    print(
        'name is: $catagoeryId : $catagoeryThumb : $catagoeryName : $catagoeryActive');
    ProductCatagoery newUser = ProductCatagoery(
        catagoeryId, catagoeryThumb, catagoeryName, catagoeryActive);
    products.add(newUser);
    print('added ${newUser.id}');
    print('length is${products.length}');
    print('last length data: ${data.length}');
  }
Другие вопросы по тегам