Приложение Flutter, отображающее пустой экран при попытке вызвать Future Builder - PullRequest
1 голос
/ 13 октября 2019

Я пытаюсь создать объект futureBuilder с имеющейся у меня функцией Future, которая проходит через список объектов, содержащих параметр surveyName. Я пытаюсь отобразить этот дескриптор surveyName в listView, но замечаю, что получаю пустое поле. белый экран, который не отображает оба контейнера, который, как предполагается, показывает некоторые базовые функции загрузки, и не отображает информацию о функции getSurveys.

Я новичок и в дротике, и в флаттере, поэтомуэто может иметь простое решение, но любая информация будет полезна. Метод getSurveys, приведенный ниже в печати, отображает оба имени в печати, поэтому я знаю, что информация поступает правильно для этой конкретной функции, но мне интересно, почему она не работает внутри futureBuilder.

Операторы печати 1 и 2 выполняются, но я замечаю, что оператор печати 3 не таков, что listView Builder не вызывается по какой-то странной причине, которая может быть причиной этой дилеммы, но мне интересно, почемуКонтейнер, который должен показывать загрузку ... тоже не работает правильно. Выход ниже этой функции.

Future<List<Survey_List>> getSurveys() async{
  Map map = {
    'Type': "getSurveys"
  };
  var _list = [];
  List<Survey_List> surveys = [];
  getPost(map).then((Map value){
    _list.addAll(value["survey"]);

    for (int i = 0; i < _list.length; i++){
      Survey_List survey_list = Survey_List(surveyName: _list[i].toString() ,surveyDescription: "", surveyVersion: "");
      surveys.add(survey_list);
      print(survey_list.surveyName);
    }
  });

  return surveys;
}

Вывод выглядит следующим образом:

I/flutter ( 2020): 2

I/flutter ( 2020): 1

I/flutter ( 2020): {"survey":["Survey","Surve3ww"]}

I/flutter ( 2020): Survey

I/flutter ( 2020): Surve3ww
import 'dart:convert';
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter_application/Http.dart';
import 'Config.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

class Survey_List extends StatefulWidget {
  String surveyName;
  String surveyDescription;
  String surveyVersion;

  Survey_List({
    this.surveyName,
    this.surveyDescription,
    this.surveyVersion,
    Key key,
  }) : super (key: key);
  @override
  _SurveyListState createState() => _SurveyListState();
}

class _SurveyListState extends State<Survey_List> {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text("Surveys"),
      ),
      body: new Container(
        child: new FutureBuilder <List<Survey_List>>(
          future: getSurveys(),
          builder: (BuildContext context, AsyncSnapshot snapshot) {
            List<Survey_List> surveys = snapshot.data;
            if (snapshot.hasData) {
              print(1);
              return new ListView.builder(
                itemCount: snapshot.data.length,
                itemBuilder: (BuildContext context, int index) {
                  print(3);
                  Survey_List survey_list = surveys[index];
                  print(survey_list.toString());
                  return new ListTile(
                    title: new Text(survey_list.surveyName)
                  );
                },
              );
            }
            else{
              print(2);
              return new Container(
                child: new Center(
                  child: new Text("Loading...")
                )
              );
            }
          },
        ),
      ),
    );
  }
}
...