All Projects → vitusortner → Floor

vitusortner / Floor

Licence: apache-2.0
The typesafe, reactive, and lightweight SQLite abstraction for your Flutter applications

Programming Languages

dart
5743 projects

Projects that are alternatives of or similar to Floor

Beam
A type-safe, non-TH Haskell SQL library and ORM
Stars: ✭ 454 (-16.39%)
Mutual labels:  sqlite
Denodb
MySQL, SQLite, MariaDB, PostgreSQL and MongoDB ORM for Deno
Stars: ✭ 498 (-8.29%)
Mutual labels:  sqlite
Sqlitecodefirst
Creates a SQLite Database based on a EdmModel by using Entity Framework CodeFirst.
Stars: ✭ 526 (-3.13%)
Mutual labels:  sqlite
Django Dbbackup
Management commands to help backup and restore your project database and media files
Stars: ✭ 471 (-13.26%)
Mutual labels:  sqlite
Rbatis
Rust ORM Framework High Performance Rust SQL-ORM(JSON based)
Stars: ✭ 482 (-11.23%)
Mutual labels:  sqlite
Adminer
Database management in a single PHP file
Stars: ✭ 4,999 (+820.63%)
Mutual labels:  sqlite
Android Orma
An ORM for Android with type-safety and painless smart migrations
Stars: ✭ 442 (-18.6%)
Mutual labels:  sqlite
Sqlitedb
Basic SQLite wrapper for Swift 4.x and lightweight ORM for accessing underlying tables in an SQLite database
Stars: ✭ 538 (-0.92%)
Mutual labels:  sqlite
Phpmyfaq
phpMyFAQ - Open Source FAQ web application for PHP and MySQL, PostgreSQL and other databases
Stars: ✭ 494 (-9.02%)
Mutual labels:  sqlite
Tuql
Automatically create a GraphQL server from a SQLite database or a SQL file
Stars: ✭ 526 (-3.13%)
Mutual labels:  sqlite
Evolve
Database migration tool for .NET and .NET Core projects. Inspired by Flyway.
Stars: ✭ 477 (-12.15%)
Mutual labels:  sqlite
Maghead
The fastest pure PHP database framework with a powerful static code generator, supports horizontal scale up, designed for PHP7
Stars: ✭ 483 (-11.05%)
Mutual labels:  sqlite
Go Sqlite3
sqlite3 driver for go using database/sql
Stars: ✭ 5,313 (+878.45%)
Mutual labels:  sqlite
Medoo
The lightweight PHP database framework to accelerate the development.
Stars: ✭ 4,463 (+721.92%)
Mutual labels:  sqlite
Zblogphp
Z-BlogPHP博客程序
Stars: ✭ 527 (-2.95%)
Mutual labels:  sqlite
Androidwithkotlin
🚀 These are android sample projects which are written in Kotlin. It covers video streaming, mp3 player, sqlite, location services, custom camera, o-notifications, simple compass etc.
Stars: ✭ 447 (-17.68%)
Mutual labels:  sqlite
Postfixadmin
PostfixAdmin - web based virtual user administration interface for Postfix mail servers
Stars: ✭ 509 (-6.26%)
Mutual labels:  sqlite
Go Sqlbuilder
A flexible and powerful SQL string builder library plus a zero-config ORM.
Stars: ✭ 539 (-0.74%)
Mutual labels:  sqlite
Datasette
An open source multi-tool for exploring and publishing data
Stars: ✭ 5,640 (+938.67%)
Mutual labels:  sqlite
Nimforum
Lightweight alternative to Discourse written in Nim
Stars: ✭ 523 (-3.68%)
Mutual labels:  sqlite

Floor

See the project's website for the full documentation.

Floor provides a neat SQLite abstraction for your Flutter applications inspired by the Room persistence library. It comes with automatic mapping between in-memory objects and database rows while still offering full control of the database with the use of SQL. As a consequence, it's necessary to have an understanding of SQL and SQLite in order to harvest Floor's full potential.

  • null-safe
  • typesafe
  • reactive
  • lightweight
  • SQL centric
  • no hidden magic
  • no hidden costs
  • iOS, Android, Linux, macOS, Windows

