Flutter - извлечение записей из базы данных и отображение в ListView Builder - PullRequest
0 голосов
/ 05 декабря 2018

Я работаю над проектом Flutter и использую базу данных Sqflite.Мне удалось сохранить данные в БД.Теперь я пытаюсь получить список всех записей из базы данных на основе имени таблицы и отобразить их в «ListView.builder».

database_helper.dart

Future<List> getAllRecords(String dbTable) async {
    var dbClient = await db;
    var result = await dbClient.rawQuery("SELECT * FROM $dbTable");

    return result.toList();
}

employee_list.dart

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

var db = new DatabaseHelper();
Future<List> _users = db.getAllRecords("tabEmployee"); // CALLS FUTURE

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

class _EmployeesListScreenState extends State<EmployeesListScreen> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('List Of Employees'),
      ),
      body: ListView.builder(
        // itemCount: _users.length,
        itemBuilder: (_, int position) {
          return Card(
            child: ListTile(
              title:
                  Text("Employee Name: "), // EMPLOYEE NAME TO BE DISPLAYED HERE
            ),
          );
        },
      ),
    );
  }
}

Где я ошибся?Что я могу сделать, чтобы отобразить все мои записи таблицы БД в списке?

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Это может быть неверный код, так как я не проверял это, но именно так работает построитель представления списка и попробуйте использовать 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]),
            ),
            );
        },
        ),
    );
    }
}

Или вы можете использовать будущего строителя, как показывает другой ответ.:)

0 голосов
/ 05 декабря 2018

Вы можете использовать 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(),
                        );
                },
              ),
            );
          }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...