【问题标题】:I can't take out data from list inside future function. Flutter/Dart我无法从未来函数中的列表中取出数据。颤振/飞镖
【发布时间】:2020-12-19 12:15:48
【问题描述】:

我是这门语言的初学者,我不知道如何处理它。我想从这段代码中得到函数 getDocs() 将从 firestore 中取出数据。发生后,statefull 小部件将从列表中构建文本,该列表将包含来自 firestore 的数据。错误很明显,表明我的列表是空的:Error from device

我的代码看起来:

class TestBasic extends StatefulWidget {
  int time;
  int amount;
  TestBasic({this.time, this.amount});

  @override
  _TestBasicState createState() => _TestBasicState();
}

class _TestBasicState extends State<TestBasic> {

  List<Map> listOfQuestionsMap = [];
  List<Question> listOfQuestions = [];

  Future getDocs() async {
    QuerySnapshot querySnapshot =
        await Firestore.instance.collection("questions").getDocuments();
    for (int i = 0; i < widget.amount; i++) {
      var a = querySnapshot.documents[i];
      listOfQuestionsMap.add(a.data);
    }
     List<Question> listOfQuestionsQ = listOfQuestionsMap.map((doc) {
      return Question(
        answer: doc['answer'] ?? '',
        questionText: doc['questionText'] ?? '',
        type: doc['type'] ?? '',
        substantiation: doc['substantiation'] ?? '',
        article: doc['article'] ?? ''
        );
    }).toList();
    print(listOfQuestionsQ[1].answer);
    setState(() {
      listOfQuestions.addAll(listOfQuestionsQ);
    });
  }

  @override
  void initState() {
    getDocs();
    super.initState();
  }

  @override

  Widget build(BuildContext context) {
    return Padding(
        padding: const EdgeInsets.symmetric(horizontal: 40.0),
        child: Container(
                alignment: Alignment.center,
                height: Responsive.height(40, context),
                decoration: BoxDecoration(
                    border: Border.all(color: Colors.black, width: 1.0)),
                child: Text(listOfQuestions[0].answer,
                    textAlign: TextAlign.center,
                    style: TextStyle(
                      decoration: TextDecoration.none,
                      color: Colors.black,
                      fontSize: 20.0,
                    )),
              ),
            );

有问题模型:

class Question {
  final String type;
  final String questionText;
  final String answer;
  final String substantiation;
  final String article;

  Question({this.answer, this.questionText, this.type, this.substantiation, this.article});
}

谁能解释我如何得到我想要的结果?

【问题讨论】:

    标签: android firebase flutter google-cloud-firestore


    【解决方案1】:

    您收到该错误是因为在getDocs 更新列表之前调用了build,并且您的listOfQuestions 为空并且您尝试在索引(0) 处获取值。

    尝试使用:

    Text(
     listOfQuestions.isEmpty ? "Loading" : listOfQuestions[0].answer
    )
    

    这样,当listOfQuestions为空时,Text显示正在加载,当listOfQuestions有数据时,显示listOfQuestions[0].answer的值

    【讨论】:

      猜你喜欢
      • 2021-01-24
      • 2019-11-22
      • 2019-12-29
      • 2020-08-12
      • 2022-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多