⚠️ The library is open to contributions! Refer to GitHub Discussions for questions, ideas, and discussions.

pub package build status codecov

Getting Started

1. Setup Dependencies

Add the runtime dependency floor as well as the generator floor_generator to your pubspec.yaml. The third dependency is build_runner which has to be included as a dev dependency just like the generator.

  • floor holds all the code you are going to use in your application.
  • floor_generator includes the code for generating the database classes.
  • build_runner enables a concrete way of generating source code files.
dependencies:
  flutter:
    sdk: flutter
  floor: ^1.0.0

dev_dependencies:
  floor_generator: ^1.0.0
  build_runner: ^1.11.5

2. Create an Entity

It will represent a database table as well as the scaffold of your business object. @entity marks the class as a persistent class. It's required to add a primary key to your table. You can do so by adding the @primaryKey annotation to an int property. There is no restriction on where you put the file containing the entity.

// entity/person.dart

import 'package:floor/floor.dart';

@entity
class Person {
  @primaryKey
  final int id;
  
  final String name;
  
  Person(this.id, this.name);
}

3. Create a DAO (Data Access Object)

This component is responsible for managing access to the underlying SQLite database. The abstract class contains the method signatures for querying the database which have to return a Future or Stream.

  • You can define queries by adding the @Query annotation to a method. The SQL statement has to get added in parenthesis. The method must return a Future or Stream of the Entity you're querying for.
  • @insert marks a method as an insertion method.
// dao/person_dao.dart

import 'package:floor/floor.dart';

@dao
abstract class PersonDao {
  @Query('SELECT * FROM Person')
  Future<List<Person>> findAllPersons();
  
  @Query('SELECT * FROM Person WHERE id = :id')
  Stream<Person?> findPersonById(int id);

  @insert
  Future<void> insertPerson(Person person);
}

4. Create the Database

It has to be an abstract class which extends FloorDatabase. Furthermore, it's required to add @Database() to the signature of the class. Make sure to add the created entity to the entities attribute of the @Database annotation. In order to make the generated code work, it's required to also add the listed imports.

Make sure to add part 'database.g.dart'; beneath the imports of this file. It's important to note that 'database' has to get exchanged with the filename of the database definition. In this case, the file is named database.dart.

// database.dart

// required package imports
import 'dart:async';
import 'package:floor/floor.dart';
import 'package:sqflite/sqflite.dart' as sqflite;

import 'dao/person_dao.dart';
import 'entity/person.dart';

part 'database.g.dart'; // the generated code will be there

@Database(version: 1, entities: [Person])
abstract class AppDatabase extends FloorDatabase {
  PersonDao get personDao;
}

5. Run the Code Generator

Run the generator with flutter packages pub run build_runner build. To automatically run it, whenever a file changes, use flutter packages pub run build_runner watch.

6. Use the Generated Code

For obtaining an instance of the database, use the generated $FloorAppDatabase class, which allows access to a database builder. The name is being composed by $Floor and the database class name. The string passed to databaseBuilder() will be the database file name. For initializing the database, call build() and make sure to await the result.

In order to retrieve the PersonDao instance, invoking the persoDao getter on the database instance is enough. Its functions can be used as shown in the following snippet.

final database = await $FloorAppDatabase.databaseBuilder('app_database.db').build();

final personDao = database.personDao;
final person = Person(1, 'Frank');

await personDao.insertPerson(person);
final result = await personDao.findPersonById(1);

For further examples take a look at the example and test directories.

Naming

The library's name derives from the following. Floor as the bottom layer of a Room which points to the analogy of the database layer being the bottom and foundation layer of most applications. Where fl also gives a pointer that the library is used in the Flutter context.

Bugs, Ideas, and Feedback

For bugs please use GitHub Issues. For questions, ideas, and discussions use GitHub Discussions. For general communication use floor's Slack.

License

Copyright 2021 The Floor Project Authors

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].