#flutter #dart
#flutter #dart
Вопрос:
Итак, я работал над этим приложением из учебника, и у меня все заработало, но часть, в которой обновление остается постоянным, элементы ListTile обновляются, когда я нажимаю кнопку для обновления (onTap), но они меняют свои значения на исходные после того, как я покидаю страницу. Вот мой код для обновления:
Future<int> update(Food food) async {
final db = await database;
return await db.update(
TABLE_FOOD,
food.toMap(),
where: "id = ?",
whereArgs: [food.id],
);
}
class UpdateFood extends FoodEvent {
Food newFood;
int foodIndex;
UpdateFood(int index, Food food) {
newFood = food;
foodIndex = index;
}
}
Кнопка обновления обновляет значения элементов ListTile, но они не остаются постоянными, они возвращаются к исходным значениям после изменения страницы, а затем возвращаются к основному.
Вот состояние инициализации, возможно, с ним что-то не так:
void initState() {
super.initState();
DatabaseProvider.db.getFoods().then(
(foodList) {
BlocProvider.of<FoodBloc>(context).add(SetFoods(foodList));
},
Я понимаю, если проблема не в одном из них, но, возможно, в setState или initState, поэтому вот полный код Github, это очень короткое приложение, и, вероятно, кому-то потребуется всего несколько минут, чтобы сказать, в чем проблема:
https://github.com/cheetahcoding/CwC_Flutter/tree/sqflite_tutorial/lib
Ответ №1:
Я думаю, вам не хватает обновления обновленного Food
объекта в БД в food_form.dart
// This one is the updated one,
Food food = Food(
id: widget.food.id, // add this line
name: _name,
calories: _calories,
isVegan: _isVegan,
);
DatabaseProvider.db.update(food).then( // <= change "widget.food" to "food"
(storedFood) => BlocProvider.of<FoodBloc>(context).add(
UpdateFood(widget.foodIndex, food),
),
);
транзакция обновления БД выполнена успешно, но значения являются старыми.
Комментарии:
1. Я не могу отблагодарить вас, я знал, что проблема существует, но после тысяч строк я не мог ее понять. Слава!
2. Добро пожаловать! Вы можете ознакомиться с режимом отладки и разделить действие на множество шагов. Это может помочь в отладке.