#sql #flutter #dart #gridview #sqflite
#sql #flutter #dart #gridview #sqflite
Вопрос:
Кодирую в dart уже несколько месяцев. В настоящее время пытаюсь создать представление таблицы, содержащее заголовки из локальной базы данных SQL. Я могу просмотреть базу данных и сохранить заголовки в массив для последующего использования. Я могу распечатать их без проблем, но когда я пытаюсь отобразить их в моем представлении сетки, я получаю «тип ‘Future’ не является подтипом типа ‘String'» Странно, что мой код работал секунду и отображал информацию правильно, но как только я обновил страницу(Я не трогал код) Я получил ошибку, которая меня больше всего смущает.
Вспомогательный класс базы данных
getFactTitle(String target, int position) async {
Database db = await this.database;
String searchString =
('SELECT title FROM factTable WHERE fid="' target '"');
var result = await db.rawQuery(searchString);
if (result.length > 0) {
titles[position] = result.first.values.first.toString();
} else {
return null;
}
}
Вид сетки
Widget _buttons() {
return Expanded(
child: GridView.count(
crossAxisCount: 2, //NUMBER OF COLUMNS
children: List.generate(numberOfFacts, (index) {
return Center(
child: new Column(children: <Widget>[
IconButton(
icon: Image.asset('assets/pictures/'
category
_stringIndex(index)
'a.jpg'),
onPressed: () {
print("Clicked: " category _stringIndex(index));
}),
Text(
_getTitle(index),
),
]),
);
}),
),
);
}
_getTitle(int index) async {
print(titles[index]);
return titles[index];
}
_getTitles() async {
String theTitle;
_getCategory();
for (int i = 1; i <= numberOfFacts; i ) {
String target = category (i.toString());
await helper.getFactTitle(target, i);
print(titles[i]);
theTitle = titles[i];
}
return theTitle;
}
Ответ №1:
Поскольку _getTitle(int index)
async
вам придется подождать его завершения. В этом случае вы можете использовать FutureBuilder
.
FutureBuilder<String>(
future: _getTitle(index),
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data);
}
}
);
вы также можете обрабатывать ошибки и состояние ожидания.
Дополнительная информация: https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html
Комментарии:
1. Спасибо! Я понял!
Ответ №2:
_getTitle(int index)
не должно быть async
.