если у вас более одной записи данных, вам нужна List<DBNoteModel>
вашей модели данных. В этом примере он показывает с Listview
в вашей команде onCreate
базы данных, для каждой команды требуется отдельный execute
, такой как
onCreate: (db, version) async {
await db.execute("CREATE TABLE notes(id TEXT PRIMARY KEY, value TEXT)");
await db.execute("INSERT INTO notes (id, value) VALUES ('home', 'asd')");
await db.execute("INSERT INTO notes (id, value) VALUES ('home2', 'asddf')");
},
DBHelper
class DBHelper {
Database _db;
Future<Database> get db async {
if (_db != null) {
return _db;
}
_db = await initDatabase();
return _db;
}
initDatabase() async {
return await openDatabase(join(await getDatabasesPath(), "database.db"),
onCreate: (db, version) async {
await db.execute("CREATE TABLE notes(id TEXT PRIMARY KEY, value TEXT)");
await db.execute("INSERT INTO notes (id, value) VALUES ('home', 'asd')");
await db.execute("INSERT INTO notes (id, value) VALUES ('home2', 'asddf')");
},
version: 1);
}
Future<void> updateNote({DBNoteModel dbnoteupdate}) async {
_db.update("notes", dbnoteupdate.toMap(), where: 'id = ?', whereArgs: [dbnoteupdate.id]);
}
Future<void> insertNote({DBNoteModel dbnoteupdate}) async {
_db.insert("notes", dbnoteupdate.toMap());
}
Future<List<DBNoteModel>> selectNote(String value) async {
_db = await db;
List<Map> result;
if(value == "")
result = await _db.query("notes");
else {
result = await _db.query("notes", where: "value LIKE '" + value + "%'");
}
List<DBNoteModel> r_DBNoteModel = result.map((i) => DBNoteModel.fromMap(i)).toList();
return r_DBNoteModel;
}
}
показать некоторые данные в ListView, на вкладке => update, при изменении текстового поля => выбрать Like? *, На FloatingButton => insert
class sqFliteSimpleExample extends StatefulWidget {
@override
_sqFliteSimpleExampleState createState() => _sqFliteSimpleExampleState();
}
class _sqFliteSimpleExampleState extends State<sqFliteSimpleExample> {
List<DBNoteModel> dbnotes = new List();
final DBHelper _dbHelper = DBHelper();
TextEditingController editingController = new TextEditingController();
@override
void initState() {
//fetch Notes for the firstTime
getNotes("");
super.initState();
}
getNotes(String where) {
// Select with a where or without
_dbHelper.selectNote(where).then((value) {
// return value is a List<DBNoteModel>
setState(() {
// refresh screen with the new values
dbnotes = value;
});
});
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(title: new Text("SqFilte Notes"),),
body: new Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
new Expanded(
child: new ListView.builder(
itemCount: dbnotes.length,
itemBuilder: (BuildContext context, index) {
return new ListTile(
title: Text(dbnotes[index].id.toString()),
subtitle: Text(dbnotes[index].value),
onTap: () {
// updates you local Datamodel
dbnotes[index].value = dbnotes[index].value + " update";
// send sql Update
_dbHelper.updateNote(dbnoteupdate: dbnotes[index]).then((value) {
// refresh when it's done
getNotes("");
});
},
);
},
),
),
new Padding(
padding: const EdgeInsets.all(15.0),
child: new TextField(
controller: editingController,
onChanged: (value) => getNotes(value), // refresh the screen every string input in the TextField
decoration: InputDecoration(
hintText: 'search / create',
border: InputBorder.none,
),
),
),
],
),
floatingActionButton: new FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
//insert a new Note, and refresh when it's done
_dbHelper.insertNote(dbnoteupdate: new DBNoteModel(id: editingController.text, value: editingController.text)).then((value) {
getNotes("");
});
}
),
);
}
}