Flutter: снимок не показывает данные

Я создаю конструктор Listview с помощью метода get (вызов API). Вызов API в порядке, потому что я получаю ответ. Но в виджете snapshot.data мне показывают ноль. Я не могу решить эту проблему и не знаю, почему она так себя ведет. Пожалуйста, помогите мне.

тело ответа API

Вот мой код для вызова API

class APIService {

Future<List<EducationInfo>> getEducationInfo() async {
    String url = "$baseAPIUrl/educations";
    String _token = await SavedData().loadToken();
    String authorization = "Bearer $_token";
    var response = await http.get(url, headers: {
      'Content-Type': 'application/json',
      'Accept': 'application/json',
      "Authorization": authorization
    });
    print('API ${response.statusCode}\n API${json.decode(response.body)}');
    if (response.statusCode == 200) {
      var jsonResponse = response.body;
      var decoded = json.decode(jsonResponse);
      return decoded['success']
          .map<EducationInfo>((b) => EducationInfo.fromJson(b))
          .toList();
    } else {
      throw Exception('Failed to load Education Information');
    }
  }
}

Вот мой Model.dart

//Model

class EducationInfo {
  int id;
  String degreeName;
  int rollNumber;
  int regNumber;
  int passingYear;
  String gradeType;
  double cgpa;
  double outOfCgpa;
  String divisionName;
  String groupName;
  String subjectName;
  String boardName;
  String instituteName;

  EducationInfo({
    this.id,
    this.degreeName,
    this.rollNumber,
    this.regNumber,
    this.passingYear,
    this.gradeType,
    this.cgpa,
    this.outOfCgpa,
    this.divisionName,
    this.groupName,
    this.subjectName,
    this.boardName,
    this.instituteName,
  });

  factory EducationInfo.fromJson(Map<String, dynamic> json) {
    return EducationInfo(
      id: json['user_id'],
      degreeName: json['degree_name'],
      rollNumber: json['roll_number'],
      regNumber: json['registration_number'],
      passingYear: json['passing_year'],
      gradeType: json['grade_type'],
      cgpa: json['cgpa'],
      outOfCgpa: json['out_of_cgpa'],
      divisionName: json['division'],
      groupName: json['group_name'],
      subjectName: json['subject_name'],
      boardName: json['board'],
      instituteName: json['institute_name'],
    );
  }
}

И вот мой основной код-

class Resume extends StatefulWidget {
  @override
  _ResumeState createState() => _ResumeState();
}

class _ResumeState extends State<Resume> {
  Future<List<EducationInfo>> furuteEducationInfo;

  @override
  void initState() {
    super.initState();
    furuteEducationInfo = APIService().getEducationInfo();
  }
  @override
  Widget build(BuildContext context) {
  return Scaffold(
      resizeToAvoidBottomPadding: false,
      appBar: AppBar(
        automaticallyImplyLeading: false,
        leading: IconButton(
          icon: Icon(
            Icons.arrow_back_ios,
          ),
          onPressed: () {
            Navigator.pop(context);
          },
        ),
        title: Text("Resume"),
      ),
      body: Align(
      child: FutureBuilder(
                            future: furuteEducationInfo,
                              builder: (context, snapshot) {
                                var educationInfo = snapshot.data;
                                if (snapshot.data == null) {
                                  return Text("No Data Available ");
                                } else if (snapshot.hasData) {
                                  return ListView.builder(
                                      scrollDirection: Axis.vertical,
                                      itemCount: educationInfo.length,
                                      itemBuilder: (context, index) {
                                        var eduInfo = educationInfo[index];
                                        print(
                                            "\nEducation Info ${educationInfo[index]}");
                                        return designedContainer(
                                            _width - 30,
                                            Padding(
                                              padding: EdgeInsets.all(5.0),
                                              child: Stack(
                                                children: [
                                                  Container(
                                                    child: Column(
                                                      children: [
                                                        detailsField(
                                                            "Degree Name",
                                                            "${_checkNull(eduInfo.degreeName)}"),
                                                      ],
                                                    ),
                                                  ),
                                                  Align(
                                                    alignment:
                                                        Alignment.topRight,
                                                    child: editButton(
                                                        Icons.add, "Delete",
                                                        () {
                                                      print("Delete");
                                                    }),
                                                  )
                                                ],
                                              ),
                                            ));
                                      });
                                } else {
                                  Text("Something Went to Wrong");
                                }
                              }),
       ),
    );
  }

А вот и почтальон Скриншот-

добавьте print(snapshot); перед var educationInfo = snapshot.data; - что вы видите в логах?

pskink 24.12.2020 07:17

AsyncSnapshot<List<EducationInfo>>(ConnectionState.done, null, тип int не является подтипом типа double)

Abir Ahsan 24.12.2020 07:24

поэтому у вас есть ошибка: snapshot.error установлен на: «тип 'int' не является подтипом типа 'double'"

pskink 24.12.2020 07:25
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание API-ресурса Laravel может быть непростой задачей. Она требует глубокого понимания возможностей Laravel и лучших практик, чтобы обеспечить...
Как создать простое погодное приложение на Python с API OpenWeatherMap
Как создать простое погодное приложение на Python с API OpenWeatherMap
Этот учебник проведет вас через процесс создания простого погодного приложения с помощью Python и OpenWeatherMap API.
Пакеты Java
Пакеты Java
Пакет java - это группа классов, интерфейсов и подпакетов схожего типа. Думайте об этом как о папке в каталоге файлов. Мы используем пакеты, чтобы...
Как использовать API парсинга квитанций с помощью JavaScript за 5 минут?
Как использовать API парсинга квитанций с помощью JavaScript за 5 минут?
В этом руководстве вы узнаете, как использовать API парсинга квитанций за 5 минут с помощью JavaScript. Eden AI предоставляет простой и удобный для...
1
3
548
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

в вашем EducationInfo.fromJson методе

заменять

  cgpa: json['cgpa'] ?? 0.0,
  outOfCgpa: json['out_of_cgpa'] ?? 0.0,

Поскольку это будущее и работает асинхронно, вам нужно проверить, есть ли в моментальном снимке данные, и дождаться получения данных. Следуя коду фрагмента, как вы могли бы проверить это внутри вашего метода сборки:

 (snapshot.hasData && snapshot.data.length == 0)
                ? Container(
                    child: Center(
                      child: Column(
                        mainAxisSize: MainAxisSize.max,
                        crossAxisAlignment: CrossAxisAlignment.center,
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: <Widget>[
                          Text("Congrats, No jobs asssigned!!!")
                        ],
                      ),
                    ),
                  )
                : (snapshot.hasData)
                    ? Container(
                        child: ListView.builder(
                   .....)

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