【问题标题】:How to properly display all data from a Sqlite database into a ListView.builder?如何将 Sqlite 数据库中的所有数据正确显示到 ListView.builder 中?
【发布时间】:2020-11-09 22:59:08
【问题描述】:

我正在尝试访问我保存在 sqlite 数据库中的所有数据。数据库中充满了 Quarter 对象。我想使用 ListView.Builder 显示它们。只发出我不完全理解我的情况的正确方法。我目前遇到的错误是错误type 'QueryRow' is not a subtype of 'List<dynamic>' 我将标记IDE 说这个错误来自哪里。感谢您向我展示我做错了什么并纠正我的任何帮助!谢谢!

这是我目前拥有的。我已经标记了我上面详述的错误应该来自哪里

class ChangeQuarter extends StatefulWidget {
  @override
  _ChangeQuarterState createState() => _ChangeQuarterState();
}

class _ChangeQuarterState extends State<ChangeQuarter> {
  Future<void> _future;
  static const Color greycolor = Color.fromRGBO(220, 220, 220, 10);

  @override
  initState() {
    super.initState();
  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(
        backgroundColor: Colors.grey[200],
        appBar: PreferredSize(
          preferredSize: Size.fromHeight(95.0),
          child: AppBar(
            automaticallyImplyLeading: false, // hides leading widget
            flexibleSpace: QuarterAppBar(),
          ),
        ),
        body: FutureBuilder<dynamic>(
            future: QuarterDBProvider.quarterDB.getQuarter(),
            initialData: List(),
            builder: (context, snapshot) {
              switch (snapshot.connectionState) {
                case ConnectionState.none:
                  return Text('none');
                case ConnectionState.waiting:
                  return Center(child: CircularProgressIndicator());
                case ConnectionState.active:
                  return Text('');
                case ConnectionState.done:
                  if (snapshot.hasError) {
                    print(
                      '${snapshot.error}',
                    );
                  }
              }
=> ERROR LOCATION   List quarter = snapshot.data;
                    return ListView.builder(
                      itemCount: snapshot.data.length,
                      shrinkWrap: true,
                      itemBuilder: (context, int index) {
                        final quarter = snapshot.data[index];
                        return Padding(
                          padding: EdgeInsets.symmetric(
                              vertical: 1.0, horizontal: 4.0),
                          child: Card(
                            color: (index % 2 == 0) ? greycolor : Colors.white,
                            child: Container(
                              height: 60,
                              padding: EdgeInsets.fromLTRB(0, 20, 0, 0),
                              child: InkWell(
                                onTap: () => Navigator.pop(context),
                                child: Row(
                                  mainAxisAlignment: MainAxisAlignment.center,
                                  children: <Widget>[
                                    Container(
                                      margin: EdgeInsets.only(right: 5),
                                      child: Text(snapshot.data[index].quarter,
                                          style: TextStyle(
                                              fontSize: 20,
                                              fontFamily: 'Montserrat',
                                              color: Colors.blue),
                                          textAlign: TextAlign.left),
                                    ),
                                  ],
                                ),
                              ),
                            ),
                          ),
                        );
                      },
                    );

            }));
  }
}

【问题讨论】:

    标签: flutter flutter-dependencies


    【解决方案1】:

    错误基本上是说您正在尝试使用List&lt;dynamic&gt;,而您应该使用QueryRowQuarterDBProvider.quarterDB.getQuarter() 返回一个 QueryRow 并且您正在像这样声明 Future 构建器:FutureBuilder&lt;List&lt;dynamic&gt;&gt; 而它应该是 FutureBuilder&lt;QueryRow&gt;。您还应该将List quarter = snapshot.data; 更正为QueryRow quarter = snapshot.data;

    如果您需要任何进一步的帮助,请告诉我如何处理 QueryRow,但我假设您已经知道,因为您使用的是 SQlite

    【讨论】:

    • 另外,为您的列表提供一个类型也是一个好习惯,例如:List&lt;int&gt;list = [1,2,3];
    • QueryRow 在我尝试用它定义 FutureBuilder 或输入QueryRow quarter = snapshot.data 时说它是一个未定义的类。我错过了什么吗?使用 QueryRow 的导入?
    • 您可能需要导入 SQflite 库
    猜你喜欢
    • 2019-08-05
    • 2018-10-15
    • 2011-12-31
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多