Skip to content

This repository contains a simple Flutter application that manages contact information using SQLite (via SQFLite).

License

Notifications You must be signed in to change notification settings

rhedgpeth/flutter-sqlite

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flutter + SQLite

Build status License (MIT)

This repository contains a simple Flutter application that manages contact information using SQLite (via SQFLite).

Requirements

To run this application be sure to check out the Flutter documentation for getting started.

Key takeaways

To use SQLite within a Flutter application you're going to need to add a couple dependencies to the pubspec.yaml file.

Note: The Dart ecosystem uses packages to manage shared software such as libraries and tools. To get Dart packages, you use the pub package manager. Find more information on Dart package management here.

More specifically, the sqflite and path_provider packages are required.

dependencies:
  flutter:
    sdk: flutter
  sqflite: any
  path_provider: any

From there a SQLite database (and tables) can be created and used within the application.

For this applicaiton I have put all of the SQFLite usages within database_helper.dart.

import 'dart:async';
import 'dart:io' as io;
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:rolodex/models/base_model.dart';
import 'package:sqflite/sqflite.dart';

class DatabaseHelper {
  static final DatabaseHelper _instance = DatabaseHelper.internal();

  factory DatabaseHelper() => _instance;

  static Database? _db;

  Future<Database> get db async {
    _db ??= await init();
    return _db!;
  }

  DatabaseHelper.internal();

  Future<Database> init() async {
      io.Directory documentsDirectory = await getApplicationDocumentsDirectory();
      String path = join(documentsDirectory.path, "main.db");
      return openDatabase(path, version: 1, onCreate: onCreate);
  }

  void onCreate(Database db, int version) async =>
      await db.execute('CREATE TABLE contacts (id INTEGER PRIMARY KEY NOT NULL, firstName STRING, lastName STRING, phone STRING, email STRING)');

  Future<List<Map<String, dynamic>>> query(String table) async => (await db).query(table);

  Future<int> insert(String table, BaseModel model) async => (await db).insert(table, model.toMap());

  Future<int> update(String table, BaseModel model) async => (await db).update(table, model.toMap(), where: 'id = ?', whereArgs: [model.id]);

  Future<int> delete(String table, BaseModel model) async => (await db).delete(table, where: 'id = ?', whereArgs: [model.id]);
}

Questions / Feedback

If you have any questions or feedback for this sample please feel free to submit an issue here or email me at rob.hedgpeth@gmail.com.

Happy coding!