我正在構建一個簡單的筆記應用程式,但我在使用SQLite保存資料(標題和正文)時遇到了困難。
DataBaseHelper類
import 'package:path/path.dart'。
import 'package:sqflite/sqflite.dart';
import 'model_notes.dart';
class DatabaseHelper {
static final _databaseName = "myNote.db" ;
static final _databaseVersion = 1;
static final table = 'note_table';
static final columnId = 'id';
static final columnTitle = 'title';
static final columnBody = 'body';
DatabaseHelper._privateConstructor()。
static final DatabaseHelper instance = DatabaseHelper._privateConstructor();
static Database _database;
Future<Database> get資料庫 async {
if (_database != null) return _database;
_database = await _initDatabase();
return _database;
}
_initDatabase() async {
String path = join(await getDatabasesPath(), _databaseName) 。
return await openDatabase(path,
版本。_databaseVersion,
onCreate: _onCreate)。)
}
Future _onCreate(Database db, int version) async {
await db.execute(''
CREATE TABLE $table (
$columnId INTEGER PRIMARY KEY AUTOINCREMENT,
$columnTitle TEXT NOT NULL,
$columnBody TEXT NOT NULL
)
'')。)
}
Future<int> insert(Note note) async {
資料庫db = await instance.資料庫。
return await db.insert(table, {'title': note.title, 'body': note.body})。
}
這就是筆記的模型類
import 'db_operations.dart'/span>;
class Note {
int id;
String title。
String body;
Note(this.id, this。 title, this.body)。)
Note.fromMap(span class="hljs-built_in">Map<String, dynamic> map) {
id = map['id']。
title = map['title']。
body = map['body']。
}
Map<String, dynamic> toMap(){
return {
DatabaseHelper.columnId : id,
DatabaseHelper.columnTitle : title。
DatabaseHelper.columnBody : body
};
}
}
這就是我呼叫插入方法的地方(class name = adding_notes.dart)
import 'package:flutter/cupertino.dart' 。
import 'package:flutter/material.dart';
import 'package:note_taking_app/constants/buttons_and_icons_misc(classes).dart'。
import 'package:note_taking_app/db/db_operations.dart'。
import 'package:note_taking_app/db/model_notes.dart'。
import 'package:sqflite/sqflite.dart';
import 'main_screen.dart' 。
final bodyController = TextEditingController();
final headerController = TextEditingController() 。
final dbHelper = DatabaseHelper.instance;
class AddingNotes extends StatefulWidget{
@override
_AddingNotesState createState() => _AddingNotesState()。
}
class _AddingNotesState extends State<AddingNotes> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
坡度。0,
backwardsCompatibility: true,
領先。LeadingIcon(
callBack: () {
Navigator.pop(context)。
},
),
backgroundColor: Colors.white.withOpacity(0.4) 。
行動: <Widget>[
ActionsIconButton(
圖示。Icon(undo, color: black)。
callBack: () {
debugPrint('undo tapped')。
},
),
ActionsIconButton(
圖示。Icon(redo, color: black),
callBack: () {
debugPrint('redo tapped')。
},
),
ActionsIconButton(
圖示。Icon(保存,顏色:黑色)。
callBack: () async {
debugPrint(bodyController.text)。
debugPrint(headerController.text)。
getHeaderDataToMainScreen(context)。
String title = headerController.text;
String body = bodyController.text;
/*這里是我呼叫insert方法的地方*/Container(
color: Colors.white.withOpacity(0.4) 。
孩子。Padding(
padding: const EdgeInsets.all(13.0) 。
孩子。Column(
兒童。[
HeaderBody(
textEditingController: headerController,
),
SizedBox(
高度。32.0,
),
Expanded(
孩子。NotesBody(
textEditingController: bodyController,
),
),
],
),
),
),
);
}
}
getHeaderDataToMainScreen(BuildContext context){
Navigator.push(context,
MaterialPageRoute(
建設者。(context) => MainScreen(
heading : headerController.text,
)
)
);
}
它顯示了太多的位置引數,預計是1個發現2個。我知道我需要發送一個引數,但我怎樣才能將標題和正文作為一個引數發送。也許我可以通過List來發送,但我不知道怎么做。有什么幫助嗎,我在過去的5天里被卡住了。
uj5u.com熱心網友回復:
檢查下面的例子,我已經根據你提供的代碼創建了。
import 'package:flutter/cupertino.dart'/span>。
import 'package:flutter/material.dart';
import 'db_operations.dart';
void main() {
runApp(MaterialApp(
debugShowCheckedModeBanner。false,
首頁。AddingNotes(),
));
}
final bodyController = TextEditingController()。
final headerController = TextEditingController()。
final dbHelper = DatabaseHelper.instance;
class AddingNotes extends StatefulWidget{
@override
_AddingNotesState createState() => _AddingNotesState()。
}
class _AddingNotesState extends State< AddingNotes> {
@override>
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
提升。0,
領導。GestureDetector(
onTap: () {
Navigator.pop(context)。
},
孩子。padding(
padding: const EdgeInsets.all(8.0)。
孩子。Icon(
Icons.add,
color: Colors.black,
),
),
),
backgroundColor: Colors.white.withOpacity(0.4)。
行動: <Widget>[
填充(
padding: const EdgeInsets.all(8.0)。
孩子。GestureDetector()
onTap: () {
debugPrint('undo tapped')。
},
孩子。Icon(
Icons.undo,
color: Colors.black,
),
),
),
padding(
padding: const EdgeInsets.all(8.0)。
孩子。GestureDetector()
onTap: () {
debugPrint('redo tapped')。
},
孩子。Icon(
Icons.redo,
color: Colors.black,
),
),
),
padding(
padding: const EdgeInsets.all(8.0)。
孩子。GestureDetector()
onTap: () async {
debugPrint(bodyController.text)。
debugPrint(headerController.text)。
//getHeaderDataToMainScreen(context);
String title = headerController.text;
String body = bodyController.text。
Note note = Note(20, title, body)。
var value = await dbHelper.insert(note)。
print("if 1 is return then insert success and 0 then not inserted : $value")。)
},
孩子。圖示(
Icons.save,
color: Colors.black,
),
),
)
],
),
身體。容器(
color: Colors.white.withOpacity(0.4)。
孩子。padding(
padding: const EdgeInsets.all(13.0) 。
兒童。列(
兒童。[
TextField(
controller: headerController,
),
SizedBox(
高度。32.0。
),
擴展的(
孩子。TextField(
controller: bodyController,
),
),
],
),
),
),
);
}
}
// getHeaderDataToMainScreen(BuildContext context) {.
// Navigator.push(context,)
// MaterialPageRoute()
// builder: (context) =>
// MainScreen()
// heading: headerController.text,
// )
// )
// ); / );
// }
class Note{
int id;
String title。
String body。
Note(this.id, this.title, this.body) 。
Note.fromMap(Map<String, dynamic> map) {
id = map['id']。
title = map['title']。
body = map['body']。
}
Map<String, dynamic> toMap() {
return {
DatabaseHelper.columnId: id,
DatabaseHelper.columnTitle: 標題。
DatabaseHelper.columnBody: body
};
}
}
這只是一個演示示例,在一個檔案中添加了所有的東西,并做了許多修改。 根據你的需要來改變它。 你不需要一個自動增加的ID,因為你已經在資料庫中給出了它。 運行該應用程式并讓我知道它是否有效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/309817.html
標籤:
