简体   繁体   English

RangeError(索引):无效值:有效值范围为空:0 | Flutter Firebase

[英]RangeError (index): Invalid value: Valid value range is empty: 0 | Flutter Firebase

Hy there.嘿那里。 So my problem is this when the page loads it shows the follwing error for 1-2 seconds but then the data shows perfectly.所以我的问题是,当页面加载时它会显示以下错误 1-2 秒,但随后数据显示完美。 It shouldn't have happen because i have provided "initialData" to "FutureBuilder".它不应该发生,因为我已经向“FutureBuilder”提供了“initialData”。 Can anybody tells me what i am missing.谁能告诉我我错过了什么。

Note: I cannot use if(snapshot.connectionState == ConnectionState.waiting) return CircleProgressIndicator();注意:我不能使用if(snapshot.connectionState == ConnectionState.waiting) return CircleProgressIndicator(); because i am using PageView.builder and when i move to 2nd page it refresh again and come to 1st page automatically因为我正在使用 PageView.builder 并且当我移动到第二页时它再次刷新并自动进入第一页

═══════ Exception caught by widgets library ═══════════════════════════════════
The following RangeError was thrown building FutureBuilder<List<dynamic>>(dirty, state: _FutureBuilderState<List<dynamic>>#bad68):
RangeError (index): Invalid value: Valid value range is empty: 0

The relevant error-causing widget was
FutureBuilder<List<dynamic>>
When the exception was thrown, this was the stack
#0      List.[] (dart:core-patch/growable_array.dart:177:60)
#1      _TasksState.build.<anonymous closure>
#2      _FutureBuilderState.build
#3      StatefulElement.build
#4      ComponentElement.performRebuild
...
════════════════════════════════════════════════════════════════════════════════

Here is my code:这是我的代码:

body: FutureBuilder(
        initialData: [],
        future: Future.wait([
          getRequests(),
          getCNIC(),
          ]),
        builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
          indexLength = snapshot.data[0].length;
          cnicCheck = snapshot.data[1];
          if (indexLength == 0)
            return SizedBox(
              child: Center(
                child: Text(
                  "No Buyer Requests",
                  style: TextStyle(
                      fontWeight: FontWeight.bold,
                      fontSize: 20,
                      color: kPrimaryColor),
                ),
              ),
            );
            return SizedBox(
              child: PageView.builder(
                itemCount: indexLength,
                physics: PageScrollPhysics(),
                controller: PageController(viewportFraction: 1.0),
                onPageChanged: (int index) => setState(() => _index = index),
                itemBuilder: (_, i) {
                  return SingleChildScrollView(
                    child: Card(
                      margin: EdgeInsets.all(10),
                      child: Wrap(
                        children: <Widget>[
                          ListTile(
                            leading: CircleAvatar(
                                backgroundColor: kPrimaryColor.withOpacity(0.8),
                                backgroundImage:
                                    AssetImage('assets/images/nullUser.png'),
                                child: snapshot.data[0][i]['PhotoURL'] != null
                                    ? ClipRRect(
                                        borderRadius: BorderRadius.circular(50),
                                        child: Image.network(
                                          snapshot.data[0][i]['PhotoURL'],
                                          width: 50,
                                          height: 50,
                                          fit: BoxFit.cover,
                                        ),
                                      )
                                    : ClipRRect(
                                        borderRadius: BorderRadius.circular(50),
                                        child: Image.asset(
                                          'assets/images/nullUser.png',
                                          width: 50,
                                          height: 50,
                                          fit: BoxFit.cover,
                                        ),
                                      )),
                            title: Text(
                              snapshot.data[0][i]['Email'],
                              style: TextStyle(
                                fontSize: 16,
                                fontWeight: FontWeight.w700,
                                color: Colors.black.withOpacity(0.7),
                              ),
                            ),
                            subtitle: Text(
                              snapshot.data[0][i]['Time'],
                              style: TextStyle(
                                  color: Colors.black.withOpacity(0.6)),
                            ),
                          ),
                          Padding(
                            padding: const EdgeInsets.all(16.0),
                            child: Column(
                              crossAxisAlignment: CrossAxisAlignment.stretch,
                              children: [
                                Container(
                                  decoration: BoxDecoration(
                                    borderRadius:
                                        BorderRadius.all(Radius.circular(5)),
                                    color: Colors.grey[200],
                                  ),
                                  padding: EdgeInsets.all(10),
                                  child: Text(
                                    snapshot.data[0][i]['Description'],
                                    style: TextStyle(
                                        color: Colors.black.withOpacity(0.6)),
                                  ),
                                ),
                                SizedBox(
                                  height: 8,
                                ),
                                Container(
                                  decoration: BoxDecoration(
                                      borderRadius:
                                          BorderRadius.all(Radius.circular(5)),
                                      border:
                                          Border.all(color: Colors.grey[300])),
                                  child: ListTile(
                                    leading: Icon(Icons.category_outlined),
                                    title: Text(
                                      'Category : ${snapshot.data[0][i]['Category']}',
                                      style: TextStyle(
                                        fontSize: 14,
                                        color: Colors.grey,
                                      ),
                                    ),
                                  ),
                                ),
                                SizedBox(height: 8),
                                Container(
                                  decoration: BoxDecoration(
                                      borderRadius:
                                          BorderRadius.all(Radius.circular(5)),
                                      border:
                                          Border.all(color: Colors.grey[300])),
                                  child: ListTile(
                                    leading: Icon(Icons.location_pin),
                                    title: Text(
                                      snapshot.data[0][i]['Location'],
                                      style: TextStyle(
                                        fontSize: 14,
                                        color: Colors.grey,
                                      ),
                                    ),
                                  ),
                                ),
                                SizedBox(height: 8),
                                Container(
                                  decoration: BoxDecoration(
                                      borderRadius:
                                          BorderRadius.all(Radius.circular(5)),
                                      border:
                                          Border.all(color: Colors.grey[300])),
                                  child: ListTile(
                                    leading: Icon(
                                      Icons.attach_money,
                                      color: kGreenColor,
                                    ),
                                    title: Text(
                                      'Budget : Rs.${snapshot.data[0][i]['Budget']}',
                                      style: TextStyle(
                                        fontSize: 14,
                                        color: kGreenColor,
                                      ),
                                    ),
                                  ),
                                ),
                                SizedBox(height: 8),
                                Container(
                                  decoration: BoxDecoration(
                                      borderRadius:
                                          BorderRadius.all(Radius.circular(5)),
                                      border:
                                          Border.all(color: Colors.grey[300])),
                                  child: ListTile(
                                    leading: Icon(Icons.timer),
                                    title: Text(
                                      'Duration : ${snapshot.data[0][i]['Duration']}',
                                      style: TextStyle(
                                        fontSize: 14,
                                        color: Colors.grey,
                                      ),
                                    ),
                                  ),
                                ),
                                SizedBox(
                                  height: 35,
                                ),
                                RaisedButton(
                                      padding:
                                          EdgeInsets.symmetric(vertical: 10),
                                      child: Text('Send Offer'),
                                      textColor: Colors.white,
                                      color: Colors.green,
                                      onPressed: () {
                                        if (cnicCheck == "verified") {
                                          print(cnicCheck);
                                          Navigator.push(
                                            context,
                                            MaterialPageRoute(
                                              builder: (_) => SendOffer(snapshot.data[0][i].id),
                                            ),
                                          );
                                        } else {
                                          Navigator.push(
                                            context,
                                            MaterialPageRoute(
                                              builder: (_) => VerifyCNIC(),
                                            ),
                                          );
                                        }
                                      },
                                    ),
                                SizedBox(
                                  height: 15,
                                ),
                                Center(
                                  child: Text(
                                    "${i + 1}/$indexLength",
                                    style: TextStyle(fontSize: 13),
                                  ),
                                ),
                              ],
                            ),
                          ),
                        ],
                      ),
                    ),
                  );
                },
              ),
            );
        },
      ),

