How to Use 'sqflite_ffi' Database Package in Flutter

Wed, Mar 8, 2023

Read in 3 minutes

When building applications that require storage of data, it's common to use databases to store and retrieve information. SQLite is a popular embedded database that is widely used in many mobile and desktop applications. In the Dart programming language, the `sqflite_ffi` package provides a way to interact with SQLite databases.

In this context, we will create a DatabaseHelper class that encapsulates the functionality of interacting with a SQLite database using the sqflite_ffi package. The class will provide methods for opening the database, inserting data into a table, updating data in a table, retrieving data from a table, and deleting data from a table.

  1. We import the sqflite_ffi package and the dart:async package:
import 'package:sqflite_ffi/sqflite_ffi.dart';
import 'dart:async';

The sqflite_ffi package provides a way to interact with SQLite databases in Dart, while the dart:async package provides utilities for working with asynchronous operations.

  1. We define the DatabaseHelper class:
class DatabaseHelper {
  Database _database;

  // methods go here
}

This class will encapsulate the functionality of interacting with a SQLite database using the sqflite_ffi package. We declare a private _database field of type Database, which will hold a reference to the database once it is opened.

  1. We define the openDatabase method:
  Future<void> openDatabase(String dbName) async {
    _database = await databaseFactoryFfi.openDatabase(dbName);
  }

This method takes a dbName parameter, which is the name of the database file to open. It uses the databaseFactoryFfi object from the sqflite_ffi package to open the database and assigns it to the _database field.

  1. We define the insert method:
  Future<int> insert(String table, Map<String, dynamic> data) async {
    return await _database.insert(table, data);
  }

This method takes a table parameter, which is the name of the table to insert the data into, and a data parameter, which is a map of column names to values representing the data to insert. It uses the insert method of the _database field to insert the data into the table and returns the number of rows inserted.

  1. We define the update method:
  Future<int> update(String table, Map<String, dynamic> data,
      {String where, List<dynamic> whereArgs}) async {
    return await _database.update(table, data, where: where, whereArgs: whereArgs);
  }

This method takes a table parameter, which is the name of the table to update, a data parameter, which is a map of column names to values representing the data to update, and an optional where parameter and whereArgs parameter, which are used to specify the conditions for the update. It uses the update method of the _database field to update the data in the table based on the specified conditions and returns the number of rows updated.

  1. We define the get method:
  Future<List<Map<String, dynamic>>> get(String table,
      {String where, List<dynamic> whereArgs}) async {
    return await _database.query(table, where: where, whereArgs: whereArgs);
  }

This method takes a table parameter, which is the name of the table to retrieve data from, and an optional where parameter and whereArgs parameter, which are used to specify the conditions for the data retrieval. It uses the query method of the _database field to retrieve the data from the table based on the specified conditions and returns a list of maps, where each map represents a row of data.

  1. We define the delete method:
  Future<int> delete(String table,
      {String where, List<dynamic> whereArgs}) async {
    return await _database.delete(table, where: where, whereArgs: whereArgs);
  }

This method takes a table parameter, which is the name of the database table. where is the column name that needs to be filtered data with whereArgs which is the values for filtering

In conclusion, the code provided implements a basic DatabaseHelper class that encapsulates the functionality of interacting with a SQLite database using the sqflite_ffi package. It provides methods for opening the database, inserting data into a table, updating data in a table, retrieving data from a table, and deleting data from a table. This class can be used as a starting point for building more complex database interactions in Dart applications.


Shohruh AK





See Also

What Skills a Flutter Developer Should Have
OpenAI's GPT-3 Language Model: Explained
Can ChatGPT Replace Google?
ChatGPT Pricing: How Much Does ChatGPT Cost?
How To Convert JSON To Dart Code Using QuickType