前提・実現したいこと
Flutterの勉強がてら、簡単な掲示板アプリを作成中です。
現在は、スレッド作成フォームに文字を入力・送信をすると、ローカルのDBにスレッドタイトルと本文が保存される部分の作成を行っています。
発生している問題・エラーメッセージ
エラーなくローカルDBの作成とInsertメソッドが準備できました。
実行時にもエラーは起きていないのですが、肝心のデータが保存されておらず、DBが空になってしまっています。
該当のソースコード
db_provider.dart
dart
1import 'dart:async'; 2import 'package:path/path.dart'; 3import 'package:sqflite/sqflite.dart'; 4 5class DbProvider { 6 DbProvider._internal(); 7 8 static final version = 1; 9 static final instance = DbProvider._internal(); 10 11 Database db; 12 13 static Future<String> getPath() async { 14 return join(await getDatabasesPath(), 'sqlite.db'); 15 } 16 17 static Future delete() async { 18 await deleteDatabase(await getPath()); 19 } 20 21 open() async { 22 if (null != db) return; 23 24 db = await openDatabase( 25 await getPath(), 26 version: version, 27 onCreate: (Database db, int version) async { 28 await db.execute( 29 """ 30 create table thread 31 ( 32 id integer primary key, 33 title text, 34 body text 35 ) 36 """ 37 ); 38 } 39 ); 40 } 41}
thread.dart
dart
1import 'package:sqflite/sqflite.dart'; 2import 'package:friendlychat/models/db_provider.dart'; 3 4class Thread { 5 int id; 6 String title; 7 String body; 8 9 Thread({ 10 this.id, 11 this.title, 12 this.body 13 }); 14 15 Map<String, dynamic> toMap() { 16 return { 17 'id': id, 18 'title': title, 19 'body': body, 20 }; 21 } 22 23 static Future<void> insertThread(Thread thread) async { 24 final dbProvider = DbProvider.instance; 25 await dbProvider.open(); 26 await dbProvider.db.insert( 27 'thread', 28 thread.toMap(), 29 conflictAlgorithm: ConflictAlgorithm.replace, 30 ); 31 } 32}
createThreadScreen.dart
dart
1// 略 2 padding: EdgeInsets.all(10.0), 3 child: RaisedButton( 4 onPressed: () { 5 Navigator.pop(context); 6 final thread = Thread( 7 title: _formController.text, 8 body: "テスト自動入力" 9 ); 10 Thread.insertThread(thread); 11 }, 12 child: Text("スレッド作成"), 13 ) 14)
ご回答、アドバイスのほど、よろしくお願いいたしまします!
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。