首页 文章

Flutter Text(“$ {sqlite_tbl [0] ['body']”)抛出NoSuchMethodError

提问于
浏览
1

在这个Flutter项目中,我将来自本地sqlite数据库的信息显示在页面上 . 互联网上有很多使用ListView.builder和ListTile来显示的例子 . 但是,我不是这种情况,我希望能够从表中访问和显示特定列 .

首先,我创建一个List实例,然后使该实例成为一个类似的rawQuery .

List<Map> sqlite_tbl = db.rawQuery('SELECT * FROM sample_table');

然后,在页面的构建方法中,我将一些文本放在appBar和SingleChildScrollView中,这是我从数据库中检索的文本,如此...

child: new Text("${sqlite_tbl[0]['title']}",

child: new Text("${sqlite_tbl[0]['body']}",

当我从上一页访问此页面时,我得到带有NoSuchMethodError的红色闪光一两秒钟,然后页面将显示没有错误 . 在我的运行日志中,它会说'方法'[]'在null上调用 . Receiver:null尝试调用: . 所以我假设它是[0]我检索文本,但是一旦我删除它会说类型参数类型'String'不能分配给参数类型'int' .

有没有人知道检索此数据的正确方法或如何解决此问题?如果您需要查看更多我的代码,请告诉我 .

1 回答

  • 0

    方法 db.rawQuery 将返回 Future<List<Map>> 类型 . 您应该将列表的实例化更改为:

    List<Map> sqlite_tbl = await db.rawQuery('SELECT * FROM sample_table');
    

    然后你必须调用 setState .

    A better way for you to do this is something like:

    List<Map> sqlite_tbl;
    bool initialized;
    
    initState() {
      super.initState();
      initialized = false;
      _getData();
    }
    
    _getData() {
      db.rawQuery('SELECT * FROM sample_table').then((results) {
        setState(() {
          sqlite_tbl = results;
          initialized = true;
        });
      }).catchError((e) { // do something });
    }
    

    然后,您将根据 initialized 的值构建UI .

相关问题