无法在 Flutter 的文本小部件中显示数据库中的文本

Unable to display text from database in a text widget in Flutter

几个月来一直在用 dart 编写代码。当前正在尝试生成包含来自本地 SQL 数据库的标题的网格视图。我能够浏览数据库并将标题保存到数组中供以后使用。我可以毫无问题地将它们打印出来,但是当我尝试在我的网格视图中显示它们时,我得到“type 'Future' is not a subtype of type 'String'”奇怪的是我的代码适用于其次并正确显示信息,但是当我刷新页面(我没有触摸代码)时,我得到了最让我困惑的错误。

数据库助手class

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;
  }

_getTitle(int index) 不应该是 async.

由于 _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