Your problem: You try to access a value at an index of the list that does not exist.您的问题:您尝试访问不存在的列表索引处的值。 This is because, the provided initial data is an empty list.这是因为,提供的初始数据是一个空列表。 When the ´FutureBuilder´ first gets called all the code that it contains is executed using the initial data.当“FutureBuilder”第一次被调用时,它包含的所有代码都使用初始数据执行。 And so the first two lines would throw an error message because you try to get the first and the second element from the list when it is in fact empty and does not have a first or second element.所以前两行会抛出一个错误消息,因为你试图从列表中获取第一个和第二个元素,而实际上它是空的并且没有第一个或第二个元素。

The solution: You have to decide for yourself handle how you show your user that the data is still loading.解决方案:您必须自己决定如何向用户显示数据仍在加载。 But if there is the possibility that your list may be empty or may only contain one element you definitely have to check if this is the case before you try accessing these items from the list.但是,如果您的列表可能为空或可能仅包含一个元素,则在尝试从列表中访问这些项目之前,您必须检查是否是这种情况。

So just use:所以只需使用:

if (snapshot.data.length > 1)

before you execute:在执行之前:

indexLength = snapshot.data[0].length;
cnicCheck = snapshot.data[1];

I really hope I could help:)我真的希望我能帮上忙:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 rangeerror(索引):无效值:有效值范围为空:flutter 从 firebase 获取数据时为 0 - rangeerror (index): invalid value: valid value range is empty: 0 in flutter while getting data from firebase 在我的 Flutter 应用程序中,从 firebase 获取产品时显示 RangeError(索引):无效值:有效值范围为空:0 - In My Flutter Application while Fetching products from firebase showing RangeError (index): Invalid value: Valid value range is empty: 0 StreamProvider - RangeError(索引):无效值:有效值范围为空:0 - StreamProvider - RangeError (index): Invalid value: Valid value range is empty: 0 如何解决 flutter 中的“RangeError (index): Invalid value: Valid value range is empty: 0”? - How to resolve it “RangeError (index): Invalid value : Valid value range is empty : 0” in flutter? 为什么我会遇到这个错误 RangeError (index): Invalid value: Valid value range is empty? - Why im gettin this error RangeError (index): Invalid value: Valid value range is empty? RangeError(索引):无效值:不在0..5范围内(包括6):Flutter SliverChildBuilderDelegate - RangeError (index): Invalid value: Not in range 0..5, inclusive: 6 : Flutter SliverChildBuilderDelegate Flutter:需要加载值,然后对 Futurebuilder 进行 firebase 查询导致 RangeError(索引) - Flutter: Need to load values and then make a firebase query for Futurebuilder caused RangeError (index) 如何检查该字段在Firebase中是否存在,如果存在则打印其值,如果不存在则在Flutter中添加一个空值 - How to check whether the field exists in Firebase, if it exists then print its value, if it does not exist, then add it with an empty value in Flutter 为什么“RangeError:无效状态代码:0”,firebase 函数 - Why "RangeError: Invalid status code: 0", firebase functions 增加 flutter 中的 firebase 字段值? - increment firebase field value in flutter?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM