Снимок Flutter futurebuilder равен нулю после запроса к базе данных до горячей перезагрузки

Я запрашиваю базу данных для заполнения списка внутри метода сборки, но будущий построитель при первом запуске возвращает ноль в моментальном снимке. Выдает RangeError (index): Invalid value: допустимый диапазон значений пуст. Но когда нажимаю горячую перезагрузку, данные отображаются правильно. Я думаю, что не могу правильно сопоставить результат снимка с juzlist, пожалуйста, помогите, что мне не хватает?

 @override
  Widget build(BuildContext context)  {
    // TODO: implement build

    final makeBody = Container(
        decoration: BoxDecoration(
            color: light_mode ? Color(0xFFFFEEFF) : Color(0xFF6D6D6D)),
        child:FutureBuilder<List<Juz>>(
          future: getSurahData(context),

          builder:( BuildContext context, AsyncSnapshot<List<Juz>> snapshot){
            print(snapshot.data);

            if (snapshot.hasData){
            return  returnListview();
            }
            else
              return  Center(child: CircularProgressIndicator());

          },
        )
    );




    return Scaffold(
      appBar: AppBar());}

 Widget returnListview(){


    return Column(
        textDirection: TextDirection.rtl,
        mainAxisAlignment: MainAxisAlignment.start,
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: [
          new Padding(
              padding: EdgeInsets.fromLTRB(5, 5, 5, 5),
              child: Text("#051",
                  style: TextStyle(
                      color: light_mode
                          ? Colors.black
                          : Colors.white,
                      fontSize: 30.0,
                      fontWeight: FontWeight.w100,
                      fontFamily: 'QCF'),
                  textDirection: TextDirection.rtl,
                  textAlign: TextAlign.center)),
          new Expanded(
              child: SizedBox(
                  height: 200.0,
                  child: ListView.builder(
                      itemCount:
                      juzlist.length==null? 0: juzlist.elementAt(juzlist.length-1).ayah_no,
                      itemBuilder: (context, index) {
                        return Card(
                            color: light_mode
                                ? Color(0xFFFFEEFF)
                                : Color(0x8E8E8E),
                            child: Column(
                                textDirection: TextDirection.rtl,
                                mainAxisAlignment:
                                MainAxisAlignment.start,
                                crossAxisAlignment:
                                CrossAxisAlignment.stretch,
                                children: <Widget>[
                                  Wrap(
                                      direction: Axis.horizontal,
                                      alignment:
                                      WrapAlignment.start,
                                      runAlignment:
                                      WrapAlignment.center,
                                      textDirection:
                                      TextDirection.rtl,
                                      spacing: 2.0,
                                      // gap between adjacent chips
                                      runSpacing: 5.0,
                                      children: makeSurahListview(
                                          countlist[index]
                                              .surah_no,
                                          countlist[index]
                                              .ayah_no,
                                          countlist[index]
                                              .count)),
                                ]));
                      })))
        ]);

  }


Future<List<Juz>> getSurahData(BuildContext context) async {
    print('surah view');

    var jsonText = await rootBundle.loadString('assets/loadjson/surahjuz.json');
    newData = json.decode(jsonText);


    var chNo = int.parse(widget.itemHolder);

    final ajza = newData['Chapters'][chNo - 1]['ajza'];
    final ajzaStr = ajza.replaceAll(' ', '');
    final split = ajzaStr.split(",");
    final Map<int, String> values = {
      for (int i = 0; i < split.length; i++) i: split[i]
    };

    for (int i = 0; i < values.length; i++) {
      String dbfile = "p" + values[i] + ".db";
      ReadSurahList(dbfile, chNo);
    }

    return juzlist;
  }

  ReadSurahList(String dbpath, int chNo) async {
    Directory documentsDirectory = await getApplicationDocumentsDirectory();
    String path = join(documentsDirectory.path, dbpath);
    var db = await openDatabase(path, readOnly: true);

    result = await db.rawQuery(
        "SELECT Uthmani, `Surah-No`,`Ayah-No`, Root, Urdu FROM SHEET1 WHERE `Surah-No`= $chNo");

    result.forEach((result) {
      Juz juz = Juz.fromMap(result);
      juzlist.add(juz);
    });

    result = await db.rawQuery(
        "SELECT Uthmani, `Surah-No`,`Ayah-No`, COUNT(*), MIN(`Row_id`) FROM SHEET1 WHERE `Surah-No`=$chNo group by  `Surah-No`,`Ayah-No`");
    print(result);

    result.forEach((result) {
      Juz juz = Juz.fromMap(result);
      countlist.add(juz);
    });

  }

person Noor    schedule 02.06.2021    source источник