Я запрашиваю базу данных для заполнения списка внутри метода сборки, но будущий построитель при первом запуске возвращает ноль в моментальном снимке. Выдает 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);
});
}