Как получить среднее количество звезд (значит, результат должен быть 1,5)? Примечание. Значение, которое нужно получить, не имеет индекса, потому что оно не находится в ListView.builder. Ниже приведен пример кода json, и именно так я пробовал до сих пор.

JSON

{
    "message": "feedbacks for restaurant branch returened",
    "data": [
        {
            "id": "4",
            "comment": "Investor Operations Coordinator",
            "star": 1,
        }
        {
            "id": "4",
            "comment": "Investor Operations Coordinator",
            "star": 2,
        }
    ]
 }

DART

  Widget buildReviewNumbers(List<FeedbacksData> data) {
    return Column(
      children: [
        for (int index = 0; index < data.length; index++)
          Text(
            data[index].star.toString(),
            style: TextStyle(fontWeight: FontWeight.w900, fontSize: 30.0),
          ),
        
      ],
    );

}

0
Mohammed Nabil 17 Сен 2021 в 19:02

3 ответа

Лучший ответ

Вставьте его на DartPad

final map = {
  "message": "feedbacks for restaurant branch returened",
  "data": [
    {
      "id": "4",
      "comment": "Investor Operations Coordinator",
      "star": 1,
    },
    {
      "id": "4",
      "comment": "Investor Operations Coordinator",
      "star": 2,
    }
  ]
};


void main() {
  
  final data = map['data'] as List<Map<String, dynamic>>;
  
  var total = 0;
  
  data.forEach((e) {
    total += e['star'] as int;
  });
  
  print(total/ data.length);
}

Для вашего случая:

Widget buildReviewNumbers(List<FeedbacksData> data) {
    var total = 0;
  
    data.forEach((e) {
      total += e.star;
    });

    return Text(
      '${total/data.length}',
      style: TextStyle(fontWeight: FontWeight.w900, fontSize:30.0),
    );
}
1
pedro pimont 17 Сен 2021 в 16:53

Ваши jsondata типа Map dynamic должны быть преобразованы в список Feedbacks в соответствии с вашим кодом. После этого просто используйте оператор карты для просмотра ваших данных.

Column(
    children: data.map((item) => Text(item.star.toString())).toList(); 
);

Из-за отсутствия дополнительной информации о том, как выглядят данные отзывов, я сократил их до этого.

0
Patrick Obafemi 17 Сен 2021 в 16:41

Вы можете использовать reduce чтобы получить общее значение оценок, затем разделите его на количество оценок. См. Конкретный пример на DartPad.

0
Riwen 17 Сен 2021 в 16:54