Как отображать данные после вызовов API (новинка для флаттера) - PullRequest
0 голосов
/ 01 марта 2020
class newProductSlider extends Model {
 String title;
 String price;
 String compareAtPrice;
 String imageUrl;

 newProductSlider({
   this.title,
   this.price,
   this.compareAtPrice,
   this.imageUrl
 });

 List<dynamic> slides =[];

 Widget parseData(data, context){

  String Title = "Foo"; /*<----- Change This Value during the fetchp Call*/

  Future<Map<String, dynamic>> fetchp(thisId) async {
    http.Response response = await http.get(
      "${URLS.urlsp_base}/$thisId.json"
    );

    if (response.statusCode != 200) return null;

    Map<String, dynamic> product = Map<String, dynamic>.from(json.decode(response.body)['product']);

    Title = product["tital"]; /*<----- I tried this to change the String "Title" value but not Working*/

  return product;
}

Future<List<Map<String, dynamic>>> fetchc(thisId) async {
  http.Response response = await http.get(
      "${URLS.urlsc_base}/$thisId/products.json?limit=10"
  );

  if (response.statusCode != 200) return null;
  void _startProcess() async{
    await List<Map<String, dynamic>>.from(json.decode(response.body)['products']).forEach((value) {
      print(value["id"]);
      fetchp(value["id"]);
    });
    /*return List<Map<String, dynamic>>.from(json.decode(response.body)['products']);*/
  }
  _startProcess();
  /*return _startProcess();*/
}

fetchc(data["data"][0]["itemId"]);

  this.slides.add(
      newProductSlider(
        title: Title,
      )
  );

 return display(context);
}

Widget display(BuildContext context){

List<Widget> x = [];

this.slides.forEach((value){
  x.add(
    Container(
      decoration: new BoxDecoration(
        color: HexColor("#FFFFFF"),
          borderRadius: new BorderRadius.all(
            const Radius.circular(5),
          )
      ),
      height: MediaQuery.of(context).size.width / 1,
      width: MediaQuery.of(context).size.width / 2.25,
      margin: EdgeInsets.symmetric(horizontal: 5.0, vertical: 2.5),
      child: Text(value.title),
    )
  );
});

return Container(
  padding: EdgeInsets.fromLTRB(5, 7.5, 5, 7.5),
  height: MediaQuery.of(context).size.width / 2 + 70,
  decoration: new BoxDecoration(
    color: HexColor("#FF0055"),
    //borderRadius: new BorderRadius.only( topLeft: const Radius.circular(5.0), topRight: const Radius.circular(5.0)),
    borderRadius: new BorderRadius.only(
        bottomLeft: const Radius.circular(5),
        bottomRight: const Radius.circular(5)
    ),
  ),
  child: ListView(
    scrollDirection: Axis.horizontal,
    children: x,
  ),
);

}

}

Вышесказанное - это то, что я начал, поэтому в основном я хочу отобразить все продукты , которые поступают из Collection Id в представлении списка , для уточнения мне нужно 2 вызова API.

Первый вызов API . чтобы получить Продукты по этой коллекции с использованием идентификатора коллекции , и этот вызов API вернет только идентификаторы продукта .

Второй вызов API . для получения полной информации о продукте на основе результатов первого вызова API

...