【问题标题】:Unable to display text from database in a text widget in Flutter无法在 Flutter 的文本小部件中显示数据库中的文本
【发布时间】:2021-03-03 03:06:37
【问题描述】:

几个月来一直在 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;
  }

【问题讨论】:

    标签: sql flutter dart gridview sqflite


    【解决方案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

    【讨论】:

    • 谢谢!我明白了!
    【解决方案2】:

    _getTitle(int index) 不应为 async

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      相关资源
      最近更新 更多