ListView.builder(
itemCount: _list.length,
itemBuilder: (context, i) {
return ListTile(
title: todonoteShow(context, _list[i]),
leading: IconButton(
icon: _list[i].isDone == true
? Icon(
Icons.radio_button_checked,
color: Theme.of(context).primaryColor,
)
: Icon(Icons.radio_button_unchecked),
onPressed: () {
setState(() {
_list[i].isDone = !_list[i].isDone;
});
},
вот мой код, когда я нажимаю кнопку, состояние меняется, это правильно,
но после того, как я открываю другую страницу и возвращаюсь, состояние значка сбрасывается ,,
Я использую sqflite, мой вопрос, когда я нажимаю на кнопку с иконкой,
как я могу сохранить параметр _list [i] .isDone в моей базе данных,
Спасибо!
database//
final String columnIsDone = 'isDone';
Future<int> updateTodo(Todonote todonote) async {
var d = await db;
var res = d.update(tableName, todonote.toMap(),
);
print('$res');
return res;
}
todo.dart//
_saveTodo1(String thing, bool isDone) async {
if (widget.todonote != null) {
Todonote upd = Todonote.fromMap({
'id': widget.todonote.id,
'thing': widget.todonote.thing,
'isDone': isDone == true ? 1 : 0
});
await widget.db.updateTodo(upd);
return upd;
}
}
iconbutton//
onPressed: () {
setState(() {
_list[i].isDone = !_list[i].isDone;
});
_saveTodo1(_list[i].thing, _list[i].isDone);
},
Я сделал, как выше, но это не работает!
class DataBase {
Database _database;
final String tableName = 'notetodo';
final String columnId = 'id';
final String columnThing = 'thing';
final String columnIsDone = 'isDone';
final String tableName2 = 'notetodo2';
final String columnId2 = 'id2';
final String columnTitle = 'title';
final String columnThing2 = 'thing2';
final String columnDate = 'date';
initDb() async {
var directoryPath = await getDatabasesPath();
String path = join(directoryPath, 'notetodo.db');
var db = await openDatabase(path, version: 1, onCreate: _onCreate);
print('good,version:1');
return db;
}
FutureOr<void> _onCreate(Database db, int version) async {
await db.execute('''create table $tableName(
$columnId integer primary key,
$columnThing text not null,
$columnIsDone integer)''');
await db.execute('''create table $tableName2(
$columnId2 integer primary key,
$columnThing2 text not null,
$columnDate text not null,
$columnTitle text)''');
print('right');
db.close();
}
введите описание изображения здесь