Sqlite 颤振-从数据库中获取记录并在ListView Builder中显示

Sqlite 颤振-从数据库中获取记录并在ListView Builder中显示,sqlite,dart,flutter,Sqlite,Dart,Flutter,我正在从事一个颤振项目,并使用Sqflite数据库。我已设法将数据保存在数据库中。现在,我试图根据表名从数据库中获取所有记录的列表,并在ListView.builder中显示它们 数据库\u helper.dart 雇员名单 我哪里出错了?如何在列表中显示所有数据库表记录?您可以使用FutureBuilder获取并显示数据: class _EmployeesListScreenState extends State<EmployeesListScreen> {

我正在从事一个颤振项目,并使用Sqflite数据库。我已设法将数据保存在数据库中。现在,我试图根据表名从数据库中获取所有记录的列表,并在ListView.builder中显示它们

数据库\u helper.dart

雇员名单


我哪里出错了?如何在列表中显示所有数据库表记录?

您可以使用FutureBuilder获取并显示数据:

        class _EmployeesListScreenState extends State<EmployeesListScreen> {
          var db = new DatabaseHelper(); // CALLS FUTURE

          @override
          Widget build(BuildContext context) {
            return Scaffold(
              appBar: AppBar(
                title: Text('List Of Employees'),
              ),
              body: FutureBuilder<List>(
                future: db.getAllRecords("tabEmployee"),
                initialData: List(),
                builder: (context, snapshot) {
                  return snapshot.hasData
                      ? ListView.builder(
                          itemCount: snapshot.data.length,
                          itemBuilder: (_, int position) {
                            final item = snapshot.data[position];
                            //get your item data here ...
                            return Card(
                              child: ListTile(
                                title: Text(
                                    "Employee Name: " + snapshot.data[position].row[1]),
                              ),
                            );
                          },
                        )
                      : Center(
                          child: CircularProgressIndicator(),
                        );
                },
              ),
            );
          }
        }

您可以使用FutureBuilder获取并显示您的数据:

        class _EmployeesListScreenState extends State<EmployeesListScreen> {
          var db = new DatabaseHelper(); // CALLS FUTURE

          @override
          Widget build(BuildContext context) {
            return Scaffold(
              appBar: AppBar(
                title: Text('List Of Employees'),
              ),
              body: FutureBuilder<List>(
                future: db.getAllRecords("tabEmployee"),
                initialData: List(),
                builder: (context, snapshot) {
                  return snapshot.hasData
                      ? ListView.builder(
                          itemCount: snapshot.data.length,
                          itemBuilder: (_, int position) {
                            final item = snapshot.data[position];
                            //get your item data here ...
                            return Card(
                              child: ListTile(
                                title: Text(
                                    "Employee Name: " + snapshot.data[position].row[1]),
                              ),
                            );
                          },
                        )
                      : Center(
                          child: CircularProgressIndicator(),
                        );
                },
              ),
            );
          }
        }

这可能不是正确的代码,因为我还没有测试过它,但列表视图生成器就是这样工作的,并尝试使用async await。清理代码相当多

import 'package:flutter/material.dart';
import 'package:flutter_with_db_single_helper/helpers/database_helper.dart'

class EmployeesListScreen extends StatefulWidget {
    @override
    _EmployeesListScreenState createState() => _EmployeesListScreenState();
}

class _EmployeesListScreenState extends State<EmployeesListScreen> {

    List<String> _records;
    @override
    initState(){
        super.initState();
    }

    Future<void> _getRecords() async {
        var res = await db.getAllRecords("tabEmployee"); 
        setState((){
            _records = res;
        });
    }

    @override
    Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
        title: Text('List Of Employees'),
        ),
        body: _records==null ? Container():ListView.builder(
        itemCount: _records.length,
        itemBuilder: (_, int position) {
            return Card(
            child: ListTile(
                title:
                    Text("Employee Name: ", _records[position]),
            ),
            );
        },
        ),
    );
    }
}

或者您可以使用未来的构建器,如另一个答案所示:

这可能不是正确的代码,因为我还没有测试过,但列表视图生成器就是这样工作的,并尝试使用async await。清理代码相当多

import 'package:flutter/material.dart';
import 'package:flutter_with_db_single_helper/helpers/database_helper.dart'

class EmployeesListScreen extends StatefulWidget {
    @override
    _EmployeesListScreenState createState() => _EmployeesListScreenState();
}

class _EmployeesListScreenState extends State<EmployeesListScreen> {

    List<String> _records;
    @override
    initState(){
        super.initState();
    }

    Future<void> _getRecords() async {
        var res = await db.getAllRecords("tabEmployee"); 
        setState((){
            _records = res;
        });
    }

    @override
    Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
        title: Text('List Of Employees'),
        ),
        body: _records==null ? Container():ListView.builder(
        itemCount: _records.length,
        itemBuilder: (_, int position) {
            return Card(
            child: ListTile(
                title:
                    Text("Employee Name: ", _records[position]),
            ),
            );
        },
        ),
    );
    }
}

或者您可以使用未来的构建器,如另一个答案所示:

错误是什么?错误是什么?这是一个很好的方法。谢谢你的帮助。我用了FutureBuilder,这是一个很好的方法。谢谢你的帮助。虽然我使用了FutureBuilder。很好的答案,但是可以稍微简化:员工姓名:+item.row[1]很好的答案,但是可以稍微简化:员工姓名:+item.row[1]