Изменить данные json из локального списка в онлайн-файл

У меня есть этот список данных как Нить, я хочу сохранить его в файле JSON и снова вызвать как Нить, чтобы сохранить его в Список, но выдает ошибку из-за типов данных

вот код

import 'package:project/models/Response.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;
final body ='''
[
  {
    "urlToImage": "assets/images/spelt_noodles.png",
    "title": "Biona Organic Spelt Noodles",
    "price": 2.99,
    "weight": 250,
    "id": 1,
    "created_at": "2019-07-07 10:44:53",
    "updated_at": "2019-07-07 10:44:53"
  },
  {
    "urlToImage": "assets/images/spelt_spaghetti.png",
    "title": "Biona Organic Spelt Noodles",
    "price": 2.99,
    "weight": 250,
    "id": 2,
    "created_at": "2019-07-07 10:44:53",
    "updated_at": "2019-07-07 10:44:53"
  },
  {
    "urlToImage": "assets/images/spelt_noodles.png",
    "title": "Biona Organic Spelt Noodles",
    "price": 2.99,
    "weight": 250,
    "id": 3,
    "created_at": "2019-07-07 10:44:53",
    "updated_at": "2019-07-07 10:44:53"
  }
]''';

class ProductsRepository{


    List<Product>  fetchAllProducts() {

    var jsonB = (jsonDecode(body) as List).cast<Map<String, dynamic>>();
    var list = jsonB.map<Response1>((e) => Response1.fromJson(e)).toList();

     List<Product> items = [];

      for (var item in list) {
        items.add(new Product(item.urlToImage, item.title, item.price, item.price, item.id));
      }

    return items;

  }

Я старался

  var response;
  String data;
  Future<String> getData() {
    response = http.get('https://example.json');
    return data = json.decode(utf8.decode(response.bodyBytes));

  }

Но выдает ошибку, Итак, как я могу получить файл json по http и преобразовать его в строку, чтобы передать его jsonDecode (тело)?

Вы можете обновить вопрос с сообщением об ошибке, пожалуйста.

Enzo Lizama 11.07.2019 01:36
0
1
38
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

response.body уже является строкой, вам не нужно ничего делать.

Future<String> getData() async {
  response = await http.get('https://example.json');
  return response.body;
}

да, но у меня проблема с загрузкой файла json, загрузка занимает несколько секунд, но флаттер не ждет этого, он выполняет следующие строки кода и возвращает Нить как Нулевой

Wail Hayaly 11.07.2019 17:20

Разница между вашим кодом и моим примером заключается в моем: getData — это асинхронная функция, и я использую await, чтобы дождаться завершения http.get.

MichaelM 11.07.2019 23:03

Другие вопросы по теме