Flutter - Fetch records from database and display in ListView Builder

前端 未结 2 1833
北荒
北荒 2021-01-15 21:55

I\'m working on a Flutter project and using Sqflite database. I\'ve managed to save data in db. Now I am trying to get list of all records from database based on table name

相关标签:
2条回答
  • 2021-01-15 22:33

    You could use a FutureBuilder to get and display your data :

            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(),
                            );
                    },
                  ),
                );
              }
            }
    
    0 讨论(0)
  • 2021-01-15 22:34

    This might not be correct code, since I've not tested this, but this is how list view builder works and try using async await. Cleans up code quite a bit!

    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]),
                ),
                );
            },
            ),
        );
        }
    }
    

    Or you can use a future builder, as the other answer shows. :)

    0 讨论(0)
提交回复
热议问题