🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

1回答

2859閲覧

flutter ローカルDBにデータが保存されない

退会済みユーザー

退会済みユーザー

総合スコア0

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

0クリップ

投稿2019/12/12 01:13

前提・実現したいこと

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)

ご回答、アドバイスのほど、よろしくお願いいたしまします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Flutterはエラーが発生していてもログに出力されないことがあるので、
try-catchで囲って本当にエラーが発生していないか確認してみてください。

Dart

1child: RaisedButton( 2 onPressed: () { 3 try { 4 Navigator.pop(context); 5 final thread = Thread( 6 title: _formController.text, 7 body: "テスト自動入力" 8 ); 9 Thread.insertThread(thread); 10 } catch (e) { 11 print(e); 12 } 13 }, 14 child: Text("スレッド作成"), 15)

投稿2020/05/08 09:16

satokei

総合スコア1217

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問