【问题标题】:RangeError (index): Invalid value: Not in inclusive range 0..1: 2RangeError(索引):无效值:不在包含范围 0..1:2
【发布时间】:2021-07-08 02:34:57
【问题描述】:

在这个应用程序中,我试图获取基于“听”事件的查询。如果数据库有任何变化,手机屏幕中的数据也会发生变化。 下面是从数据库中获取数据的代码。

  quizStart(){
    FirebaseFirestore.instance.collection('quizes').doc(docId).get().then((value) {
      length = value.data()['questions'].length;
    });

    ref = FirebaseFirestore.instance.collection('quizes').doc(docId).collection('sessions').doc(recId).snapshots().listen((event) {
      var op = event.data();
      print('getData: $length');
      if(length == op['session']['index']){
        print('length: $length op: ${op['session']['index']}');
        showExitDialog('You have Completed the Quizi...');
      }else
      if(op['session']['active'] == false)
        showExitDialog('The Quizi has been ended..');
      else
       if(op['session']['createdAt'] == null )
        showDialog();
      else {
        Future.delayed(Duration(seconds: 3));
        Navigator.pushReplacement(
            context,
            MaterialPageRoute(
                builder: (context) => AnswersPage(
                    docId: docId, recId: recId, playerName: playerName)));
      
      }
    });
  }

我正在使用 Gridview 构建器显示数据。

StreamBuilder(
                stream: sessionQuery,
                builder: (context,AsyncSnapshot<DocumentSnapshot> snapshot){
                  if(snapshot.hasError)
                    return Text('Error: ${snapshot.error}');
                  switch (snapshot.connectionState){
                    case ConnectionState.waiting: return Text('Loading ...');
                    default: queIndex = snapshot.data['session']['index'];
                    return StreamBuilder(
                      stream: questionTypeQuery,
                        builder: (BuildContext context,AsyncSnapshot snap){
                          if(snap == null && snap.hasError)
                            return Text('Error: ${snap.error}');
                          switch (snap.connectionState){
                            case ConnectionState.waiting: return Text('Quizi! is Loading ... Please Wait');
                            default:
                           answerType = snap.data['questions'][queIndex]['answertype'].toString();
                              points = snap.data['questions'][queIndex]['points'].toString();
                              question =snap.data['questions'][queIndex]['question'].toString();
                              quesLength = snap.data['questions'][queIndex]['answers'].length;
                                return RubberBand(
                                  key: gridAnim,
                                  child: GridView.builder(
                                    scrollDirection: Axis.vertical,
                                    shrinkWrap: true,
                                    gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount:2),
                                    itemCount: quesLength,
                                    itemBuilder: (BuildContext context, int index){
                                      return InkWell(
                                          onTap: (){
                                         showDialog('Look Out for the next question...');
                                          },

                                          child: Padding(
                                              padding: const EdgeInsets.all(15.0),
                                              child: Material(
                                                elevation: 5,
                                                borderRadius: new BorderRadius.circular(20.0),
                                                child: Container(
                                                  decoration: BoxDecoration(
                                                    boxShadow: [
                                                      BoxShadow(
                                                        color: Colors.yellowAccent.withOpacity(0.5),
                                                        offset: const Offset(1.0, 1.0,), blurRadius: 5.0, spreadRadius: 0.5,),
                                                      BoxShadow(color: Colors.white,
                                                        offset: const Offset(0.0, 0.0), blurRadius: 0.0, spreadRadius: 0.0,), ],
                                                    border: Border.all(color: Colors.lightGreenAccent, width: 2.0, style: BorderStyle.solid),
                                                    color: Colors.deepPurple[500], borderRadius: new BorderRadius.circular(20.0),
                                                  ),
                                               child: Center(child:
                                                  Text(snap.data['questions'][queIndex]['answers'][index]['answer'].toString(),
                                                      style: GoogleFonts.bubblegumSans(color: Colors.white, fontSize: 25,))),
                                                ),
                                              )

                                          ));
                                    },
                                  ),
                                );
                          }
                  });
                }}
              ),

上述代码的第 9 行出现错误。

即使 quizStart() 中的条件有效,我也遇到范围错误。

谁能帮我解决这个问题?

【问题讨论】:

  • 感谢@PareshMangukiya 的回复。我正在使用嵌套的 Streambuilder,然后我返回 GridView.builder 并且其中的 itemcount 工作正常。如果您检查代码,我正在使用一个流构建器,它返回另一个流构建器,然后返回 GridView 构建器。问题出在第一个流构建器上。你能帮我解决这个问题吗?

标签: flutter dart


【解决方案1】:

我只是用来显示第二个Streambuilder。

(例如)

If(condition)
 return Widget
else
 return StreamBuilder.

现在我得到了所需的输出。

我不知道这是解决此错误的正确方法。但这对我有用。

谢谢。

【讨论】:

    猜你喜欢
    • 2021-10-07
    • 2021-03-21
    • 2022-11-23
    • 2021-02-04
    • 2019-11-01
    • 2020-07-06
    • 1970-01-01
    • 2021-08-14
    • 2021-06-16
    相关资源
    最近更新 更多