diff --git a/README.md b/README.md index 5943ebfa..171d799a 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ As a consequence, it's necessary to have an understanding of SQL and SQLite in o - typesafe - reactive - lightweight +- sqlcipher - SQL centric - no hidden magic - no hidden costs @@ -37,10 +38,11 @@ The third dependency is `build_runner` which has to be included as a dev depende dependencies: flutter: sdk: flutter - floor: ^1.2.0 + floor: ^1.2.0-sqlcipher + floor_annotation: 1.0.1-sqlcipher dev_dependencies: - floor_generator: ^1.2.0 + floor_generator: ^1.2.0-sqlcipher build_runner: ^2.1.2 ``` @@ -113,14 +115,14 @@ In this case, the file is named `database.dart`. // required package imports import 'dart:async'; import 'package:floor/floor.dart'; -import 'package:sqflite/sqflite.dart' as sqflite; +import 'package:sqflite_sqlcipher/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]) +@Database(version: 1, entities: [Person], password: '123456') abstract class AppDatabase extends FloorDatabase { PersonDao get personDao; } @@ -165,13 +167,13 @@ For general communication use [floor's Slack](https://join.slack.com/t/floor-flu ## 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. diff --git a/example/lib/database.dart b/example/lib/database.dart index 396a7143..b2d56088 100644 --- a/example/lib/database.dart +++ b/example/lib/database.dart @@ -3,11 +3,11 @@ import 'dart:async'; import 'package:example/task.dart'; import 'package:example/task_dao.dart'; import 'package:floor/floor.dart'; -import 'package:sqflite/sqflite.dart' as sqflite; +import 'package:sqflite_sqlcipher/sqflite.dart' as sqflite; part 'database.g.dart'; -@Database(version: 1, entities: [Task]) +@Database(version: 1, entities: [Task], password: '123456') abstract class FlutterDatabase extends FloorDatabase { TaskDao get taskDao; } diff --git a/example/lib/database.g.dart b/example/lib/database.g.dart index 5d6d96ac..0a0e6980 100644 --- a/example/lib/database.g.dart +++ b/example/lib/database.g.dart @@ -10,21 +10,24 @@ part of 'database.dart'; class $FloorFlutterDatabase { /// Creates a database builder for a persistent database. /// Once a database is built, you should keep a reference to it and re-use it. - static _$FlutterDatabaseBuilder databaseBuilder(String name) => - _$FlutterDatabaseBuilder(name); + static _$FlutterDatabaseBuilder databaseBuilder(String name, + [String? password]) => + _$FlutterDatabaseBuilder(name, password); /// Creates a database builder for an in memory database. /// Information stored in an in memory database disappears when the process is killed. /// Once a database is built, you should keep a reference to it and re-use it. static _$FlutterDatabaseBuilder inMemoryDatabaseBuilder() => - _$FlutterDatabaseBuilder(null); + _$FlutterDatabaseBuilder(null, null); } class _$FlutterDatabaseBuilder { - _$FlutterDatabaseBuilder(this.name); + _$FlutterDatabaseBuilder(this.name, this.password); final String? name; + final String? password; + final List _migrations = []; Callback? _callback; @@ -49,6 +52,7 @@ class _$FlutterDatabaseBuilder { final database = _$FlutterDatabase(); database.database = await database.open( path, + password, _migrations, _callback, ); @@ -63,10 +67,12 @@ class _$FlutterDatabase extends FlutterDatabase { TaskDao? _taskDaoInstance; - Future open(String path, List migrations, + Future open( + String path, String? password, List migrations, [Callback? callback]) async { - final databaseOptions = sqflite.OpenDatabaseOptions( + final databaseOptions = sqflite.SqlCipherOpenDatabaseOptions( version: 1, + password: password ?? '123456', onConfigure: (database) async { await database.execute('PRAGMA foreign_keys = ON'); await callback?.onConfigure?.call(database); diff --git a/example/pubspec.lock b/example/pubspec.lock index da1aaa71..cb68ed67 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -5,189 +5,189 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "25.0.0" analyzer: dependency: transitive description: name: analyzer - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.0" args: dependency: transitive description: name: args - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.1.0" + version: "2.3.0" async: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.8.1" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" build: dependency: transitive description: name: build - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" build_config: dependency: transitive description: name: build_config - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" build_daemon: dependency: transitive description: name: build_daemon - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0" build_resolvers: dependency: transitive description: name: build_resolvers - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.4" build_runner: dependency: "direct dev" description: name: build_runner - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.2" build_runner_core: dependency: transitive description: name: build_runner_core - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "7.1.0" built_collection: dependency: transitive description: name: built_collection - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "5.0.0" + version: "5.1.1" built_value: dependency: transitive description: name: built_value - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "8.0.5" + version: "8.1.2" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" charcode: dependency: transitive description: name: charcode - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.1" checked_yaml: dependency: transitive description: name: checked_yaml - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.1" cli_util: dependency: transitive description: name: cli_util - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.3.0" + version: "0.3.3" clock: dependency: transitive description: name: clock - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" code_builder: dependency: transitive description: name: code_builder - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.1.0" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.15.0" convert: dependency: transitive description: name: convert - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "3.0.0" + version: "3.0.1" crypto: dependency: transitive description: name: crypto - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.1" dart_style: dependency: transitive description: name: dart_style - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" fake_async: dependency: transitive description: name: fake_async - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" ffi: dependency: transitive description: name: ffi - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.0" + version: "1.1.2" file: dependency: transitive description: name: file - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "6.1.0" + version: "6.1.2" fixnum: dependency: transitive description: name: fixnum - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" floor: @@ -196,21 +196,21 @@ packages: path: "../floor" relative: true source: path - version: "1.2.0" + version: "1.2.0-sqlcipher" floor_annotation: dependency: transitive description: path: "../floor_annotation" relative: true source: path - version: "1.0.1" + version: "1.0.1-sqlcipher" floor_generator: dependency: "direct dev" description: path: "../floor_generator" relative: true source: path - version: "1.2.0" + version: "1.2.0-sqlcipher" flutter: dependency: "direct main" description: flutter @@ -225,147 +225,147 @@ packages: dependency: transitive description: name: frontend_server_client - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.2" glob: dependency: transitive description: name: glob - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.1" graphs: dependency: transitive description: name: graphs - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.0" + version: "2.1.0" http_multi_server: dependency: transitive description: name: http_multi_server - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.1" http_parser: dependency: transitive description: name: http_parser - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.0" io: dependency: transitive description: name: io - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.0" + version: "1.0.3" js: dependency: transitive description: name: js - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.6.3" json_annotation: dependency: transitive description: name: json_annotation - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "4.0.1" + version: "4.1.0" lists: dependency: transitive description: name: lists - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.0" + version: "1.0.1" logging: dependency: transitive description: name: logging - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.12.10" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.7.0" mime: dependency: transitive description: name: mime - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" package_config: dependency: transitive description: name: package_config - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.0" + version: "2.0.2" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.8.0" pedantic: dependency: transitive description: name: pedantic - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.11.0" + version: "1.11.1" pool: dependency: transitive description: name: pool - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.5.0" pub_semver: dependency: transitive description: name: pub_semver - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" pubspec_parse: dependency: transitive description: name: pubspec_parse - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" shelf: dependency: transitive description: name: shelf - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.1.0" + version: "1.2.0" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" sky_engine: @@ -377,149 +377,149 @@ packages: dependency: transitive description: name: source_gen - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" source_span: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.8.1" - sqflite: - dependency: transitive - description: - name: sqflite - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.0+4" sqflite_common: dependency: transitive description: name: sqflite_common - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.1+1" sqflite_common_ffi: dependency: transitive description: name: sqflite_common_ffi - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0+3" + sqflite_sqlcipher: + dependency: transitive + description: + name: sqflite_sqlcipher + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.0.0" sqlite3: dependency: transitive description: name: sqlite3 - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.0" + version: "1.1.2" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.10.0" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" stream_transform: dependency: transitive description: name: stream_transform - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" strings: dependency: transitive description: name: strings - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.2.1" + version: "0.2.2" synchronized: dependency: transitive description: name: synchronized - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.4.2" timing: dependency: transitive description: name: timing - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" typed_data: dependency: transitive description: name: typed_data - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.0" unicode: dependency: transitive description: name: unicode - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.3.0" + version: "0.3.1" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" watcher: dependency: transitive description: name: watcher - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" web_socket_channel: dependency: transitive description: name: web_socket_channel - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.0" + version: "2.1.0" yaml: dependency: transitive description: name: yaml - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.0" sdks: dart: ">=2.12.0 <3.0.0" - flutter: ">=1.10.0" + flutter: ">=1.24.0-10" diff --git a/floor/lib/src/adapter/deletion_adapter.dart b/floor/lib/src/adapter/deletion_adapter.dart index 1396fcaf..9fd5690f 100644 --- a/floor/lib/src/adapter/deletion_adapter.dart +++ b/floor/lib/src/adapter/deletion_adapter.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:floor/src/util/primary_key_helper.dart'; -import 'package:sqflite/sqflite.dart'; +import 'package:sqflite_sqlcipher/sqflite.dart'; class DeletionAdapter { final DatabaseExecutor _database; diff --git a/floor/lib/src/adapter/insertion_adapter.dart b/floor/lib/src/adapter/insertion_adapter.dart index 2f584d06..24422f8b 100644 --- a/floor/lib/src/adapter/insertion_adapter.dart +++ b/floor/lib/src/adapter/insertion_adapter.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'package:floor/src/extension/on_conflict_strategy_extensions.dart'; import 'package:floor_annotation/floor_annotation.dart'; -import 'package:sqflite/sqlite_api.dart'; +import 'package:sqflite_sqlcipher/sqlite_api.dart'; class InsertionAdapter { final DatabaseExecutor _database; diff --git a/floor/lib/src/adapter/migration_adapter.dart b/floor/lib/src/adapter/migration_adapter.dart index 6e726fd6..0ca92fd8 100644 --- a/floor/lib/src/adapter/migration_adapter.dart +++ b/floor/lib/src/adapter/migration_adapter.dart @@ -1,5 +1,5 @@ import 'package:floor/src/migration.dart'; -import 'package:sqflite/sqflite.dart'; +import 'package:sqflite_sqlcipher/sqflite.dart'; // ignore: avoid_classes_with_only_static_members abstract class MigrationAdapter { diff --git a/floor/lib/src/adapter/query_adapter.dart b/floor/lib/src/adapter/query_adapter.dart index d2bbdb11..7a90bb5d 100644 --- a/floor/lib/src/adapter/query_adapter.dart +++ b/floor/lib/src/adapter/query_adapter.dart @@ -1,6 +1,6 @@ import 'dart:async'; -import 'package:sqflite/sqflite.dart'; +import 'package:sqflite_sqlcipher/sqflite.dart'; /// This class knows how to execute database queries. class QueryAdapter { diff --git a/floor/lib/src/adapter/update_adapter.dart b/floor/lib/src/adapter/update_adapter.dart index d83bd022..83b3e312 100644 --- a/floor/lib/src/adapter/update_adapter.dart +++ b/floor/lib/src/adapter/update_adapter.dart @@ -3,7 +3,7 @@ import 'dart:async'; import 'package:floor/src/extension/on_conflict_strategy_extensions.dart'; import 'package:floor/src/util/primary_key_helper.dart'; import 'package:floor_annotation/floor_annotation.dart'; -import 'package:sqflite/sqlite_api.dart'; +import 'package:sqflite_sqlcipher/sqlite_api.dart'; class UpdateAdapter { final DatabaseExecutor _database; diff --git a/floor/lib/src/callback.dart b/floor/lib/src/callback.dart index b0b558bd..1614bb1a 100644 --- a/floor/lib/src/callback.dart +++ b/floor/lib/src/callback.dart @@ -1,6 +1,6 @@ import 'dart:async'; -import 'package:sqflite/sqflite.dart'; +import 'package:sqflite_sqlcipher/sqflite.dart'; /// Callback class that can be attached to the Floor builder. class Callback { diff --git a/floor/lib/src/database.dart b/floor/lib/src/database.dart index d8898ac4..932b9815 100644 --- a/floor/lib/src/database.dart +++ b/floor/lib/src/database.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:meta/meta.dart'; -import 'package:sqflite/sqflite.dart' as sqflite; +import 'package:sqflite_sqlcipher/sqflite.dart' as sqflite; /// Extend this class to enable database functionality. abstract class FloorDatabase { diff --git a/floor/lib/src/extension/on_conflict_strategy_extensions.dart b/floor/lib/src/extension/on_conflict_strategy_extensions.dart index aff8afa0..e1eb12d6 100644 --- a/floor/lib/src/extension/on_conflict_strategy_extensions.dart +++ b/floor/lib/src/extension/on_conflict_strategy_extensions.dart @@ -1,5 +1,5 @@ import 'package:floor_annotation/floor_annotation.dart'; -import 'package:sqflite/sqlite_api.dart'; +import 'package:sqflite_sqlcipher/sqlite_api.dart'; extension OnConflictStrategyExtensions on OnConflictStrategy { ConflictAlgorithm asSqfliteConflictAlgorithm() { diff --git a/floor/lib/src/migration.dart b/floor/lib/src/migration.dart index 25d06da5..09383e4b 100644 --- a/floor/lib/src/migration.dart +++ b/floor/lib/src/migration.dart @@ -1,4 +1,4 @@ -import 'package:sqflite/sqflite.dart' as sqflite; +import 'package:sqflite_sqlcipher/sqflite.dart' as sqflite; /// Base class for a database migration. /// diff --git a/floor/lib/src/sqflite_database_factory.dart b/floor/lib/src/sqflite_database_factory.dart index e59c6043..7ce2151a 100644 --- a/floor/lib/src/sqflite_database_factory.dart +++ b/floor/lib/src/sqflite_database_factory.dart @@ -1,9 +1,9 @@ import 'dart:io'; import 'package:path/path.dart'; -import 'package:sqflite/sqflite.dart'; -import 'package:sqflite/sqlite_api.dart'; import 'package:sqflite_common_ffi/sqflite_ffi.dart'; +import 'package:sqflite_sqlcipher/sqflite.dart'; +import 'package:sqflite_sqlcipher/sqlite_api.dart'; // infers factory as nullable without explicit type definition final DatabaseFactory sqfliteDatabaseFactory = () { diff --git a/floor/pubspec.lock b/floor/pubspec.lock index 250acfa0..cb148d10 100644 --- a/floor/pubspec.lock +++ b/floor/pubspec.lock @@ -5,189 +5,189 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "25.0.0" analyzer: dependency: transitive description: name: analyzer - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.0" args: dependency: transitive description: name: args - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.1.0" + version: "2.3.0" async: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.8.1" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" build: dependency: transitive description: name: build - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" build_config: dependency: transitive description: name: build_config - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" build_daemon: dependency: transitive description: name: build_daemon - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0" build_resolvers: dependency: transitive description: name: build_resolvers - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.4" build_runner: dependency: "direct dev" description: name: build_runner - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.2" build_runner_core: dependency: transitive description: name: build_runner_core - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "7.1.0" built_collection: dependency: transitive description: name: built_collection - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "5.0.0" + version: "5.1.1" built_value: dependency: transitive description: name: built_value - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "8.0.5" + version: "8.1.2" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" charcode: dependency: transitive description: name: charcode - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.1" checked_yaml: dependency: transitive description: name: checked_yaml - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.1" cli_util: dependency: transitive description: name: cli_util - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.3.0" + version: "0.3.3" clock: dependency: transitive description: name: clock - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" code_builder: dependency: transitive description: name: code_builder - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.1.0" collection: dependency: "direct dev" description: name: collection - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.15.0" convert: dependency: transitive description: name: convert - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "3.0.0" + version: "3.0.1" crypto: dependency: transitive description: name: crypto - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.1" dart_style: dependency: transitive description: name: dart_style - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" fake_async: dependency: transitive description: name: fake_async - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" ffi: dependency: transitive description: name: ffi - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.0" + version: "1.1.2" file: dependency: transitive description: name: file - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "6.1.0" + version: "6.1.2" fixnum: dependency: transitive description: name: fixnum - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" floor_annotation: @@ -196,14 +196,14 @@ packages: path: "../floor_annotation" relative: true source: path - version: "1.0.1" + version: "1.0.1-sqlcipher" floor_generator: dependency: "direct dev" description: path: "../floor_generator" relative: true source: path - version: "1.2.0" + version: "1.2.0-sqlcipher" flutter: dependency: "direct main" description: flutter @@ -218,154 +218,154 @@ packages: dependency: transitive description: name: frontend_server_client - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.2" glob: dependency: transitive description: name: glob - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.1" graphs: dependency: transitive description: name: graphs - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.0" + version: "2.1.0" http_multi_server: dependency: transitive description: name: http_multi_server - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.1" http_parser: dependency: transitive description: name: http_parser - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.0" io: dependency: transitive description: name: io - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.0" + version: "1.0.3" js: dependency: transitive description: name: js - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.6.3" json_annotation: dependency: transitive description: name: json_annotation - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "4.0.1" + version: "4.1.0" lists: dependency: transitive description: name: lists - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.0" + version: "1.0.1" logging: dependency: transitive description: name: logging - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" matcher: dependency: "direct dev" description: name: matcher - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.12.10" meta: dependency: "direct main" description: name: meta - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.7.0" mime: dependency: transitive description: name: mime - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" mockito: dependency: "direct dev" description: name: mockito - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "5.0.15" package_config: dependency: transitive description: name: package_config - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.0" + version: "2.0.2" path: dependency: "direct main" description: name: path - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.8.0" pedantic: dependency: transitive description: name: pedantic - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.11.0" + version: "1.11.1" pool: dependency: transitive description: name: pool - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.5.0" pub_semver: dependency: transitive description: name: pub_semver - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" pubspec_parse: dependency: transitive description: name: pubspec_parse - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" shelf: dependency: transitive description: name: shelf - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.1.0" + version: "1.2.0" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" sky_engine: @@ -377,149 +377,149 @@ packages: dependency: transitive description: name: source_gen - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" source_span: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.8.1" - sqflite: - dependency: "direct main" - description: - name: sqflite - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.0+4" sqflite_common: dependency: transitive description: name: sqflite_common - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.1+1" sqflite_common_ffi: dependency: "direct main" description: name: sqflite_common_ffi - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0+3" + sqflite_sqlcipher: + dependency: "direct main" + description: + name: sqflite_sqlcipher + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.0.0" sqlite3: dependency: transitive description: name: sqlite3 - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.0" + version: "1.1.2" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.10.0" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" stream_transform: dependency: transitive description: name: stream_transform - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" strings: dependency: transitive description: name: strings - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.2.1" + version: "0.2.2" synchronized: dependency: transitive description: name: synchronized - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.4.2" timing: dependency: transitive description: name: timing - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" typed_data: dependency: transitive description: name: typed_data - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.0" unicode: dependency: transitive description: name: unicode - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.3.0" + version: "0.3.1" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" watcher: dependency: transitive description: name: watcher - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" web_socket_channel: dependency: transitive description: name: web_socket_channel - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.0" + version: "2.1.0" yaml: dependency: transitive description: name: yaml - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.0" sdks: dart: ">=2.12.0 <3.0.0" - flutter: ">=1.10.0" + flutter: ">=1.24.0-10" diff --git a/floor/pubspec.yaml b/floor/pubspec.yaml index 39f06a40..a9ac5116 100644 --- a/floor/pubspec.yaml +++ b/floor/pubspec.yaml @@ -2,7 +2,7 @@ name: floor description: > The typesafe, reactive, and lightweight SQLite abstraction for your Flutter applications. This library is the runtime dependency. -version: 1.2.0 +version: 1.2.0-sqlcipher homepage: https://floor.codes publish_to: none @@ -16,7 +16,8 @@ dependencies: sdk: flutter meta: ^1.7.0 path: ^1.8.0 - sqflite: ^2.0.0+4 + # sqflite: ^2.0.0+4 + sqflite_sqlcipher: ^2.0.0 sqflite_common_ffi: ^2.0.0+3 dev_dependencies: diff --git a/floor/test/adapter/insertion_adapter_test.dart b/floor/test/adapter/insertion_adapter_test.dart index 054fa359..8a751103 100644 --- a/floor/test/adapter/insertion_adapter_test.dart +++ b/floor/test/adapter/insertion_adapter_test.dart @@ -4,7 +4,7 @@ import 'package:floor/floor.dart'; import 'package:floor/src/adapter/insertion_adapter.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; -import 'package:sqflite/sqflite.dart'; +import 'package:sqflite_sqlcipher/sqflite.dart'; import '../test_util/mocks.dart'; import '../test_util/person.dart'; diff --git a/floor/test/adapter/update_adapter_test.dart b/floor/test/adapter/update_adapter_test.dart index 55a48a3f..3575af0b 100644 --- a/floor/test/adapter/update_adapter_test.dart +++ b/floor/test/adapter/update_adapter_test.dart @@ -2,7 +2,7 @@ import 'package:floor/floor.dart'; import 'package:floor/src/adapter/update_adapter.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; -import 'package:sqflite/sqflite.dart'; +import 'package:sqflite_sqlcipher/sqflite.dart'; import '../test_util/mocks.dart'; import '../test_util/person.dart'; diff --git a/floor/test/extension/on_conflict_strategy_extensions_test.dart b/floor/test/extension/on_conflict_strategy_extensions_test.dart index bc1d945d..7b02beb0 100644 --- a/floor/test/extension/on_conflict_strategy_extensions_test.dart +++ b/floor/test/extension/on_conflict_strategy_extensions_test.dart @@ -1,7 +1,7 @@ import 'package:floor/floor.dart'; import 'package:floor/src/extension/on_conflict_strategy_extensions.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:sqflite/sqflite.dart'; +import 'package:sqflite_sqlcipher/sqflite.dart'; void main() { group('asSqfliteConflictAlgorithm', () { diff --git a/floor/test/integration/autoincrement/autoinc_test.dart b/floor/test/integration/autoincrement/autoinc_test.dart index 576557a3..b81cf0f9 100644 --- a/floor/test/integration/autoincrement/autoinc_test.dart +++ b/floor/test/integration/autoincrement/autoinc_test.dart @@ -3,7 +3,7 @@ import 'dart:async'; import 'package:floor/floor.dart'; import 'package:floor_annotation/floor_annotation.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:sqflite/sqflite.dart' as sqflite; +import 'package:sqflite_sqlcipher/sqflite.dart' as sqflite; part 'autoinc_test.g.dart'; diff --git a/floor/test/integration/blob/blob_test.dart b/floor/test/integration/blob/blob_test.dart index a6c9ffa2..5dcf26c5 100644 --- a/floor/test/integration/blob/blob_test.dart +++ b/floor/test/integration/blob/blob_test.dart @@ -5,7 +5,7 @@ import 'package:collection/collection.dart'; import 'package:floor/floor.dart'; import 'package:floor_annotation/floor_annotation.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:sqflite/sqflite.dart' as sqflite; +import 'package:sqflite_sqlcipher/sqflite.dart' as sqflite; part 'blob_test.g.dart'; diff --git a/floor/test/integration/boolean_conversions/bool_test.dart b/floor/test/integration/boolean_conversions/bool_test.dart index 952982a1..feedff0e 100644 --- a/floor/test/integration/boolean_conversions/bool_test.dart +++ b/floor/test/integration/boolean_conversions/bool_test.dart @@ -3,7 +3,7 @@ import 'dart:async'; import 'package:floor/floor.dart'; import 'package:floor_annotation/floor_annotation.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:sqflite/sqflite.dart' as sqflite; +import 'package:sqflite_sqlcipher/sqflite.dart' as sqflite; part 'bool_test.g.dart'; diff --git a/floor/test/integration/database.dart b/floor/test/integration/database.dart index 58335e3d..b8894692 100644 --- a/floor/test/integration/database.dart +++ b/floor/test/integration/database.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:floor/floor.dart'; -import 'package:sqflite/sqlite_api.dart' as sqflite; +import 'package:sqflite_sqlcipher/sqlite_api.dart' as sqflite; import 'dao/dog_dao.dart'; import 'dao/person_dao.dart'; diff --git a/floor/test/integration/database_test.dart b/floor/test/integration/database_test.dart index d5da2d4d..05199a2b 100644 --- a/floor/test/integration/database_test.dart +++ b/floor/test/integration/database_test.dart @@ -1,7 +1,7 @@ import 'package:floor/floor.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:matcher/matcher.dart'; -import 'package:sqflite/sqflite.dart'; +import 'package:sqflite_sqlcipher/sqflite.dart'; import '../test_util/extensions.dart'; import 'dao/dog_dao.dart'; diff --git a/floor/test/integration/fts/mail_database.dart b/floor/test/integration/fts/mail_database.dart index 4881f33e..22697b88 100644 --- a/floor/test/integration/fts/mail_database.dart +++ b/floor/test/integration/fts/mail_database.dart @@ -1,14 +1,14 @@ import 'dart:async'; import 'package:floor/floor.dart'; -import 'package:sqflite/sqflite.dart' as sqflite; +import 'package:sqflite_sqlcipher/sqflite.dart' as sqflite; import 'mail.dart'; import 'mail_dao.dart'; part 'mail_database.g.dart'; -@Database(version: 1, entities: [Mail]) +@Database(version: 1, entities: [Mail], password: 'abc123456') abstract class MailDatabase extends FloorDatabase { MailDao get mailDao; } diff --git a/floor/test/integration/inheritance/dao_inheritance_test.dart b/floor/test/integration/inheritance/dao_inheritance_test.dart index 4e80fb5f..ae16dbab 100644 --- a/floor/test/integration/inheritance/dao_inheritance_test.dart +++ b/floor/test/integration/inheritance/dao_inheritance_test.dart @@ -3,7 +3,7 @@ import 'dart:async'; import 'package:floor/floor.dart'; import 'package:floor_annotation/floor_annotation.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:sqflite/sqflite.dart' as sqflite; +import 'package:sqflite_sqlcipher/sqflite.dart' as sqflite; part 'dao_inheritance_test.g.dart'; diff --git a/floor/test/integration/inheritance/entity_inheritance_test.dart b/floor/test/integration/inheritance/entity_inheritance_test.dart index da6c8970..b3eadde5 100644 --- a/floor/test/integration/inheritance/entity_inheritance_test.dart +++ b/floor/test/integration/inheritance/entity_inheritance_test.dart @@ -3,7 +3,7 @@ import 'dart:async'; import 'package:floor/floor.dart'; import 'package:floor_annotation/floor_annotation.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:sqflite/sqflite.dart' as sqflite; +import 'package:sqflite_sqlcipher/sqflite.dart' as sqflite; part 'entity_inheritance_test.g.dart'; diff --git a/floor/test/integration/type_converter/order_database.dart b/floor/test/integration/type_converter/order_database.dart index d73fceb3..8aeeb67d 100644 --- a/floor/test/integration/type_converter/order_database.dart +++ b/floor/test/integration/type_converter/order_database.dart @@ -3,7 +3,7 @@ import 'dart:async'; import 'package:floor/floor.dart'; import 'package:floor_annotation/floor_annotation.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:sqflite/sqflite.dart' as sqflite; +import 'package:sqflite_sqlcipher/sqflite.dart' as sqflite; import 'order.dart'; import 'order_dao.dart'; diff --git a/floor/test/integration/view/view_test.dart b/floor/test/integration/view/view_test.dart index 997bb1b0..7b8c0c2f 100644 --- a/floor/test/integration/view/view_test.dart +++ b/floor/test/integration/view/view_test.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'package:floor/floor.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:sqflite/sqflite.dart' as sqflite; +import 'package:sqflite_sqlcipher/sqflite.dart' as sqflite; import '../dao/dog_dao.dart'; import '../dao/name_dao.dart'; diff --git a/floor_annotation/lib/src/database.dart b/floor_annotation/lib/src/database.dart index d3bf873e..7c0aaf8b 100644 --- a/floor_annotation/lib/src/database.dart +++ b/floor_annotation/lib/src/database.dart @@ -3,6 +3,9 @@ class Database { /// The database version. final int version; + /// The database password + final String? password; + /// The entities the database manages. final List entities; @@ -12,6 +15,7 @@ class Database { /// Marks a class as a FloorDatabase. const Database({ required this.version, + this.password, required this.entities, this.views = const [], }); diff --git a/floor_annotation/pubspec.lock b/floor_annotation/pubspec.lock index 56eb9e1b..eb21438e 100644 --- a/floor_annotation/pubspec.lock +++ b/floor_annotation/pubspec.lock @@ -5,7 +5,7 @@ packages: dependency: "direct main" description: name: meta - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.7.0" sdks: diff --git a/floor_annotation/pubspec.yaml b/floor_annotation/pubspec.yaml index 892aa52a..c759bc26 100644 --- a/floor_annotation/pubspec.yaml +++ b/floor_annotation/pubspec.yaml @@ -2,7 +2,7 @@ name: floor_annotation description: > The typesafe, reactive, and lightweight SQLite abstraction for your Flutter applications. Don't use this package directly. Import the floor package instead. -version: 1.0.1 +version: 1.0.1-sqlcipher homepage: https://floor.codes environment: diff --git a/floor_generator/lib/misc/constants.dart b/floor_generator/lib/misc/constants.dart index 689c1f7e..ab4f3b53 100644 --- a/floor_generator/lib/misc/constants.dart +++ b/floor_generator/lib/misc/constants.dart @@ -4,6 +4,7 @@ abstract class AnnotationField { static const onConflict = 'onConflict'; static const databaseVersion = 'version'; + static const databasePassword = 'password'; static const databaseEntities = 'entities'; static const databaseViews = 'views'; diff --git a/floor_generator/lib/processor/database_processor.dart b/floor_generator/lib/processor/database_processor.dart index f088d351..a158acb5 100644 --- a/floor_generator/lib/processor/database_processor.dart +++ b/floor_generator/lib/processor/database_processor.dart @@ -40,6 +40,7 @@ class DatabaseProcessor extends Processor { databaseTypeConverters, ); final version = _getDatabaseVersion(); + final password = _getDatabasePassword(); final allTypeConverters = _getAllTypeConverters( daoGetters, [...entities, ...views], @@ -52,6 +53,7 @@ class DatabaseProcessor extends Processor { views, daoGetters, version, + password, databaseTypeConverters, allTypeConverters, ); @@ -69,6 +71,14 @@ class DatabaseProcessor extends Processor { return version; } + String? _getDatabasePassword() { + final password = _classElement + .getAnnotation(annotations.Database) + ?.getField(AnnotationField.databasePassword) + ?.toStringValue(); + return password; + } + List _getDaoGetters( final String databaseName, final List entities, diff --git a/floor_generator/lib/value_object/database.dart b/floor_generator/lib/value_object/database.dart index a830db14..2f9c4994 100644 --- a/floor_generator/lib/value_object/database.dart +++ b/floor_generator/lib/value_object/database.dart @@ -14,6 +14,7 @@ class Database { final List views; final List daoGetters; final int version; + final String? password; final Set databaseTypeConverters; final Set allTypeConverters; final bool hasViewStreams; @@ -26,6 +27,7 @@ class Database { this.views, this.daoGetters, this.version, + this.password, this.databaseTypeConverters, this.allTypeConverters, ) : streamEntities = @@ -43,6 +45,7 @@ class Database { views.equals(other.views) && daoGetters.equals(other.daoGetters) && version == other.version && + password == other.password && databaseTypeConverters.equals(other.databaseTypeConverters) && allTypeConverters.equals(other.allTypeConverters) && streamEntities.equals(other.streamEntities) && @@ -56,6 +59,7 @@ class Database { views.hashCode ^ daoGetters.hashCode ^ version.hashCode ^ + password.hashCode ^ databaseTypeConverters.hashCode ^ allTypeConverters.hashCode ^ streamEntities.hashCode ^ @@ -63,6 +67,6 @@ class Database { @override String toString() { - return 'Database{classElement: $classElement, name: $name, entities: $entities, views: $views, daoGetters: $daoGetters, version: $version, databaseTypeConverters: $databaseTypeConverters, allTypeConverters: $allTypeConverters, streamEntities: $streamEntities, hasViewStreams: $hasViewStreams}'; + return 'Database{classElement: $classElement, name: $name, entities: $entities, views: $views, daoGetters: $daoGetters, version: $version, password: $password, databaseTypeConverters: $databaseTypeConverters, allTypeConverters: $allTypeConverters, streamEntities: $streamEntities, hasViewStreams: $hasViewStreams}'; } } diff --git a/floor_generator/lib/writer/database_builder_writer.dart b/floor_generator/lib/writer/database_builder_writer.dart index 7e9bbee9..a87f4c61 100644 --- a/floor_generator/lib/writer/database_builder_writer.dart +++ b/floor_generator/lib/writer/database_builder_writer.dart @@ -16,6 +16,11 @@ class DatabaseBuilderWriter extends Writer { ..type = refer('String?') ..modifier = FieldModifier.final$); + final passwordField = Field((builder) => builder + ..name = 'password' + ..type = refer('String?') + ..modifier = FieldModifier.final$); + final migrationsField = Field((builder) => builder ..name = '_migrations' ..type = refer('List') @@ -29,7 +34,10 @@ class DatabaseBuilderWriter extends Writer { final constructor = Constructor((builder) => builder ..requiredParameters.add(Parameter((builder) => builder ..toThis = true - ..name = 'name'))); + ..name = 'name')) + ..requiredParameters.add(Parameter((builder) => builder + ..toThis = true + ..name = 'password'))); final addMigrationsMethod = Method((builder) => builder ..name = 'addMigrations' @@ -67,6 +75,7 @@ class DatabaseBuilderWriter extends Writer { final database = _\$$_databaseName(); database.database = await database.open( path, + password, _migrations, _callback, ); @@ -77,6 +86,7 @@ class DatabaseBuilderWriter extends Writer { ..name = databaseBuilderName ..fields.addAll([ nameField, + passwordField, migrationsField, callbackField, ]) diff --git a/floor_generator/lib/writer/database_writer.dart b/floor_generator/lib/writer/database_writer.dart index e1c91897..c0cde9e1 100644 --- a/floor_generator/lib/writer/database_writer.dart +++ b/floor_generator/lib/writer/database_writer.dart @@ -86,6 +86,9 @@ class DatabaseWriter implements Writer { final pathParameter = Parameter((builder) => builder ..name = 'path' ..type = refer('String')); + final passwordParameter = Parameter((builder) => builder + ..name = 'password' + ..type = refer('String?')); final migrationsParameter = Parameter((builder) => builder ..name = 'migrations' ..type = refer('List')); @@ -97,11 +100,13 @@ class DatabaseWriter implements Writer { ..name = 'open' ..returns = refer('Future') ..modifier = MethodModifier.async - ..requiredParameters.addAll([pathParameter, migrationsParameter]) + ..requiredParameters + .addAll([pathParameter, passwordParameter, migrationsParameter]) ..optionalParameters.add(callbackParameter) ..body = Code(''' - final databaseOptions = sqflite.OpenDatabaseOptions( + final databaseOptions = sqflite.SqlCipherOpenDatabaseOptions( version: ${database.version}, + password: password${database.password == null ? '' : (" ??'" + database.password! + "'")}, onConfigure: (database) async { await database.execute('PRAGMA foreign_keys = ON'); await callback?.onConfigure?.call(database); diff --git a/floor_generator/lib/writer/floor_writer.dart b/floor_generator/lib/writer/floor_writer.dart index 697ae678..a6c7cfe9 100644 --- a/floor_generator/lib/writer/floor_writer.dart +++ b/floor_generator/lib/writer/floor_writer.dart @@ -14,7 +14,7 @@ class FloorWriter extends Writer { ..name = 'databaseBuilder' ..lambda = true ..static = true - ..body = Code('$databaseBuilderName(name)') + ..body = Code('$databaseBuilderName(name, password)') ..returns = refer(databaseBuilderName) ..docs.addAll([ r'/// Creates a database builder for a persistent database.', @@ -22,7 +22,10 @@ class FloorWriter extends Writer { ]) ..requiredParameters.add(Parameter((builder) => builder ..name = 'name' - ..type = refer('String')))); + ..type = refer('String'))) + ..optionalParameters.add(Parameter((builder) => builder + ..name = 'password' + ..type = refer('String?')))); final inMemoryDatabaseBuilderMethod = Method((builder) => builder ..name = 'inMemoryDatabaseBuilder' @@ -34,7 +37,7 @@ class FloorWriter extends Writer { '/// Information stored in an in memory database disappears when the process is killed.', '/// Once a database is built, you should keep a reference to it and re-use it.' ]) - ..body = Code('$databaseBuilderName(null)')); + ..body = Code('$databaseBuilderName(null, null)')); return Class((builder) => builder ..name = '\$Floor$_databaseName' diff --git a/floor_generator/pubspec.lock b/floor_generator/pubspec.lock index ad1cd597..cacb9b20 100644 --- a/floor_generator/pubspec.lock +++ b/floor_generator/pubspec.lock @@ -5,168 +5,168 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "25.0.0" analyzer: dependency: "direct main" description: name: analyzer - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.0" args: dependency: transitive description: name: args - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.1.0" + version: "2.3.0" async: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.5.0" + version: "2.8.2" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" build: dependency: "direct main" description: name: build - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" build_config: dependency: "direct main" description: name: build_config - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" build_resolvers: dependency: transitive description: name: build_resolvers - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.4" build_test: dependency: "direct dev" description: name: build_test - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.3" built_collection: dependency: transitive description: name: built_collection - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "5.0.0" + version: "5.1.1" built_value: dependency: transitive description: name: built_value - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "8.0.5" + version: "8.1.2" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.1.0" + version: "1.2.0" charcode: dependency: transitive description: name: charcode - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.2.0" + version: "1.3.1" checked_yaml: dependency: transitive description: name: checked_yaml - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.1" cli_util: dependency: transitive description: name: cli_util - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.3.0" + version: "0.3.3" code_builder: dependency: "direct main" description: name: code_builder - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.1.0" collection: dependency: "direct main" description: name: collection - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.15.0" convert: dependency: transitive description: name: convert - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "3.0.0" + version: "3.0.1" coverage: dependency: transitive description: name: coverage - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.2" + version: "1.0.3" crypto: dependency: transitive description: name: crypto - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.1" csslib: dependency: transitive description: name: csslib - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.17.0" dart_style: dependency: "direct dev" description: name: dart_style - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" file: dependency: transitive description: name: file - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "6.1.0" + version: "6.1.2" fixnum: dependency: transitive description: name: fixnum - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" floor_annotation: @@ -175,327 +175,327 @@ packages: path: "../floor_annotation" relative: true source: path - version: "1.0.1" + version: "1.0.1-sqlcipher" frontend_server_client: dependency: transitive description: name: frontend_server_client - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.2" glob: dependency: transitive description: name: glob - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.1" graphs: dependency: transitive description: name: graphs - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.0" + version: "2.1.0" html: dependency: transitive description: name: html - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.15.0" http_multi_server: dependency: transitive description: name: http_multi_server - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.1" http_parser: dependency: transitive description: name: http_parser - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.0" io: dependency: transitive description: name: io - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.0" + version: "1.0.3" js: dependency: transitive description: name: js - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.6.3" json_annotation: dependency: transitive description: name: json_annotation - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "4.0.1" + version: "4.1.0" lists: dependency: transitive description: name: lists - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.0" + version: "1.0.1" logging: dependency: transitive description: name: logging - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.12.11" meta: dependency: "direct main" description: name: meta - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.7.0" mime: dependency: transitive description: name: mime - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" node_preamble: dependency: transitive description: name: node_preamble - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.0" + version: "2.0.1" package_config: dependency: transitive description: name: package_config - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.0" + version: "2.0.2" path: dependency: "direct dev" description: name: path - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.8.0" pedantic: dependency: transitive description: name: pedantic - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.11.0" + version: "1.11.1" pool: dependency: transitive description: name: pool - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.5.0" pub_semver: dependency: transitive description: name: pub_semver - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" pubspec_parse: dependency: transitive description: name: pubspec_parse - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" shelf: dependency: transitive description: name: shelf - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.1.0" + version: "1.2.0" shelf_packages_handler: dependency: transitive description: name: shelf_packages_handler - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0" shelf_static: dependency: transitive description: name: shelf_static - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.0" + version: "1.1.0" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" source_gen: dependency: "direct main" description: name: source_gen - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" source_map_stack_trace: dependency: transitive description: name: source_map_stack_trace - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" source_maps: dependency: transitive description: name: source_maps - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.10.10" source_span: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.8.1" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.10.0" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" stream_transform: dependency: transitive description: name: stream_transform - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" strings: dependency: "direct main" description: name: strings - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.2.1" + version: "0.2.2" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" test: dependency: "direct dev" description: name: test - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.17.12" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.4.3" test_core: dependency: transitive description: name: test_core - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.4.2" test_cov: dependency: "direct dev" description: name: test_cov - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" typed_data: dependency: transitive description: name: typed_data - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.0" unicode: dependency: transitive description: name: unicode - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.3.0" + version: "0.3.1" vm_service: dependency: transitive description: name: vm_service - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "6.2.0" + version: "7.3.0" watcher: dependency: transitive description: name: watcher - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" web_socket_channel: dependency: transitive description: name: web_socket_channel - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.0" + version: "2.1.0" webkit_inspection_protocol: dependency: transitive description: name: webkit_inspection_protocol - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" yaml: dependency: transitive description: name: yaml - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.0" sdks: diff --git a/floor_generator/pubspec.yaml b/floor_generator/pubspec.yaml index 463e2e50..9f2843d3 100644 --- a/floor_generator/pubspec.yaml +++ b/floor_generator/pubspec.yaml @@ -2,7 +2,7 @@ name: floor_generator description: > The typesafe, reactive, and lightweight SQLite abstraction for your Flutter applications. This library is the dev dependency. -version: 1.2.0 +version: 1.2.0-sqlcipher homepage: https://floor.codes publish_to: none