Flutter : sqliteの利用
Flutter + Firebase でアプリ作成のためのパーツあつめ。
1.ここまでに確認したこと
2.今回の確認
sqliteの利用
sqfliteのページのチュートリアルを見ながらコードを記述し、動作確認
- import 'package:path/path.dart';
- import 'package:sqflite/sqflite.dart';
- class DbTest {
- void firstDbTest() async {
- // OSなど環境別のDBディレクトリパスを取得する
- var dbPath = await getDatabasesPath();
- // DBファイルパス
- dbPath = join(dbPath, 'demo.db');
- print("DB Path $dbPath");
- var helper = MemoProvider();
- Database db = await helper.open(dbPath);
- print("DB: ${db.toString()}");
- var list = await helper.getAll();
- if (list.length < 10) {
- var newMemo = Memo();
- newMemo.memo = "Memo ${DateTime.now()}";
- helper.insert(newMemo);
- }
- for(Memo memo in list) {
- print("MEMO : ${memo.toMap().toString()}");
- }
- }
- }
- class MemoMeta {
- static String tableName = "Memo";
- static String columnId = "_id";
- static String columnMemo = "memo";
- static List<String> columns() {
- return [columnId, columnMemo];
- }
- }
- class Memo {
- int id;
- String memo;
- Map<String, dynamic> toMap() {
- var map = <String, dynamic> {
- MemoMeta.columnMemo: memo
- };
- if (id != null) {
- map[MemoMeta.columnId] = id;
- }
- return map;
- }
- Memo();
- Memo.fromMap(Map<String, dynamic> map) {
- id = map[MemoMeta.columnId];
- memo = map[MemoMeta.columnMemo];
- }
- }
- class MemoProvider {
- Database db;
- Future<Database> open(String path) async {
- var ddl = """
- create table ${MemoMeta.tableName} (
- ${MemoMeta.columnId} integer primary key autoincrement,
- ${MemoMeta.columnMemo} text not null )
- """;
- print("DDL: $ddl");
- db = await openDatabase(path, version: 1,
- onCreate: (Database db, int version) async {
- await db.execute(ddl);
- }
- );
- return db;
- }
- Future<Memo> insert(Memo memo) async {
- memo.id = await db.insert(MemoMeta.tableName, memo.toMap());
- return memo;
- }
- Future<List<Memo>> getAll() async {
- List<Map> maps = await db.query(
- MemoMeta.tableName,
- columns : MemoMeta.columns());
- var list = new List<Memo>();
- for(Map map in maps) {
- list.add(Memo.fromMap(map));
- }
- return list;
- }
- Future<Memo> findById(int id) async {
- List<Map> maps = await db.query(MemoMeta.tableName,
- columns: MemoMeta.columns(),
- where: '${MemoMeta.columnId} = ?',
- whereArgs: [id]);
- if (maps.length > 0) {
- return Memo.fromMap(maps.first);
- }
- return null;
- }
- Future<int> delete(int id) async {
- return await db.delete(
- MemoMeta.tableName, where: '${MemoMeta.columnId} = ?', whereArgs: [id]);
- }
- Future<int> update(Memo memo) async {
- return await db.update(MemoMeta.tableName, memo.toMap(),
- where: '${MemoMeta.columnId} = ?', whereArgs: [memo.id]);
- }
- Future close() async => db.close();
- }
ログに出力された。
- I/flutter ( 3116): DB Path /data/user/0/info.typea.favo_phrase_trial/databases/demo.db
- I/flutter ( 3116): DDL: create table Memo (
- I/flutter ( 3116): _id integer primary key autoincrement,
- I/flutter ( 3116): memo text not null )
- I/flutter ( 3116): DB: 2 /data/user/0/info.typea.favo_phrase_trial/databases/demo.db
- V/AudioManager( 3116): playSoundEffect effectType: 0
- V/AudioManager( 3116): querySoundEffectsEnabled...
- I/flutter ( 3116): MEMO : {memo: Memo 2019-12-09 21:18:12.816597, _id: 1}
- I/flutter ( 3116): MEMO : {memo: Memo 2019-12-09 21:18:17.761803, _id: 2}